Eu tenho uma VM executando o Debian Wheezy na qual algumas pesquisas de nome de host levam alguns segundos para serem concluídas, mesmo que o resolvedor responda imediatamente. Estranhamente, pesquisas com getaddrinfo()
são afetadas, mas gethostbyname()
não são.
Eu mudei para os resolvedores do Google para excluir a possibilidade de que os locais sejam quebrados, então minha /etc/resolv.conf
aparência é:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Meu nsswitch.conf
tem a linha:
hosts: files dns
e o meu /etc/hosts
não contém nada incomum.
Se eu tentar telnet webserver 80
, ele trava por alguns segundos antes de obter uma resolução de nome. Uma ltrace
saída [1] mostra que o travamento está em uma getaddrinfo()
chamada:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
No entanto, tcpdump
revela que o servidor de nomes respondeu imediatamente, e foi apenas na segunda resposta que o telnet
desbloqueou. As respostas parecem idênticas:
05:52:58.609731 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:52:58.609786 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:52:58.612188 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)
[...five second pause...]
05:53:03.613811 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:53:03.616424 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)
05:53:03.616547 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:53:03.618907 IP 8.8.4.4.53 > 192.168.1.75.43017: 26090 0/1/0 (76)
Verifiquei os logs do firewall do host e nada na porta 53 está sendo bloqueado.
O que está fazendo com que a primeira resposta DNS seja ignorada?
[1] Adicionei algumas linhas ao meu ltrace.conf
para que eu possa ver dentro da addrinfo
estrutura.