Eu tenho o seguinte /etc/hosts
arquivo em uma 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
No entanto, o comando host não resolve o nome puppetmaster
corretamente, enquanto o comando telnet é
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 host não resolve entradas no / etc / hosts?
fonte
/etc/nsswitch.conf
ficou assimhosts: files dns
e eu a mudei para,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
no entanto, em ambos os casos,/etc/hosts
não é consultada, mas parece que são feitas consultas diretas ao DNS. Como garantir que a/etc/hosts
consulta seja feita primeiro ao usar um comando comodig
ouhost
?getent hosts
ou outra coisa que usosgethostbyname()
getent ahosts
em vez degetent hosts
porquegetent hosts
usosgethostbyaddr()
ougethostbyname*()
que estão obsoletos. Se eu entendi corretamente,getent hosts
emula a idade dos programas UNIX C usados egetent ahosts
emula a maneira como os programas moderm devem funcionar.Porque o
host
utilitário é exclusivamente um utilitário de pesquisa de DNS.A maioria dos aplicativos usa as chamadas da biblioteca
getaddrinfo
ougethostbyname
. Essas bibliotecas interrogam um arquivo chamado/etc/nsswitch.conf
para determinar a prioridade de pesquisa e a política de como executar pesquisas diferentes.Normalmente
/etc/nsswitch.conf
contém a linhaO que instrui um programa a interrogar primeiro
/etc/hosts
e depois interrogar o DNS se malsucedido.Como os hosts fazem pesquisas exclusivamente de DNS, elas não
/etc/hosts
fazem a pesquisa.fonte
Você encontrará isso
dig
enslookup
se comportará da mesma maneira quehost
.A razão para isso é que o objetivo de todos esses comandos é fazer pesquisas de DNS, não em arquivos.
A maioria dos outros programas usa o resolvedor de nomes do sistema operacional, que é consultado
/etc/nsswitch.conf
e depois (se necessário)/etc/resolv.conf
para decidir como resolver o nome do host que você está solicitando. (Isso é uma simplificação, existem outras opções.) Onsswitch.conf
arquivo geralmente coloca precedência nos arquivos locais, e não no DNS.fonte
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
se o seu não estiver presente ou em ordem diferente, esse pode ser o seu problema.
fonte
hosts: files dns