我有一台运行Debian Wheezy的VM,尽管解析程序会立即回复,但在该VM上完成一些主机名查找需要几秒钟。奇怪的是,与getaddrinfo()
的查询会受到影响,但gethostbyname()
没有受到影响。
我已改用Google解析器,以排除本地解析器损坏的可能性,因此我的/etc/resolv.conf
样子如下:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
我nsswitch.conf
的行:
hosts: files dns
而且我/etc/hosts
没有任何异常。
如果尝试telnet webserver 80
,它会挂几秒钟,然后再进行名称解析。的ltrace
输出[1]示出了悬挂在一个getaddrinfo()
呼叫:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
但是,tcpdump
显示名称服务器立即回复,并且仅在第二个回复上才被telnet
阻止。答复看起来相同:
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)
我检查了主机防火墙日志,端口53上的任何内容均未被阻止。
是什么导致第一个DNS答复被忽略?
[1]我已在其中添加了几行,ltrace.conf
以便可以看到addrinfo
结构内部。