因此,我有一個在 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 UP 並運行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
指揮快速工作小組當介面關閉(或重新啟動)時,使用介面的目前設定覆蓋 WireGuard 介面的設定檔。對於 WireGuard 的許多用途來說,這是不受歡迎的行為,這就是它預設不會開啟的原因。您想要開啟它的最常見原因是,如果您在活動的 WireGuard 介面啟動時對其進行頻繁更改,並且不希望在設定檔中手動複製這些變更。
如果您確實使用SaveConfig = true
,並且想要更改 WireGuard 介面,通常可以透過工作小組命令(對於 WireGuard 特定設定),或(在 Linux 上)ip指令(用於一般網路介面設定)。
例如,要設定名為 的活動 WireGuard 介面的 MTU wg0
,1420
請執行下列命令(以 root 身分):
ip link set wg0 mtu 1420
或者,使用命令關閉 WireGuard 介面wg-quick down wg0
(或如果您將其作為 systemd 服務運行),對 WireGuard 設定檔進行更改,然後使用命令(或)systemctl stop wg-quick@wg0
再次啟動介面。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 覆蓋。