因此,我有一个在 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 wg0
,1420
请运行以下命令(以 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 覆盖。