스크립트를 작성할 때 내가 지정한 컴퓨터 이름(예: "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" 이름은 시스템 자체에서 변경되지 않았지만 추적 경로 이름 확인 프로세스에는 일종의 우선 순위가 포함되어야 했으며 이제는 네트워크의 다른 시스템/서비스에 의해 할당된 잠재적으로 더 권위 있는 결과를 제공합니다. (안타깝게도 제가 제어할 수 없는 동적 이름이라 가정하고 있으므로 스크립트에서는 사용할 수 없습니다.)
누군가 결과를 설명할 수 있나요?
답변1
일반적으로 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에서는 호스트 데이터베이스 항목의 /etc/nsswitch.conf 파일을 통해 동일한 순서가 제어됩니다.
호스트:filedns
DNS를 검색하기 전에 /etc/hosts를 찾도록 검색 순서를 설정합니다.
Traceroute와 ping은 모두 이러한 방법을 사용하여 구성된 모든 명명된 데이터베이스를 검색합니다. host
및 명령은 nslookup
모두 DNS만 사용하므로 겉보기에 일관되지 않은 결과를 반드시 복제하지는 않습니다.
getent
Solaris 에는 검색을 위해 구성된 명명된 데이터베이스 집합을 따라 추적 경로 및 핑과 동일한 방식으로 호스트나 주소를 식별하는 데 사용할 수 있는 조회 도구가 있습니다 .
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 등과 같은 기타 명령에서 보다 일관된 결과를 볼 수 있습니다.
답변2
역방향 조회는 올바르게 설정했지만 정방향 조회는 설정하지 않은 것 같습니다.
시스템은 IP 주소 192.168.235.41을 조회하고 인식할 수 있지만 selenium-rc
조회를 시도하면 selenium-rc
실패합니다.
시스템 호출의 동작은 후자에 의해 결정되며 전자를 참조하는 것이 /etc/hosts
좋습니다 ./etc/resolv.conf
getaddrinfo
답변3
내 추측: 호출 traceroute 192.168.235.41
로 인해 DNS 요청이 나가서 IP 주소 192.168.235.41과 연결된 이름을 찾게 됩니다. 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 서버 구성을 망친 것일 수도 있다는 생각이 듭니다.