Tengo el siguiente /etc/hosts
archivo en una máquina ubuntu 12.04
127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Sin embargo, el comando host no resuelve el nombre puppetmaster
correctamente, mientras que el comando telnet sí lo hace
root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)
root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
¿Por qué el comando host no resuelve entradas en / etc / hosts?
fuente
/etc/nsswitch.conf
veía asíhosts: files dns
y la cambié a,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
sin embargo, en ambos casos/etc/hosts
no se consulta, sino que parece que se realizan consultas directas. ¿Cómo puedo asegurar que/etc/hosts
se consultará primero cuando use un comando comodig
ohost
?getent hosts
o algo más que usegethostbyname()
getent ahosts
lugar degetent hosts
porquegetent hosts
usagethostbyaddr()
ogethostbyname*()
que son obsoletos. Si he entendido correctamente,getent hosts
emula cómo funcionaban los antiguos programas UNIX C ygetent ahosts
emula la forma en que deberían funcionar los programas modernos.Porque la
host
utilidad es exclusivamente una utilidad de búsqueda de DNS.La mayoría de las aplicaciones usan las llamadas a la biblioteca
getaddrinfo
ogethostbyname
. Estas bibliotecas interrogan un archivo llamado/etc/nsswitch.conf
para determinar la prioridad de búsqueda y la política de cómo realizar diferentes búsquedas.Normalmente
/etc/nsswitch.conf
contiene la líneaLo que le dice a un programa que primero interrogue
/etc/hosts
y luego interrogue DNS si no tiene éxito.Dado que los hosts
/etc/hosts
realizan búsquedas de DNS exclusivamente, no se asoma para realizar la búsqueda.fuente
Lo encontrará
dig
y senslookup
comportará de la misma manera quehost
.La razón de esto es que el propósito de todos estos comandos es hacer búsquedas DNS, no buscar archivos.
La mayoría de los otros programas utilizan el solucionador de nombre del sistema operativo que consulta
/etc/nsswitch.conf
y luego (si es necesario)/etc/resolv.conf
para decidir cómo resolver el nombre de host que está solicitando. (Esto es una simplificación, hay otras opciones). Elnsswitch.conf
archivo generalmente tiene prioridad sobre los archivos locales en lugar de DNS.fuente
verifique el archivo /etc/nsswitch.conf y busque la línea que comienza con la palabra "hosts"? ¿Ves la palabra "archivos" en esta línea? En caso afirmativo, ¿es antes o después de la palabra "dns"?
En un sistema normal, esta línea debería ser algo así como
Si el suyo no está presente o en un orden diferente, ese podría ser su problema.
fuente
hosts: files dns