Wireguard インターフェースで「非常に高い」(おそらく?) MTU が自動的に設定される

Wireguard インターフェースで「非常に高い」(おそらく?) MTU が自動的に設定される

そこで、Amazon Lightsail で VPS を実行し、そこに Wireguard をインストールしました。次のようにインターフェイスを設定しました。

[Interface]
Address = 10.255.128.1/24
MTU = 1420
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = ********************************************

それからとても奇妙なことが起こりました。ifaceを起動して実行するsudo ip addrと、この出力が得られます。

3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8921 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.255.128.1/24 scope global wg0
       valid_lft forever preferred_lft forever

奇妙なこと?mtu 8921

次に conf ファイルに移動すると、驚いたことに、mtu に設定した値が 8921 で上書きされています。

sudo systemctl status [email protected]次のような出力が得られます。

Nov 18 16:04:08 ip-172-26-0-77 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Nov 18 16:04:08 ip-172-26-0-77 wg-quick[583]: [#] ip link add wg0 type wireguard
Nov 18 16:04:09 ip-172-26-0-77 wg-quick[583]: [#] wg setconf wg0 /dev/fd/63
Nov 18 16:04:09 ip-172-26-0-77 wg-quick[583]: [#] ip -4 address add 10.255.128.1/24 dev wg0
Nov 18 16:04:09 ip-172-26-0-77 wg-quick[583]: [#] ip link set mtu 8921 up dev wg0
Nov 18 16:04:09 ip-172-26-0-77 wg-quick[583]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING >
Nov 18 16:04:09 ip-172-26-0-77 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

何が起きてる?

答え1

SaveConfig = true指示するwgクイックインターフェイスがシャットダウン (または再起動) されたときに、WireGuard インターフェイスの設定ファイルをインターフェイスの現在の設定で上書きします。これは、WireGuard の多くの用途では望ましくない動作であるため、デフォルトではオンになっていません。これをオンにする最も一般的な理由は、アクティブな WireGuard インターフェイスが起動しているときに頻繁に変更を加え、それらの変更を手動で設定ファイルに複製したくない場合です。

を使用しSaveConfig = true、WireGuardインターフェースに変更を加えたい場合、通常はwgコマンド(WireGuard固有の設定の場合)、または(Linuxの場合)ipコマンド(一般的なネットワーク インターフェイス設定用)。

たとえば、 という名前のアクティブな WireGuard インターフェイスの MTU を設定するにはwg01420次のコマンドを (root として) 実行します。

ip link set wg0 mtu 1420

または、 コマンドを使用して WireGuard インターフェースをシャットダウンしwg-quick down wg0( systemctl stop wg-quick@wg0systemd サービスとして実行している場合は )、WireGuard 構成ファイルに変更を加えてから、 コマンドを使用してインターフェースを再度起動しますwg-quick up wg0(またはsystemctl start wg-quick@wg0)。


WireGuardインターフェースのMTUを明示的に設定しない場合、wg-quickはトンネルが使用すると予想される(物理)ネットワークインターフェースのMTUに基づいて、適切な推測を行うのに十分なほど賢いです。ほとんどのEC2インスタンスのネットワークインターフェースは、ジャンボフレーム(MTU は 9001)。したがって、これらの EC2 インスタンスでは、wg-quick は WireGuard インターフェイスが 8921 の MTU (9001 より 80 バイト小さい、各パケットを UDP/IP および WireGuard ヘッダーでラップできるようにする) を使用する必要があると推測します。

おそらく、WireGuard インターフェースは元々 で設定されていたもののSaveConfig = true、MTU が設定されていなかったのでしょう。wg-quick でインターフェースを起動すると、インターフェースの MTU が 8921 に設定されました。その後、インターフェースが起動している間に、WireGuard 設定ファイルを編集して を追加しましたMTU = 1420。インターフェースを再起動すると、インターフェースの既存の MTU によって変更が上書きされました。

関連情報