Ho una VM che esegue Debian Wheezy su cui alcune ricerche di nomi host impiegano diversi secondi per completare, anche se il risolutore risponde immediatamente. Stranamente, le ricerche con getaddrinfo()
sono interessate, ma gethostbyname()
non lo è.
Sono passato ai resolver di Google per escludere la possibilità che quelli locali siano rotti, quindi il mio /etc/resolv.conf
aspetto è:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Il mio nsswitch.conf
ha la linea:
hosts: files dns
e il mio /etc/hosts
non contiene nulla di insolito.
Se provo telnet webserver 80
, si blocca per alcuni secondi prima di ottenere una risoluzione del nome. Un ltrace
output [1] mostra che l'hang è in una getaddrinfo()
chiamata:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Tuttavia, tcpdump
rivela che il nameserver ha risposto immediatamente, ed è stato solo sulla seconda risposta che è stata telnet
sbloccata. Le risposte sembrano identiche:
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)
Ho controllato i log del firewall host e nulla sulla porta 53 è stato bloccato.
Cosa causa l'ignoramento della prima risposta DNS?
[1] Ho aggiunto un paio di righe al mio in ltrace.conf
modo da poter vedere all'interno della addrinfo
struttura.