Debian Wheezyを実行している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
ブロックを解除したのは2番目の応答のみであったことが明らかになりました。返信は同じように見えます:
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
内部が見えるように、2行追加しましたaddrinfo
。