Perché il mio file / etc / hosts non viene interrogato quando nslookup tenta di risolvere un indirizzo?


15

Ho un paio di domini locali risolti 127.0.0.1nel mio /etc/hostsfile. Ed è andato tutto bene per un periodo di tempo, ma ora quando corro:

nslookup test.local

Si traduce in:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

È il 192.168.1.3nostro DNS di rete e non dovrebbe conoscere il mio dominio locale test.local. Dopo un paio di ricerche, ho scoperto che il /etc/nsswitch.conffile contiene informazioni sulla priorità delle origini DNS da interrogare. Ma non c'era nessun problema lì! Ecco il mio:

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

Qualcuno sa perché il mio hostsfile non è incluso nella ricerca DNS?

Risposte:


20

nslookupesegue solo la risoluzione DNS corretta , che è significativamente diversa dal sottosistema Switch nome servizio utilizzato dalle altre applicazioni; vale a dire nslookupignora /etc/hostse mDNS.

Per testare risoluzioni locali del genere, utilizzare qualcosa che utilizza NSS. ping <hostname>per esempio. Ecco una semplice demo basata su una /etc/hostsvoce sulla mia rete.

$ 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

Si noti che ci sono server DNS e proxy che possono fattorizzare un /etc/hostsfile. In questi casi, nslookuppotrebbe restituire un risultato da una fonte locale.


5
Invece di pinguno dovrebbe essere utilizzato getent ahostsperché ciò non richiede tutte le cose extra che pingha.
Mikko Rantalainen,

2

Suppongo che desideri la risoluzione dei nomi dal /etc/hostsfile per l'host specifico (mysite.com).

Un altro problema comune che può causare questo comportamento è che potresti avere molte voci sul /etc/hostsfile per lo stesso IP, ad esempio:

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

In alcune implementazioni, ciò può causare la consegna del nome DNS al DNS. Una soluzione rapida, raggruppa tutto in 1 riga

1.1.1.1 host1.domain1.com host2.domain2.com

1

Un'altra cosa comune che vedo è dove qualcuno (di solito io) inverte l'indirizzo IP con il nome host in /etc/hosts- ad esempio:

mysite.com    10.2.3.4

A prima vista, sembra normale ... Ecco la mia soluzione circa il 50% delle volte:

10.2.3.4    mysite.com

colpevole di questa volta ... # sospiro
Cybex,

1
Di solito i file hosts vengono forniti con la voce localhost 127.0.0.1 predefinita. Farlo nel modo sbagliato è molto sbagliato :-)
m3nda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.