在 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-quick在关闭(或重新启动)接口时,用接口的当前设置覆盖 WireGuard 接口的配置文件。对于 WireGuard 的许多用途来说,这是不受欢迎的行为,这就是为什么默认情况下不启用它的原因。您想要打开它的最常见原因是,如果您在 WireGuard 处于活动状态时经常对其进行更改,并且不想在配置文件中手动重复这些更改。

如果你确实使用了SaveConfig = true,并且想要更改 WireGuard 接口,你通常可以通过以下方式进行更改:工作组命令(用于 WireGuard 特定的设置),或者(在 Linux 上)知识产权命令(用于常规网络接口设置)。

例如,要设置名为 的活动 WireGuard 接口的 MTU wg01420请运行以下命令(以 root 身份):

ip link set wg0 mtu 1420

或者,使用命令关闭 WireGuard 接口wg-quick down wg0(或者systemctl stop wg-quick@wg0如果您将其作为 systemd 服务运行),更改 WireGuard 配置文件,然后使用命令wg-quick up wg0(或systemctl start wg-quick@wg0)重新启动接口。


如果您没有为 WireGuard 接口明确配置 MTU,wg-quick 会根据隧道预期使用的(物理)网络接口的 MTU 为您做出很好的猜测。大多数 EC2 实例的网络接口使用巨型帧(MTU 为 9001)。因此,在这些 EC2 实例上,wg-quick 会猜测 WireGuard 接口应该使用 MTU 8921(比 9001 小 80 字节,以允许每个数据包都用 UDP/IP 和 WireGuard 标头包装)。

因此可能发生的情况是,您最初使用 来配置 WireGuard 接口SaveConfig = true,但没有 MTU。当您使用 wg-quick 启动接口时,它会为接口设置 8921 的 MTU。然后,在接口启动时,您编辑了 WireGuard 配置文件以添加MTU = 1420。当您重新启动接口时,您的更改将被接口的现有 MTU 覆盖。

相关内容