Mapeamento de nome de host e endereço IP em / etc / hosts

14

Na minha máquina Linux, quando eu corro hostname, ele mostra mongodb, mas quando eu corro host mongodb, ele mostra:

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

Meu /etc/hostsarquivo:

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
  • Minha primeira pergunta é: Como /etc/hostsestá mapeando do IP para o nome do host, por que esta máquina não pode resolver o nome do host mongodbpara o IP 192.168.10.10? Em vez disso, quando executo host localhost, ele pode ser resolvido e mostra:

    localhost has address 127.0.0.1
    
  • Minha outra pergunta: de acordo com o /etc/hostsarquivo, o nome do host localhostdeveria ter sido resolvido para 192.168.10.10 em vez do endereço IP de loopback 127.0.0.1. Alguém pode me explicar isso?

wuchang
fonte

Respostas:

30

Os utilitários host(e nslookup) consultam explicitamente os servidores DNS e não consultam o /etc/hostsarquivo em uma configuração padrão do sistema. Se você fosse tracerouteou pingesse endereço, você iria vê-lo corretamente resolver.

Você não deseja alterar o localhostmapa para algo diferente de 127.0.0.1, isso pode ter efeitos estranhos e sutis em muitas coisas. Eu acho que /etc/hostsé analisado na ordem em que está escrito e desde que você tenha:

192.168.10.10   localhost
127.0.0.1       localhost

..a segunda entrada pode estar substituindo a primeira.

DopeGhoti
fonte
5
/etc/hostsnão tem qualquer efeito sobre a resolução de DNS ao consultar servidores DNS diretamente, que é o que hostfaz. No entanto, muitas ferramentas e utilitários do sistema usam a localhostdefinição, esperando que seja um endereço de loopback, e usam a resolução de nomes do sistema (que é /etc/hostsexaminada antes de consultar o DNS) para resolver nomes em vez de ir estritamente para o DNS, que nem sempre está presente.
DopeGhoti
1
Também posso compartilhar experiências com problemas no /etc/hostsarquivo localhost. No passado, tínhamos usado algum software que inseria um 127.0.0.2 localhostno arquivo hosts e, sendo essa a última localhostentrada que causava esse efeito, causava todos os tipos de problemas de software e licença. Portanto, minha recomendação é ter 127.0.0.1 localhostcomo a primeira entrada no seu /etc/hostsarquivo e garantir que não haja outra localhostentrada nesse arquivo. E eu também verificaria qualquer material IPv6.
ron
5
Para ser um pouco pedante, ambos fazem uma pesquisa ns que pode ser uma pesquisa de DNS, se foi assim que você configurou a pesquisa de host no nsswitch.conf.
symcbean
1
@symcbean - o que você diz está correto. Eu não chamaria isso de pedante.
precisa saber é o seguinte
2
Uma exceção notável e não óbvia a isso é se você /etc/resolv.confaponta para um servidor DNS em execução diretamente no seu dispositivo (como um cache dnsmasq) e esse servidor está consultando seu local /etc/hostsantes de consultar servidores externos. Então, indiretamente, comandos como hostserão efetuados pelo seu /etc/hosts- essa é uma configuração incomum, mas eu vi dispositivos enviados com, e a experiência de alguém usando esse sistema pode parecer conflitante com essa resposta se alguém não souber dessa configuração peculiar .
Mtraceur
9

Além da resposta de DopeGhoti, para testar sua resolução, incluindo a /etc/hostsprecedência, você pode usar o getent hosts <some_hostname>comando

HBruijn
fonte
-3

Eu tenho problemas semelhantes com um / etc / hosts contendo vários espaços entre IP e nome do host, em vez disso, usando uma TAB. Depois de mudar para TAB, o nome do host pode ser resolvido por ping.

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

veja também em /superuser//a/938366/467479

Thomas Lauria
fonte
5
Isso me surpreende. A página de manual hostsdiz: Fields of the entry are separated by any number of blanks and/or tab characters. Talvez no seu caso houvesse algum caractere não imprimível estranho entre o IP e o nome do host?
dr01
Definitivamente, não havia caracteres não imprimíveis. Verifiquei isso antes de publicá-lo aqui;)
Thomas Lauria
Não tenho caracteres de tabulação, executo o SLES 11.xe após a instalação limpa do dvd, meu arquivo / etc / hosts 127.0.0.1seguiu por 7 espaços seguidos por localhost. Então, eu ficaria um pouco hesitante em fixar o problema especificamente em vários caracteres de espaço e concluir o uso do caractere de tabulação como solução.
ron
esqueci de mencionar a aba versus espaço também pode acontecer dentro de uma versão ou distribuição específica do linux, o que pode ser um bug? e, se esse for o caso, você poderá criar várias entradas de endereço IP / nome do host com uma guia ou um espaço, faça um ping nelas para ver se isso é resolvido ... apenas não faça isso comlocalhost
ron
infelizmente não me lembro em qual máquina (e, portanto, na distribuição), experimentei o problema ... - Acho que foi no Ubuntu 15.05, do virtualboximages.com/… , vou avaliar isso.
Thomas Lauria