Dlaczego mój plik / etc / hosts nie jest pytany, gdy nslookup próbuje rozwiązać adres?

15

127.0.0.1W moim /etc/hostspliku rozwiązano kilka domen lokalnych . Przez pewien czas wszystko było w porządku, ale teraz, kiedy biegam:

nslookup test.local

Powoduje to:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

To 192.168.1.3jest nasza sieć DNS i nie powinna znać mojej lokalnej domeny test.local. Po kilku poszukiwaniach okazało się, że /etc/nsswitch.confplik zawiera informacje o priorytecie źródeł DNS, o które należy zapytać. Ale nie było problemu! To moje:

# /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

Czy ktoś wie, dlaczego mój hostsplik nie jest uwzględniony w wyszukiwaniu DNS?

Mehran
źródło

Odpowiedzi:

20

nslookupwykonuje tylko prawidłowe rozpoznawanie DNS, które znacznie różni się od podsystemu zamiany usług nazw , z którego korzystają inne aplikacje; to znaczy nslookupignoruje /etc/hostsi mDNS.

Aby przetestować lokalne rozwiązania tego typu, użyj czegoś, co używa NSS. ping <hostname>na przykład. Oto proste demo oparte na /etc/hostswpisie w mojej sieci.

$ 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

Pamiętaj, że istnieją serwery DNS i serwery proxy, które mogą uwzględniać /etc/hostsplik. W takich przypadkach nslookupmoże zwrócić wynik z lokalnego źródła.

Oli
źródło
6
Zamiast pingjednego należy używać, getent ahostsponieważ nie wymaga to wszystkich dodatkowych rzeczy ping.
Mikko Rantalainen
2

Myślę, że chcesz rozpoznać nazwę z /etc/hostspliku dla konkretnego hosta (mysite.com).

Innym częstym problemem, który może powodować takie zachowanie, jest to, że w /etc/hostspliku może znajdować się wiele wpisów dla tego samego adresu IP, na przykład:

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

W niektórych implementacjach może to spowodować przekazanie rozpoznawania nazw do DNS. Szybka poprawka, zgrupuj wszystko w 1 rzędzie

1.1.1.1 host1.domain1.com host2.domain2.com
afe038
źródło
1

Inną częstą rzeczą, którą widzę, jest to, że ktoś (zazwyczaj ja) odwraca adres IP z nazwą hosta w /etc/hosts- na przykład:

mysite.com    10.2.3.4

Na pierwszy rzut oka wygląda normalnie ... Oto moje rozwiązanie w około 50% przypadków:

10.2.3.4    mysite.com
KLaw
źródło
tym razem winny ... # westchnienie
Cybex
1
Zwykle pliki hostów są dostarczane ze wstępnie zdefiniowanym wpisem localhost 127.0.0.1. Niewłaściwe postępowanie jest bardzo złe :-)
m3nda