Por que as pesquisas de DNS não respeitam /etc/nsswitch.conf e /etc/host.conf?

5

Eu tenho um problema em que os nomes de host estão sendo pesquisados no DNS, mesmo que estejam presentes em / etc / hosts.

Eu tenho o seguinte configurado:

/etc/host.conf:

order hosts,bind

/etc/nsswitch.conf:

hosts:      files dns

/etc/resolv.conf:

nameserver <nameserver one>
nameserver <nameserver two>

O aplicativo em execução no host faz algumas solicitações de API internas e externas.

No tcpdump, estou vendo consultas DNS em alguns dos nomes de host do serviço interno que estão listados em / etc / hosts. O comando tcpdump que estou usando é:

tcpdump -tqAlU -s0 port 53 and host <nameserver one>

No despejo, estou vendo solicitações como as seguintes:

IP 10.0.80.11.domain > app004-private.51308: UDP, length 102
E...I2..>...
.P.
.........I.1E...:...Q.. localhost............   [email protected]..
IP app004-private.33828 > 10.0.80.11.domain: UDP, length 39
E..Ca.@[email protected].
.2.
.P..$.5./..3e.......... localhost.site.com.....
IP 10.0.80.11.domain > app004-private.33828: UDP, length 96
E..|....>.T;
.P.
.2..5.$.hU.3e.......... localhost.site.com................-.ns10.dnshost.com...dns.8w.............u.....

Observe que o host local está sendo enviado para o DNS, bem como para o localhost.site.com. A entrada / etc / hosts para o host local é:

127.0.0.1 localhost.localdomain localhost

e

IP 10.0.80.11.domain > app004-private.51664: UDP, length 93
E..yx...>.m.
.P.
.2..5...e.<N2...........api.site.com................-.ns10.dnshost...dns.5w.............u.....
IP app004-private.51664 > 10.0.80.11.domain: UDP, length 48
E..L'.@[email protected].
.2.
.P....5.8..n............api.site.com.site.com.....
IP 10.0.80.11.domain > app004-private.48878: UDP, length 76
E..h&e..>..w
.P.
.2..5...TQ..............11.80.0.10.in-addr.arpa.............Q............p.... .        :...Q.
IP 10.0.80.11.domain > app004-private.51664: UDP, length 105
E...VX..>..g
.P.
.2..5...qJ.n............api.site.com.site.com................-.ns10.dnshost.'.dns.Aw.............u.....

Onde api.site.com está em / etc / hosts. Executando getent para consultar api.site.com retorna:

$ getent hosts api.site.com
10.36.176.114   api001-private api001-private.site.com api001 api.site.com api

Estou perplexo. Tudo parece estar configurado corretamente (tanto quanto eu saiba) para usar o / etc / hosts primeiro então DNS. Alguma idéia de por que /etc/nsswitch.conf e /etc/host.conf não estão sendo respeitados?

A aplicação principal em execução no sistema é http (apache 2.2.15 e PHP 5.3.8 com curl 7.30.0). O SO é o Centos 5.6 rodando com o kernel 2.6.18-238.9.1.el5 e o glibc 2.5-58.el5_6.3.

Obrigado antecipadamente!

    
por drsnyder 20.06.2013 / 01:40

3 respostas

4

Conseguimos resolver isso desativando o ipv6. Nós desativamos o ipv6 adicionando o seguinte ao /etc/modprobe.conf e reiniciando.

alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1

Após a reinicialização, não vemos mais pesquisas de DNS para hosts listados em / etc / hosts.

Não está claro para mim exatamente por que isso resolve o problema.

    
por 20.06.2013 / 19:41
2

Existem muitos aplicativos que não usam o OS-api para consultar nomes. Em vez disso, eles fazem uma consulta explícita de DNS.

Se isso acontecer, eles não passarão pela biblioteca de resolução.

No Linux, você pode fazer o mesmo na linha de comando:

  • host YOURHOST tentará resolver o DNS - não importa o que aconteça.
  • gethostip YOURHOST usará as configurações definidas do resolvedor na ordem configurada.
por 20.06.2013 / 14:03
0

Parece que seu aplicativo usa a biblioteca de curl, que tem suas próprias complexidades de facilidade de resolução de nome, consulte, por exemplo:

link

    
por 01.11.2016 / 16:32