Tengo el siguiente /etc/hostsarchivo 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 puppetmastercorrectamente, 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.confveía asíhosts: files dnsy la cambié a,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4sin embargo, en ambos casos/etc/hostsno se consulta, sino que parece que se realizan consultas directas. ¿Cómo puedo asegurar que/etc/hostsse consultará primero cuando use un comando comodigohost?getent hostso algo más que usegethostbyname()getent ahostslugar degetent hostsporquegetent hostsusagethostbyaddr()ogethostbyname*()que son obsoletos. Si he entendido correctamente,getent hostsemula cómo funcionaban los antiguos programas UNIX C ygetent ahostsemula la forma en que deberían funcionar los programas modernos.Porque la
hostutilidad es exclusivamente una utilidad de búsqueda de DNS.La mayoría de las aplicaciones usan las llamadas a la biblioteca
getaddrinfoogethostbyname. Estas bibliotecas interrogan un archivo llamado/etc/nsswitch.confpara determinar la prioridad de búsqueda y la política de cómo realizar diferentes búsquedas.Normalmente
/etc/nsswitch.confcontiene la líneaLo que le dice a un programa que primero interrogue
/etc/hostsy luego interrogue DNS si no tiene éxito.Dado que los hosts
/etc/hostsrealizan búsquedas de DNS exclusivamente, no se asoma para realizar la búsqueda.fuente
Lo encontrará
digy senslookupcomportará 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.confy luego (si es necesario)/etc/resolv.confpara decidir cómo resolver el nombre de host que está solicitando. (Esto es una simplificación, hay otras opciones). Elnsswitch.confarchivo 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