Warum wird meine Datei / etc / hosts nicht abgefragt, wenn nslookup versucht, eine Adresse aufzulösen?

14

127.0.0.1In meiner /etc/hostsDatei sind einige lokale Domänen aufgelöst . Und für eine Weile war alles in Ordnung, aber jetzt, als ich renne:

nslookup test.local

Es fuehrt zu:

Server:     192.168.1.3
Address:    192.168.1.3#53

** server can't find test.local: NXDOMAIN

Das 192.168.1.3ist unser Netzwerk-DNS und es soll meine lokale Domain nicht kennen test.local. Nach ein paar Suchen fand ich, dass diese /etc/nsswitch.confDatei Informationen über die Priorität der DNS-Quellen enthält, nach denen abgefragt werden soll. Aber da gab es kein Problem! Hier ist meins:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Weiß jemand, warum meine hostsDatei nicht in der DNS-Suche enthalten ist?

Mehran
quelle

Antworten:

20

nslookupNur die ordnungsgemäße DNS-Auflösung unterscheidet sich erheblich vom Subsystem Name Service Switch , das von Ihren anderen Anwendungen verwendet wird. das heißt nslookupignoriert /etc/hostsund mDNS.

Verwenden Sie zum Testen solcher lokaler Auflösungen etwas, das NSS verwendet. ping <hostname>beispielsweise. Hier ist eine einfache Demo, die auf einem /etc/hostsEintrag in meinem Netzwerk basiert .

$ nslookup bert
Server:     8.8.8.8
Address:    8.8.8.8#53

** server can't find bert: NXDOMAIN

$ ping bert
PING bert (10.10.0.4) 56(84) bytes of data.
64 bytes from bert (10.10.0.4): icmp_seq=1 ttl=64 time=0.352 ms
64 bytes from bert (10.10.0.4): icmp_seq=2 ttl=64 time=0.407 ms

Beachten Sie, dass es DNS-Server und -Proxy-Server gibt, die eine /etc/hostsDatei berücksichtigen können . In diesen Fällen wird nslookupmöglicherweise ein Ergebnis von einer lokalen Quelle zurückgegeben.

Oli
quelle
5
Stattdessen pingsollte man verwenden, getent ahostsweil das nicht alle zusätzlichen Dinge erfordert, die pinghat.
Mikko Rantalainen
2

Ich vermute, dass Sie die Namensauflösung aus der /etc/hostsDatei für den bestimmten Host (mysite.com) wollen.

Ein weiteres häufiges Problem, das dieses Verhalten verursachen kann, besteht darin, dass Sie möglicherweise viele Einträge /etc/hostsfür dieselbe IP- Adresse in der Datei haben. Beispiel:

1.1.1.1 host1.domain1.com
1.1.1.1 host2.domain2.com

In einigen Implementierungen kann dies dazu führen, dass die Namensauflösung an DNS übergeben wird. Eine schnelle Lösung, alles in einer Reihe gruppieren

1.1.1.1 host1.domain1.com host2.domain2.com
afe038
quelle
1

Eine andere häufige Erscheinung ist, dass jemand (normalerweise ich) die IP-Adresse mit dem Hostnamen in umgekehrt hat /etc/hosts- zum Beispiel:

mysite.com    10.2.3.4

Auf den ersten Blick sieht es normal aus ... Hier ist meine Lösung in etwa 50% der Fälle:

10.2.3.4    mysite.com
KLaw
quelle
diesmal schuldig ... # seufzen
Cybex
1
Normalerweise werden die Hosts-Dateien mit einem vordefinierten 127.0.0.1 localhost-Eintrag geliefert. Es falsch zu machen ist so viel falsch :-)
m3nda