traceroute는 어떻게 이름을 확인합니까?


11

스크립트를 작성하는 동안 컴퓨터에 지정한 컴퓨터 이름 (예 : "selenium-rc")으로 컴퓨터를 참조하고 싶었습니다. "selenium-rc"를 사용하여 ping 할 수 없으므로 다음 명령을 사용하여 이름이 인식되는지 확인했습니다.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

좋아, traceroute는 이름을 "찾았다". 어떻게? 다음 ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

흠 ... 호스트가 알 수 없으므로 여기에서 조회 메커니즘이 달라야합니다. 나는 이것이 시스템 이름 확인 프로세스를 사용하고 있다고 가정하고 첫 번째 예제는 traceroute에 특정한 프로세스를 사용하고 있다고 가정합니다. 옳은?

그런 다음 나중에 조금 돌아 왔을 때 ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

좋아, 다른 결과. "selenium-rc"이름은 시스템 자체에서 변경되지 않았지만 추적 경로 이름 확인 프로세스에는 일종의 우선 순위가 포함되어야하며 이제 네트워크의 다른 시스템 / 서비스에 의해 할당 된 더 권위있는 결과를 제공합니다. (불행히도, 나는 그것이 제어 할 수없는 동적 이름이라고 가정하므로 스크립트에서 유용하지 않습니다.)

누군가 결과를 설명 할 수 있습니까?

답변:


9

일반적으로 Linux 및 Unix에서 traceroute 및 ping은 gethostbyname () 호출을 사용하여 시스템 이름을 조회합니다. gethostbyname ()은 시스템 구성 파일을 사용하여 명명 데이터베이스 (예 : / etc / hosts 및 DNS)를 쿼리하는 순서를 결정합니다.

Linux에서 기본 동작은 DNS를 먼저 쿼리 한 다음 / etc / hosts를 쿼리하는 것입니다. /etc/host.conf에서 원하는 순서를 설정하여 변경하거나 업데이트 할 수 있습니다.

DNS 전에 / etc / hosts를 검색하려면 /etc/host.conf에서 다음 순서를 설정하십시오.

order hosts,bind

Solaris에서도 이와 동일한 순서는 hosts 데이터베이스 항목의 /etc/nsswitch.conf 파일을 통해 제어됩니다.

호스트 : 파일 DNS

DNS를 검색하기 전에 / etc / hosts에서 검색 순서를 설정합니다.

Traceroute와 Ping은이 방법을 사용하여 구성된 모든 명명 데이터베이스를 검색합니다. host하고 nslookup그들이 반드시 겉으로는 일관되지 않은 결과가 당신에게있는 거 보는 중복되지 않도록 만 DNS 모두 사용을 명령한다.

Solaris에는 검색 도구 getent가 있습니다.이 도구 는 구성된 경로 지정 데이터베이스를 따라 검색하여 추적 경로 및 핑과 동일한 방식으로 호스트 또는 주소를 식별하는 데 사용할 수 있습니다.

getent hosts <hostname>

/etc/nsswitch.conf에서 호스트에 대해 나열된 데이터베이스를 검색합니다.

그래서. 일관된 결과를 얻으려면 / etc / hosts에 다음을 추가하십시오.

192.168.235.41 selenium-rc

/etc/host.conf에 다음이 있는지 확인하십시오.

order hosts,bind

또는 /etc/nsswitch.conf에 다음이 있는지 확인하십시오.

hosts: files dns

완료되면 ping 및 traceroute와 ssh, telnet, curl, wget 등과 같은 다른 명령을 사용하여보다 일관된 결과를 볼 수 있습니다.


dig 유틸리티를 사용하여 resolv.conf 파일에 나열된 DNS 서버를 쿼리 할 때 두 항목을 모두 찾았습니다. 나는 traceroute가 정규화 된 것을 선호한다고 생각합니다.
Keith Bentrup

2

역방향 조회가 올바르게 설정되었지만 앞으로는 설정되지 않은 것 같습니다.

시스템은 IP 주소 192.168.235.41 selenium-rc을 찾아서이를 인식 하지만 찾을 때 selenium-rc실패합니다.

나는 당신이 확인 추천 /etc/hosts하고 /etc/resolv.conf; getaddrinfo시스템 호출 의 동작은 후자에 의해 지시되며 전자를 참조합니다.


1

내 생각에 : 호출 traceroute 192.168.235.41하면 IP 주소 192.168.235.41과 함께 오는 이름을 찾기 위해 DNS 요청이 나갔습니다. traceroute -n 192.168.235.41찾은 각 IP 주소에서 DNS 조회를 수행하지 않고 traceroute를 시작하는 방법입니다. DNS 서버는 대기하려는 DNS 시스템보다 응답 시간이 오래 걸리므로 처음에는 traceroute가 192.168.235.41의 호스트 이름을 제공하지 않았습니다. traceroute가 192.168.235.41에서 패킷을 보내고받을 때까지 DNS 서버가 응답하므로 traceroute가 호스트 이름을 지정할 수 있습니다.

"DNS 서버 문제"라고 말하면 매우 편리한 타이밍으로 다른 것들을 의심하게됩니다. "머피의 법칙"을 여기에서 생각하십시오. 나중에 다시 돌아 왔을 때, 같은 IP 주소에 대해 다른 이름을 갖게되므로 추적 경로를 수행하는 동안 누군가 DNS 서버 구성을 망 쳤을 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.