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バイトを意味します。