Por que o comando do host não resolve as entradas em / etc / hosts?

20

Eu tenho o seguinte arquivo /etc/hosts em uma máquina 12.04 do Ubuntu

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

No entanto, o comando do host não resolve o nome puppetmaster corretamente, enquanto o comando telnet faz

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 que o comando do host não resolve as entradas em / etc / hosts?

    
por user784637 11.04.2013 / 20:13

4 respostas

45

O programa host usa libresolv para realizar uma consulta DNS diretamente, ou seja, não usa gethostbyname .

A maioria dos programas, ao tentar se conectar a outro host, invoca a chamada do sistema gethostbyname ou uma função semelhante. Essa função obedece à configuração de /etc/nsswitch.conf . Este arquivo tem uma linha que no Ubuntu 12.04 tem como padrão o seguinte:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

, o que significa que primeiro usará /etc/hosts e, em seguida, voltará às consultas do DNS.

Se você quiser realizar uma pesquisa de host dessa maneira, poderá fazer isso com getent hosts . Por exemplo:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

Espero que isso ajude.

    
por 11.04.2013 / 20:25
9

Como o utilitário host é exclusivamente um utilitário de pesquisa de DNS.

A maioria dos aplicativos usa as chamadas da biblioteca getaddrinfo ou gethostbyname . Essas bibliotecas interrogam um arquivo chamado /etc/nsswitch.conf para determinar a prioridade de pesquisa e a política de como realizar pesquisas diferentes.

Normalmente, /etc/nsswitch.conf contém a linha

hosts:        files dns

Que diz ao programa para primeiro interrogar /etc/hosts e depois interrogar o DNS se não tiver sucesso.

Como os hosts fazem exclusivamente pesquisas de DNS, eles não espiam o /etc/hosts para fazer a pesquisa.

    
por 11.04.2013 / 20:27
3

Você verá que dig e nslookup se comportam da mesma maneira que host .

A razão para isso é que o objetivo de todos esses comandos é fazer pesquisas de DNS, e não procurar em arquivos.

A maioria dos outros programas usa o resolvedor de nomes do sistema operacional que consulta /etc/nsswitch.conf e, em seguida, (se necessário) /etc/resolv.conf para decidir como resolver o nome do host que você está solicitando. (Isso é uma simplificação, há outras opções.) O arquivo nsswitch.conf geralmente coloca precedência sobre os arquivos locais em vez do DNS.

    
por 11.04.2013 / 20:32
-1

verifique o arquivo /etc/nsswitch.conf e procure a linha que começa com a palavra "hosts"? Você vê a palavra "arquivos" nesta linha? Se sim, é antes ou depois da palavra "dns"?

Em um sistema normal, essa linha deve ser algo como

hosts      files dns

se a sua não estiver presente ou em ordem diferente, isso pode ser um problema seu.

    
por 11.04.2013 / 20:26