ping6がIPv4ソケットを使用するのはなぜですか?

ping6がIPv4ソケットを使用するのはなぜですか?

CentOS 7サーバーでIPv6を有効にしましたが、ping6を除くすべてが期待どおりに機能します。リクエスト間に3〜5の遅延が表示されます(ただしRTTは問題ありません)。

$ ping6 www.google.com
<...5 sec...>
PING www.google.com(2607:f8b0:4002:c09::69) 56 data bytes
<...5 sec...>
64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=1 ttl=55 time=21.1 ms
<...5 sec...>
64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=2 ttl=55 time=21.2 ms
<...5 sec...>
64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=3 ttl=55 time=21.1 ms
<...5 sec...>
64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=4 ttl=55 time=21.1 ms
<...5 sec...>
64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=5 ttl=55 time=21.2 ms
<...5 sec...>
^C64 bytes from 2607:f8b0:4002:c09::69: icmp_seq=6 ttl=55 time=21.1 ms

--- www.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 25216ms
rtt min/avg/max/mdev = 21.119/21.183/21.251/0.043 ms

その後、strace()を介して実行すると、strace ping6 www.google.comIPv4アドレスへのping試行が初めてタイムアウトし、その後IPv6ソケットを開いて成功することがわかります。

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("209.244.0.3")}, 16) = 0
gettimeofday({1415215545, 657352}, NULL) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "\2721\1\0\0\1\0\0\0\0\0\0\3www\6google\3com\0\0\34\0\1", 32, MSG_NOSIGNAL, NULL, 0) = 32
poll([{fd=4, events=POLLIN}], 1, 5000)  = 0 (Timeout)
socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 5
connect(5, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8844", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
gettimeofday({1415215550, 663174}, NULL) = 0
poll([{fd=5, events=POLLOUT}], 1, 0)    = 1 ([{fd=5, revents=POLLOUT}])
sendto(5, "\2721\1\0\0\1\0\0\0\0\0\0\3www\6google\3com\0\0\34\0\1", 32, MSG_NOSIGNAL, NULL, 0) = 32
poll([{fd=5, events=POLLIN}], 1, 3000)  = 1 ([{fd=5, revents=POLLIN}])
ioctl(5, FIONREAD, [60])                = 0
recvfrom(5, "\2721\201\200\0\1\0\1\0\0\0\0\3www\6google\3com\0\0\34\0\1"..., 1024, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8844", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 60

ping6はAAAAレコードを探し、特にIPv6アドレスを開く必要はありませんか?なぜこれが起こるのですか?

答え1

出力strace結果は、ping6がwww.google.comのIPアドレスを見つけるためにDNS要求を試みていることを示しています。

最初のDNS要求は209.244.0.3、resolver1.level3.netに転送されます。このDNS要求は5秒後にタイムアウトし、その時点で2番目のDNSサーバー2001:4860:4860::8844に置き換えられます。サーバーはほぼ直ちに DNS 応答を返します。

あなたのサービスプロバイダがあなたのコンピュータを設定したときにそれをシステム設定に入れたかもしれませんが、それがあなたのシステム設定にどのように適用されるかはわかりません。お客様がネットワークに接続していない場合、DNS サーバーがお客様にサービスを提供できない場合があります。

システムのDNSサーバーがに一覧表示されます/etc/resolv.conf。使用しているDNSサーバーが正しく機能していることをサービスプロバイダに確認したら、そこで編集して変更できます。

関連情報