¿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?

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.


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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.