Ich habe die folgende /etc/hosts
Datei auf einem Ubuntu 12.04-Computer
127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Der Host-Befehl löst den Namen jedoch nicht puppetmaster
richtig auf, während der Telnet-Befehl dies tut
root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)
root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
Warum löst der Befehl host keine Einträge in / etc / hosts auf?
quelle
/etc/nsswitch.conf
sah so aushosts: files dns
und ich habe sie geändert,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
aber in beiden Fällen/etc/hosts
wird nicht abgefragt, stattdessen scheinen direkte DNS-Abfragen gemacht zu werden. Wie kann ich sicherstellen, dass/etc/hosts
bei Verwendung eines Befehls wiedig
oder das zuerst abgefragt wirdhost
?getent hosts
gethostbyname()
getent ahosts
anstattgetent hosts
weilgetent hosts
verwendetgethostbyaddr()
odergethostbyname*()
die veraltet sind. Wenn ich es richtig verstanden habe,getent hosts
emuliert es, wie alte UNIX C-Programme funktionierten, undgetent ahosts
emuliert, wie Moderm-Programme funktionieren sollten.Weil das
host
Dienstprogramm ausschließlich ein DNS-Suchdienstprogramm ist.Die meisten Anwendungen verwenden die Bibliotheksaufrufe
getaddrinfo
odergethostbyname
. Diese Bibliotheken fragen eine aufgerufene Datei ab/etc/nsswitch.conf
, um die Suchpriorität und die Richtlinie für die Durchführung verschiedener Suchvorgänge zu bestimmen./etc/nsswitch.conf
Enthält normalerweise die ZeileDies weist ein Programm an, zuerst
/etc/hosts
DNS abzufragen und dann, wenn dies nicht erfolgreich ist, DNS abzufragen.Da Hosts ausschließlich DNS-Suchvorgänge durchführt, wird
/etc/hosts
der Suchvorgang nicht ausgeführt.quelle
Sie werden das finden
dig
undnslookup
sich genauso verhalten wiehost
.Der Grund dafür ist, dass der Zweck aller dieser Befehle darin besteht, DNS-Lookups durchzuführen und nicht in Dateien zu suchen.
Die meisten anderen Programme verwenden den Namensauflöser des Betriebssystems, der
/etc/nsswitch.conf
(falls erforderlich)/etc/resolv.conf
den Hostnamen auflöst, den Sie anfordern. (Dies ist eine Vereinfachung, es gibt andere Optionen.) In dernsswitch.conf
Regel hat die Datei Vorrang vor lokalen Dateien und nicht vor DNS.quelle
Überprüfen Sie die Datei /etc/nsswitch.conf und suchen Sie nach der Zeile, die mit dem Wort "hosts" beginnt. Sehen Sie das Wort "files" in dieser Zeile? Wenn ja, steht es vor oder nach dem Wort "dns"?
Auf einem normalen System sollte diese Zeile ungefähr so aussehen
Wenn Ihre nicht vorhanden ist oder in einer anderen Reihenfolge, könnte dies Ihr Problem sein.
quelle
hosts: files dns