Ich habe eine VM mit Debian Wheezy, auf der einige Hostnamensuchen einige Sekunden dauern, obwohl der Resolver sofort antwortet. Seltsamerweise sind Lookups mit getaddrinfo()betroffen, aber gethostbyname()nicht.
Ich habe zu den Google-Resolvern gewechselt, um die Möglichkeit auszuschließen, dass die lokalen defekt sind. Mein /etc/resolv.confAussehen sieht also so aus:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Mein nsswitch.confhat die Linie:
hosts: files dns
und meine /etc/hostsenthält nichts ungewöhnliches.
Wenn ich es versuche telnet webserver 80, bleibt es einige Sekunden lang hängen, bevor eine Namensauflösung angezeigt wird. Eine ltraceAusgabe [1] zeigt an, dass sich der Hang in einem getaddrinfo()Anruf befindet:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Es zeigt sich jedoch, tcpdumpdass der Nameserver sofort geantwortet hat und erst bei der zweiten Antwort die telnetBlockierung aufgehoben hat. Die Antworten sehen identisch aus:
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)
Ich habe die Host-Firewall-Protokolle überprüft und nichts an Port 53 wird blockiert.
Was bewirkt, dass die erste DNS-Antwort ignoriert wird?
[1] Ich habe ein paar Zeilen zu meiner hinzugefügt, ltrace.confdamit ich in die addrinfoStruktur sehen kann.