Tengo una máquina virtual que ejecuta Debian Wheezy en la que algunas búsquedas de nombres de host tardan varios segundos en completarse, aunque el solucionador responde de inmediato. Curiosamente, las búsquedas con getaddrinfo()se ven afectadas, pero gethostbyname()no lo es.
He cambiado a los solucionadores de Google para excluir la posibilidad de que los locales estén rotos, por lo que mi /etc/resolv.confaspecto es el siguiente:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Mi nsswitch.conftiene la línea:
hosts: files dns
y mi /etc/hostsno contiene nada inusual.
Si lo intento telnet webserver 80, se cuelga durante varios segundos antes de obtener una resolución de nombre. Una ltracesalida [1] muestra que el bloqueo está en una getaddrinfo()llamada:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Sin embargo, tcpdumprevela que el servidor de nombres respondió de inmediato, y solo en la segunda respuesta se telnetdesbloqueó. Las respuestas parecen 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)
Revisé los registros del firewall del host y no se bloquea nada en el puerto 53.
¿Qué está causando que se ignore la primera respuesta DNS?
[1] Agregué un par de líneas para ltrace.confpoder ver dentro de la addrinfoestructura.