Wie löst Traceroute Namen auf?

11

Beim Schreiben eines Skripts wollte ich eine Maschine mit dem von mir angegebenen Computernamen referenzieren (z. B. "selenium-rc"). Ich konnte es nicht mit "selenium-rc" anpingen, also habe ich die folgenden Befehle ausprobiert, um festzustellen, ob der Name erkannt wurde.

> 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

Ok, Traceroute hat den Namen "gefunden". Wie? Nächster ...

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

Hmm ... der Suchmechanismus hier muss anders sein, da der Host unbekannt ist. Ich gehe davon aus, dass hierbei ein Prozess zur Auflösung von Systemnamen verwendet wird, während im ersten Beispiel ein für Traceroute spezifischer Prozess verwendet wurde. Richtig?

Dann, als ich etwas später zurückkam ...

> 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

Ok, anderes Ergebnis. Der Name "selenium-rc" hat sich auf dem Computer selbst nicht geändert, aber der Prozess zur Auflösung des Traceroute-Namens muss eine Priorität enthalten und liefert nun ein vermutlich maßgeblicheres Ergebnis, das von einem anderen System / Dienst im Netzwerk zugewiesen wurde. (Leider gehe ich davon aus, dass es sich um einen dynamischen Namen handelt, den ich nicht kontrolliere, und daher wäre er in einem Skript nicht nützlich.)

Kann jemand die Ergebnisse erklären?

Keith Bentrup
quelle

Antworten:

9

Unter Linux und Unix verwenden Traceroute und Ping im Allgemeinen einen Aufruf von gethostbyname (), um den Namen eines Systems zu suchen. gethostbyname () verwendet wiederum die Systemkonfigurationsdateien, um die Reihenfolge zu bestimmen, in der die Namensdatenbanken abgefragt werden sollen, dh: / etc / hosts und DNS.

Unter Linux ist die Standardaktion (oder möglicherweise früher), zuerst DNS und dann / etc / hosts abzufragen. Dies kann geändert oder aktualisiert werden, indem die gewünschte Reihenfolge in /etc/host.conf festgelegt wird.

Um / etc / hosts vor DNS zu durchsuchen, legen Sie in /etc/host.conf die folgende Reihenfolge fest:

order hosts,bind

In Solaris wird dieselbe Reihenfolge über die Datei /etc/nsswitch.conf im Eintrag für die Hosts-Datenbank gesteuert.

Hosts: Dateien DNS

Legt die Suchreihenfolge fest, in der vor dem Durchsuchen von DNS in / etc / hosts gesucht wird.

Traceroute und Ping würden beide diese Methoden verwenden, um alle konfigurierten Namensdatenbanken zu durchsuchen. Die Befehle hostund verwenden nslookupbeide nur DNS, sodass sie die scheinbar inkonsistenten Ergebnisse, die Sie sehen, nicht unbedingt duplizieren.

Solaris verfügt über ein Nachschlagetool, getentmit dem Hosts oder Adressen auf dieselbe Weise wie Traceroute und Ping identifiziert werden können, indem die konfigurierten Namensdatenbanken für die Suche befolgt werden.

getent hosts <hostname>

würde alle Datenbanken durchsuchen, die in /etc/nsswitch.conf nach Hosts aufgelistet sind.

So. Fügen Sie in Ihrem Fall Folgendes zu / etc / hosts hinzu, um konsistente Ergebnisse zu erzielen

192.168.235.41 selenium-rc

Und stellen Sie sicher, dass /etc/host.conf Folgendes hat:

order hosts,bind

Oder stellen Sie sicher, dass /etc/nsswitch.conf Folgendes enthält:

hosts: files dns

Sobald dies erledigt ist, sollten Sie konsistentere Ergebnisse sowohl mit Ping und Traceroute als auch mit anderen Befehlen wie ssh, telnet, curl, wget usw. sehen.

Tim Kennedy
quelle
Als ich den in der Datei resolv.conf aufgeführten DNS-Server mit dem Dienstprogramm dig abfragte, fand ich beide Einträge. Ich denke, Traceroute bevorzugte die voll qualifizierte.
Keith Bentrup
2

Sieht so aus, als hätten Sie die umgekehrte Suche richtig eingerichtet, aber nicht vorwärts.

Ihr System kann die IP-Adresse 192.168.235.41 nachschlagen und erkennen, dass dies der Fall ist. selenium-rcWenn es jedoch versucht, nachzuschlagen, selenium-rcschlägt dies fehl.

Ich empfehle Ihnen zu überprüfen /etc/hostsund /etc/resolv.conf; Das Verhalten des getaddrinfoSystemaufrufs wird vom letzteren vorgegeben und verweist auf den ersteren.

Shadur
quelle
1

Meine Vermutung: Beim Aufrufen wurde traceroute 192.168.235.41eine DNS-Anfrage gesendet, um den Namen für die IP-Adresse 192.168.235.41 zu finden. traceroute -n 192.168.235.41ist der Weg, um Traceroute zu starten, ohne DNS-Lookups für jede gefundene IP-Adresse durchzuführen. Der DNS-Server brauchte länger, um zu antworten, als das DNS-System warten wollte, daher gab traceroute zunächst keinen Hostnamen für 192.168.235.41 an. Bis Traceroute Pakete von 192.168.235.41 sendet und empfängt, hat Ihr DNS-Server geantwortet, sodass Traceroute einen Hostnamen dafür angeben kann.

Ich würde also "DNS-Serverprobleme" sagen, mit einem sehr günstigen Zeitpunkt, der Sie gegenüber anderen Dingen misstrauisch machte. Denken Sie hier an "Murphys Gesetz". Wenn Sie etwas später zurückkommen, erhalten Sie einen anderen Namen für dieselbe IP-Adresse, was mich auch glauben lässt, dass während der Durchführung Ihrer Traceroutes möglicherweise jemand mit der DNS-Serverkonfiguration herumgespielt hat.

Bruce Ediger
quelle