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.conf
aspecto es el siguiente:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Mi nsswitch.conf
tiene la línea:
hosts: files dns
y mi /etc/hosts
no contiene nada inusual.
Si lo intento telnet webserver 80
, se cuelga durante varios segundos antes de obtener una resolución de nombre. Una ltrace
salida [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, tcpdump
revela que el servidor de nombres respondió de inmediato, y solo en la segunda respuesta se telnet
desbloqueó. 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.conf
poder ver dentro de la addrinfo
estructura.