LinuxでIPv6用RFC4821パスMTUを検索する

LinuxでIPv6用RFC4821パスMTUを検索する

Hurricane Electricを介してLinuxコンピュータにIPv6-over-IPv4トンネルを設定しました。 ipv6.google.comをpingすることはできますが:

bash-4.4# ping ipv6.google.com
PING ipv6.google.com(lhr48s09-in-x0e.1e100.net (2a00:1450:4009:819::200e)) 56 data bytes
64 bytes from lhr48s09-in-x0e.1e100.net (2a00:1450:4009:819::200e): icmp_seq=1 ttl=57 time=10.9 ms
64 bytes from lhr48s09-in-x0e.1e100.net (2a00:1450:4009:819::200e): icmp_seq=2 ttl=57 time=10.7 ms

IPv6を介したHTTPS要求がタイムアウトしたようです。

bash-4.4# curl --happy-eyeballs-timeout-ms 60000 'https://mirrors.fedoraproject.org/metalink?repo=fedora-modular-29&arch=x86_64'
curl: (28) Operation timed out after 300258 milliseconds with 0 out of 0 bytes received

これはMTU問題の典型的な兆候であるため、MTU問題を疑い、十分に確実でした。

[user@nuc ~]$ tracepath6 mirrors.fedoraproject.org
 1?: [LOCALHOST]                        0.004ms pmtu 1480
 1:  xxxxxxxxxxxx-pt.tunnel.tserv1.lon2.ipv6.he.net        0.057ms pmtu 1472
 1:  xxxxxxxxxxxx.tunnel.tserv1.lon2.ipv6.he.net          22.524ms 
 2:  10ge3-20.core1.lon2.he.net                           20.266ms 
 3:  100ge7-1.core1.fra1.he.net                           32.051ms 
 4:  bb01.muc01.net.internetx.com                         47.579ms asymm  6 
 5:  no reply
 6:  no reply
 7:  no reply
 8:  no reply
 9:  no reply
10:  no reply
11:  no reply
12:  no reply
13:  no reply
14:  no reply
15:  no reply
16:  no reply
17:  no reply
18:  no reply
19:  no reply
20:  no reply
21:  no reply
22:  no reply
23:  no reply
24:  no reply
25:  no reply
26:  no reply
27:  no reply
28:  no reply
29:  no reply
30:  no reply
     Too many hops: pmtu 1472
     Resume: pmtu 1472 

私の接続のMTUが高すぎる(1472ではなく1480)。 (予想より低いMTUは、私のPCとメインルーターの間にWiFi接続があるという事実に関連している可能性があります。)

しかし、このTracepath6コマンドはフルパスを見ることができないので、理論的にはまだ低いpmtuパスがあるかもしれません。 RFC4821は、ICMPブラックホールがある場合でもパスMTU検索を実行する方法を説明していることがわかりました。ここでは、この現象が発生しているようです。しかし、LinuxではまだIPv6用RFC4821のソフトウェア実装が見つかりませんでした。 IPv4の場合、sysctlでこれを設定できます。net.ipv4.tcp_mtu_probingこれ1により、カーネルはナビゲーションを通じてMTUの問題を透過的に解決します。しかし、Linuxまたはユーザーゾーンソフトウェアの同様のIPv6設定が見つかりませんでした。

それでは、LinuxでIPv6のRFC4821スタイルパスMTU検出を実行する方法は?

答え1

あなたは試すことができます:

$ sudo ping -6 -s <size> -M do <destination>

<size>定義された区間が目的地に到達できることを確認します。

たとえば、

$ sudo ping -6 -s 1452 -M do destination.com

IPv6ヘッダーはデフォルトで40バイト以上であり(オプションがある場合)、ICMPヘッダーは8バイトであることを覚えておいてください。

コマンドの1452は、1452 + 40 + 8 = 1500バイトを意味します。

関連情報