WindowsPCと特定のネットワークにおいて、Wireguard経由の通信の疎通性が悪化する問題の解決
前書き
某公衆Wi-Fiにて。Windows 11 を実行しているノートパソコンでWireguardを接続したところ、いくつかのホストにおいてWebサイトが表示できなくなった。IPv6専用ホストをいくつか持てる私は、VPNがないと接続できないので、非常に困った。
今回は、これをMTUの調整にて解決できたので、記事にしときます。
環境
- OpenWRTで実行しているWireguard (正確ではないが、いわゆるサーバー側)
- IPv4シングルスタック公衆Wi-Fi
- OpenWRT内はIPv6シングルスタック(DNS64+NAT64)
- Windows 11 上で実行しているWireguard (正確ではないが、いわゆるクライアント側)
手順
公衆Wi-FiのMTU測定
pingコマンドを使う方法もあるが、面倒なので下記で調べることができる。
Firefoxで測定できた。
https://www.speedguide.net/analyzer.php
測定が完了すると、「MTU = 1460」などと表示される。この1460がMTUの測定結果となります。
Wireguard内部で使えるMTUの計算
Wireguardで必要となる追加のヘッダー長は、次の通り。
Internet protocol | Byte length |
---|---|
IPv6 | 80 |
IPv4 | 60 |
[WireGuard] Header / MTU sizes for Wireguard
Windows 11 の場合、IPv6とIPv4それぞれMTUを設定できるので、パフォーマンスを最大化したい場合は、異なる値に設定することが可能。
公衆Wi-FiのMTUが1460の場合、Wireguardの内側は、IPv6の場合「1380」、IPv4の場合「1400」となる。
今回、Wireguardの内部はIPv6シングルスタックなので、IPv6のみ設定する。
MTUの設定
Windows 11 で、PowerShellやコマンドプロンプトを管理者権限で起動します。
Wireguardのネットワークインターフェースインデックスを調べます。
netsh interface ipv6 show interface
名前の欄に「wg0」とあるインターフェースの「Idx」を知ることができます。
Idx Met MTU 状態 名前
--- ---------- ---------- ------------ ---------------------------
1 75 4294967295 connected Loopback Pseudo-Interface 1
30 0 1420 connected wg0
20 45 1500 connected Wi-Fi
10 5 1500 disconnected イーサネット
6 65 1500 disconnected Bluetooth ネットワーク接続
調べたidxと計算したMTUを含めて、下記のようにコマンドを作成して実行します。
netsh interface ipv6 set interface 30 mtu=1380
IPv4を設定される場合は、コマンド中の「ipv6」を「ipv4」に変更して実行します。
コメントを残す