Zuordnung von Hostname und IP-Adresse in / etc / hosts

13

In meinem Linux - Rechner, wenn ich laufe hostname, es zeigt mongodb, aber wenn ich laufe host mongodb, es zeigt:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

Meine /etc/hostsAkte:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# 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
  • Meine erste Frage lautet: Da /etc/hostsdie Zuordnung von IP zu Hostname erfolgt, kann dieser Computer den Hostnamen nicht mongodbin IP 192.168.10.10 auflösen . Stattdessen kann es beim Ausführen host localhostaufgelöst werden und zeigt Folgendes:

    localhost has address 127.0.0.1
    
  • Meine andere Frage: Laut der /etc/hostsDatei sollte der Hostname localhostauf 192.168.10.10 anstelle der Loopback-IP-Adresse 127.0.0.1 aufgelöst worden sein. Kann mir jemand das erklären?

Wuchang
quelle

Antworten:

30

Die Dienstprogramme host(und nslookup) fragen explizit DNS-Server ab und konsultieren die /etc/hostsDatei in einer Standardsystemkonfiguration nicht. Wenn Sie an tracerouteoder pingdiese Adresse waren, würden Sie sehen, dass es richtig aufgelöst wird.

Sie möchten nicht zu localhosteiner anderen Map als 127.0.0.1 wechseln , da dies auf viele Dinge seltsame und subtile Auswirkungen haben kann. Ich denke , das /etc/hostswird in der Reihenfolge analysiert, in der es geschrieben ist, und da Sie haben:

192.168.10.10   localhost
127.0.0.1       localhost

..der zweite Eintrag kann den ersten überschreiben.

DopeGhoti
quelle
4
/etc/hostshat keine Auswirkung auf die DNS-Auflösung, wenn DNS-Server direkt abgefragt werden host. Viele Systemtools und Dienstprogramme verwenden jedoch die localhostDefinition, wobei erwartet wird, dass es sich um eine Loopback-Adresse handelt, und verwenden die Systemnamensauflösung (die /etc/hostsvor dem Abfragen von DNS ausgeführt wird), um Namen aufzulösen, anstatt ausschließlich zu DNS zu wechseln, das möglicherweise nicht immer vorhanden ist.
DopeGhoti
1
Ich kann auch Erfahrungen mit Problemen in der /etc/hostsDatei bezüglich teilen localhost. In der Vergangenheit hatten wir eine Software verwendet, die ein 127.0.0.2 localhostin die Hosts-Datei einfügte, und mit diesem letzten localhostEintrag wurden alle Arten von Software- und Lizenzproblemen verursacht. Daher empfehle ich, 127.0.0.1 localhostals ersten Eintrag in Ihrer /etc/hostsDatei sicherzustellen, dass sich localhostin dieser Datei kein anderer Eintrag befindet. Und ich würde auch alle IPv6-Sachen überprüfen.
Ron
4
Um etwas umständlich zu sein, führen beide einen ns-Lookup durch, der möglicherweise ein DNS-Lookup ist, wenn Sie den Host-Lookup in der Datei nsswitch.conf so konfiguriert haben.
Symcbean
1
@symcbean - was Sie sagen, ist richtig. Ich würde das nicht pedantisch nennen.
DarkHeart
2
Eine bemerkenswerte, nicht offensichtliche Ausnahme besteht darin, dass Sie /etc/resolv.confauf einen DNS-Server verweisen, der direkt auf Ihrem Gerät ausgeführt wird (wie ein Caching dnsmasq), und dieser Server Ihren lokalen Server konsultiert, /etc/hostsbevor Sie externe Server abfragen. Dann werden Befehle wie hostdiese indirekt von Ihnen ausgeführt /etc/hosts- dies ist eine ungewöhnliche Einrichtung, aber eine, mit der ich Geräte ausgeliefert habe, und die Erfahrung von jemandem, der ein solches System verwendet, kann mit dieser Antwort in Konflikt stehen, wenn jemand diese besondere Einrichtung nicht kennt .
mtraceur
9

Neben DopeGhoti Antwort, Ihre Lösung, inlcuding die testen /etc/hostsVorrang, können Sie das verwenden getent hosts <some_hostname>Befehl.

HBruijn
quelle
-3

Ich habe ähnliche Probleme mit einer / etc / hosts, die mehrere Leerzeichen zwischen IP und Hostname enthält, anstatt ein TAB zu verwenden. Nach dem Wechsel zu TAB konnte der Hostname durch Ping aufgelöst werden.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

Siehe auch unter /superuser//a/938366/467479

Thomas Lauria
quelle
4
Das überrascht mich. In der Manpage für hostsheißt es: Fields of the entry are separated by any number of blanks and/or tab characters. Vielleicht gab es in Ihrem Fall ein nicht druckbares Zeichen zwischen der IP und dem Hostnamen?
dr01
Es gab definitiv keine nicht druckbaren Zeichen. Ich habe das überprüft, bevor ich das hier gepostet habe;)
Thomas Lauria
Ich habe keine Tabulatorzeichen, ich führe SLES 11.x aus und nach einer sauberen Installation von DVD folgten meiner / etc / hosts-Datei 127.0.0.17 Leerzeichen gefolgt von localhost. Ich würde also ein wenig zögern, das Problem spezifisch auf mehrere Leerzeichen zu beschränken und abschließend das Tabulatorzeichen als Lösung zu verwenden.
Ron
vergessen zu erwähnen, dass das tab versus space auch in einer bestimmten version oder verteilung von linux vorkommen kann, was ein fehler sein kann? und wenn dies der Fall wäre sollten Sie in der Lage sein, verschiedenen IP - Adresse / Hostnamen Einträge entweder mit einem Tab oder einen Raum, dann tut ein Ping auf sie zu machen , um zu sehen , ob es gelöst wird ... nur tut es nicht mitlocalhost
ron
Leider weiß ich nicht mehr, auf welcher Maschine (und damit auf welcher Distribution) ich das Problem hatte ... - Ich glaube, es war auf Ubuntu 15.05 von virtualboximages.com/. Ich werde das jetzt bewerten.
Thomas Lauria