Asignación de nombre de host y dirección IP en / etc / hosts

14

En mi máquina Linux, cuando ejecuto hostname, se muestra mongodb, pero cuando ejecuto host mongodb, muestra:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

Mi /etc/hostsarchivo:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# 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
  • Mi primera pregunta es: dado que /etc/hostses una asignación de IP a nombre de host, ¿por qué esta máquina no puede resolver el nombre mongodbde host a IP 192.168.10.10? En cambio, cuando ejecuto host localhost, se puede resolver y muestra:

    localhost has address 127.0.0.1
    
  • Mi otra pregunta: según el /etc/hostsarchivo, el nombre de host localhostdebería haberse resuelto a 192.168.10.10 en lugar de la dirección de bucle invertido 127.0.0.1. ¿Alguien me puede explicar esto?

wuchang
fuente

Respuestas:

30

Las utilidades host(y nslookup) consultan explícitamente los servidores DNS y no consultan el /etc/hostsarchivo en una configuración predeterminada del sistema. Si se va a tracerouteo pingque la dirección, que se vería resuelve correctamente.

Usted no quiere cambiar localhostpara asignar a otra cosa que no sea 127.0.0.1, esto puede tener efectos extraños y sutiles en muchas cosas. Yo creo que /etc/hostsse analiza en el orden en el que está escrito, y ya que usted tiene:

192.168.10.10   localhost
127.0.0.1       localhost

..la segunda entrada puede estar anulando la primera.

DopeGhoti
fuente
55
/etc/hostsno tiene ningún efecto en la resolución de DNS cuando se consultan servidores DNS directamente, que es lo que hosthace. Sin embargo, muchas herramientas y utilidades del sistema usan la localhostdefinición, esperando que sea una dirección de bucle invertido, y usan la resolución de nombre del sistema (que se ve /etc/hostsantes de consultar DNS) para resolver nombres en lugar de ir estrictamente a DNS, que puede no estar siempre presente.
DopeGhoti
1
También puedo compartir experiencias con problemas relacionados con el /etc/hostsarchivo localhost. En el pasado, habíamos utilizado un software que insertaba un 127.0.0.2 localhostarchivo en el archivo de hosts y esa era la última localhostentrada, lo que causaba que fuera el que causaba todo tipo de problemas de software y licencia. Por lo tanto, mi recomendación es tener 127.0.0.1 localhostcomo primera entrada en su /etc/hostsarchivo y asegurarse de que no haya otra localhostentrada en ese archivo. Y también verificaría cualquier cosa de ipv6 también.
ron
55
Para ser algo pedante, ambos realizan una búsqueda de ns que podría ser una búsqueda de dns si así es como ha configurado la búsqueda de host en nsswitch.conf.
symcbean
1
@symcbean: lo que dices es correcto. No lo llamaría pedante.
DarkHeart
2
Una notable excepción no obvia a esto es si /etc/resolv.confapunta a un servidor DNS que se ejecuta directamente en su dispositivo (como un almacenamiento en caché dnsmasq) y dicho servidor está consultando a su local /etc/hostsantes de consultar servidores externos. Luego, indirectamente, los comandos como hostse verán afectados por usted /etc/hosts: esta es una configuración poco común, pero con la que he visto que se envían dispositivos, y la experiencia de alguien que usa dicho sistema puede parecer conflictiva con esta respuesta si alguien desconoce esta configuración peculiar .
mtraceur
9

Además de la respuesta de DopeGhoti, para probar su resolución, incluida la /etc/hostsprecedencia, puede usar el getent hosts <some_hostname>comando.

HBruijn
fuente
-3

Tengo problemas similares con un / etc / hosts que contiene múltiples espacios entre IP y nombre de host, en lugar de usar una TAB. Después de cambiar a TAB, el nombre de host podría resolverse haciendo ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

ver también en /superuser//a/938366/467479

Thomas Lauria
fuente
55
Esto me sorprende La página de manual hostsdice: ¿ Fields of the entry are separated by any number of blanks and/or tab characters. Quizás en su caso haya algún carácter extraño no imprimible entre la IP y el nombre de host?
dr01
Definitivamente no había caracteres no imprimibles. Lo comprobé antes de publicar esto aquí;)
Thomas Lauria
No tengo caracteres de tabulación, ejecuto SLES 11.x, y después de una instalación limpia desde dvd, mi archivo / etc / hosts ha 127.0.0.1seguido de 7 espacios seguidos de localhost. Por lo tanto, dudaría un poco en fijar el problema específicamente en varios caracteres de espacio y concluiría usando el carácter de tabulación como la solución.
ron
olvidé mencionar que la pestaña versus el espacio también puede ocurrir dentro de una versión o distribución específica de Linux, ¿cuál puede ser un error? y si este fuera el caso, debería poder hacer varias entradas de dirección IP / nombre de host con una pestaña o un espacio, luego haga un ping en ellas para ver si se resuelve ... simplemente no lo haga conlocalhost
ron
desafortunadamente no recuerdo en qué máquina (y, por lo tanto, distro) experimenté el problema ... - Creo que fue en Ubuntu 15.05 de virtualboximages.com/… Voy a evaluar eso.
Thomas Lauria