Warum löst der Befehl host keine Einträge in / etc / hosts auf?

25

Ich habe die folgende /etc/hostsDatei 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 puppetmasterrichtig 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?

user784637
quelle

Antworten:

52

Das hostProgramm verwendet libresolv, um eine DNS-Abfrage direkt durchzuführen, dh nicht verwendet gethostbyname.

Die meisten Programme rufen beim Versuch, eine Verbindung zu einem anderen Host herzustellen, den gethostbynameSystemaufruf oder eine ähnliche Funktion auf. Diese Funktion folgt der Konfiguration von /etc/nsswitch.conf. Diese Datei hat eine Zeile, die in Ubuntu 12.04 standardmäßig wie folgt lautet:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Dies bedeutet, dass es zuerst verwendet wird /etc/hostsund dann auf DNS-Abfragen zurückgreift.

Wenn Sie auf diese Weise eine Host-Suche durchführen möchten, können Sie dies mit ausführen getent hosts. Beispielsweise:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

Ich hoffe das hilft.

Kvisle
quelle
2
Danke Kvisle, aber ich bin immer noch ein bisschen verwirrt. Die Zeile in /etc/nsswitch.confsah so aus hosts: files dnsund ich habe sie geändert, hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4aber in beiden Fällen /etc/hostswird nicht abgefragt, stattdessen scheinen direkte DNS-Abfragen gemacht zu werden. Wie kann ich sicherstellen, dass /etc/hostsbei Verwendung eines Befehls wie digoder das zuerst abgefragt wird host?
user784637
4
Das kannst du nicht. dig / host verwendet DNS direkt. Wenn Sie eine Namenssuche durchführen müssen, die zuerst die Hosts-Datei überprüft, müssen Sie getent hostsgethostbyname()
Folgendes
Oh ich
verstehe
1
Ich glaube, dass man heutzutage verwenden sollte, getent ahostsanstatt getent hostsweil getent hostsverwendet gethostbyaddr()oder gethostbyname*()die veraltet sind. Wenn ich es richtig verstanden habe, getent hostsemuliert es, wie alte UNIX C-Programme funktionierten, und getent ahostsemuliert, wie Moderm-Programme funktionieren sollten.
Mikko Rantalainen
Aber gibt es eine Möglichkeit, den Befehl host dazu zu bringen, auch / etc / hosts zu verwenden?
Kornel
10

Weil das hostDienstprogramm ausschließlich ein DNS-Suchdienstprogramm ist.

Die meisten Anwendungen verwenden die Bibliotheksaufrufe getaddrinfooder gethostbyname. 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.confEnthält normalerweise die Zeile

hosts:        files dns

Dies weist ein Programm an, zuerst /etc/hostsDNS abzufragen und dann, wenn dies nicht erfolgreich ist, DNS abzufragen.

Da Hosts ausschließlich DNS-Suchvorgänge durchführt, wird /etc/hostsder Suchvorgang nicht ausgeführt.

Matthew Ife
quelle
3

Sie werden das finden digund nslookupsich genauso verhalten wie host.

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.confden Hostnamen auflöst, den Sie anfordern. (Dies ist eine Vereinfachung, es gibt andere Optionen.) In der nsswitch.confRegel hat die Datei Vorrang vor lokalen Dateien und nicht vor DNS.

Ladadadada
quelle
-1

Ü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

hosts      files dns

Wenn Ihre nicht vorhanden ist oder in einer anderen Reihenfolge, könnte dies Ihr Problem sein.

MelBurslan
quelle
Es ist vorhanden und sieht so aushosts: files dns
user784637