Hurricane Electric을 통해 Linux 컴퓨터에 IPv6-over-IPv4 터널을 구성했습니다. ipv6.google.com을 핑할 수는 있지만:
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바이트를 의미합니다.