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.confaspetto è:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Il mio nsswitch.confha la linea:
hosts: files dns
e il mio /etc/hostsnon contiene nulla di insolito.
Se provo telnet webserver 80, si blocca per alcuni secondi prima di ottenere una risoluzione del nome. Un ltraceoutput [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, tcpdumprivela che il nameserver ha risposto immediatamente, ed è stato solo sulla seconda risposta che è stata telnetsbloccata. 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.confmodo da poter vedere all'interno della addrinfostruttura.