Por que meu arquivo / etc / hosts não é consultado quando o nslookup tenta resolver um endereço?

15

Eu tenho alguns domínios locais resolvidos 127.0.0.1no meu /etc/hostsarquivo. E tudo ficou bem por um período de tempo, mas agora quando corro:

nslookup test.local

Isso resulta em:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

O 192.168.1.3é o DNS da nossa rede e não deveria conhecer meu domínio local test.local. Após algumas pesquisas, descobri que o /etc/nsswitch.confarquivo contém informações sobre a prioridade das fontes DNS a serem consultadas. Mas não havia nenhum problema lá! Aqui está o meu:

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

Alguém sabe por que meu hostsarquivo não está incluído na pesquisa de DNS?

Mehran
fonte

Respostas:

20

nslookupsomente faz a resolução DNS adequada , que é significativamente diferente do subsistema Name Service Switch que seus outros aplicativos usam; isto é, nslookupignora /etc/hostse mDNS.

Para testar resoluções locais como essa, use algo que use o NSS. ping <hostname>por exemplo. Aqui está uma demonstração simples com base em uma /etc/hostsentrada na minha rede.

$ 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

Observe que existem servidores e proxies DNS que podem levar em consideração um /etc/hostsarquivo. Nesses casos, nslookuppode retornar um resultado de uma fonte local.

Oli
fonte
5
Em vez de pingum deve estar usando, getent ahostsporque isso não requer todo o material extra que pingpossui.
Mikko Rantalainen
2

Eu acho que você deseja a resolução de nomes do /etc/hostsarquivo para o host específico (mysite.com).

Outro problema comum que pode causar esse comportamento é que você pode ter muitas entradas no /etc/hostsarquivo para o mesmo IP, por exemplo:

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

Em algumas implementações, isso pode fazer com que a resolução de nomes seja entregue ao DNS. Uma solução rápida, agrupe tudo em uma linha

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

Outra coisa comum que vejo é onde alguém (geralmente eu) reverte o endereço IP com o nome do host /etc/hosts- por exemplo:

mysite.com    10.2.3.4

À primeira vista, parece normal ... Aqui está a minha solução cerca de 50% das vezes:

10.2.3.4    mysite.com
KLaw
fonte
culpados por isso desta vez ... # suspiro
Cybex
1
Geralmente, os arquivos hosts vêm com a entrada 127.0.0.1 localhost predefinida. Fazendo errado é muito errado :-)
m3nda