¿Por qué no se consulta mi archivo / etc / hosts cuando nslookup intenta resolver una dirección?

15

Tengo un par de dominios locales resueltos 127.0.0.1en mi /etc/hostsarchivo. Y todo estuvo bien por un período de tiempo, pero ahora cuando corro:

nslookup test.local

En resultado de:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

El 192.168.1.3es nuestro DNS de red y no se supone que conozca mi dominio local test.local. Después de un par de búsquedas, encontré que el /etc/nsswitch.confarchivo contiene información sobre la prioridad de las fuentes DNS para consultar. ¡Pero no había ningún problema allí! Aquí está el mío:

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

Entonces, ¿alguien sabe por qué mi hostsarchivo no está incluido en la búsqueda de DNS?

Mehran
fuente

Respuestas:

20

nslookupsolo tiene una resolución de DNS adecuada , que es significativamente diferente del subsistema Switch del servicio de nombres que usan sus otras aplicaciones; es decir nslookupignora /etc/hostsy mDNS.

Para probar resoluciones locales como esa, use algo que use NSS. ping <hostname>por ejemplo. Aquí hay una demostración simple basada en una /etc/hostsentrada en mi red.

$ 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

Tenga en cuenta que hay servidores DNS y servidores proxy que pueden incluir un /etc/hostsarchivo. En estos casos, nslookuppodría devolver un resultado de una fuente local.

Oli
fuente
55
En lugar de pinguno debería estar usando getent ahostsporque eso no requiere todas las cosas adicionales que pingtiene.
Mikko Rantalainen
2

Supongo que desea la resolución de nombre del /etc/hostsarchivo para el host específico (mysite.com).

Otro problema común que puede causar este comportamiento es que puede tener muchas entradas en el /etc/hostsarchivo para la misma IP, por ejemplo:

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

En algunas implementaciones, esto puede hacer que la resolución de nombre se transfiera a DNS. Una solución rápida, agrupe todo en 1 fila

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

Otra cosa común que veo es donde alguien (generalmente yo) invierte la dirección IP con el nombre de host en /etc/hosts, por ejemplo:

mysite.com    10.2.3.4

A primera vista, parece normal ... Aquí está mi solución aproximadamente el 50% del tiempo:

10.2.3.4    mysite.com
KLaw
fuente
culpable de esta vez ... # suspiro
Cybex
1
Por lo general, los archivos de hosts vienen con una entrada localhost 127.0.0.1 predefinida. Hacerlo mal está muy mal :-)
m3nda