Итак, у меня есть VPS, работающий на Amazon Lightsail, и я установил на нем 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, вы обычно делаете это черезРГкоманда (для настроек, специфичных для WireGuard) или (в Linux)ipкоманда (для общих настроек сетевого интерфейса).
Например, чтобы установить MTU активного интерфейса WireGuard с именем 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
).
Если вы явно не настроили MTU для интерфейса WireGuard, wg-quick достаточно умен, чтобы сделать для вас хорошее предположение на основе MTU (физического) сетевого интерфейса, который, как он ожидает, будет использовать туннель. Сетевой интерфейс большинства экземпляров EC2 используетбольшие кадры(MTU 9001). Таким образом, на этих экземплярах EC2 wg-quick предположит, что интерфейс WireGuard должен использовать MTU 8921 (на 80 байт меньше, чем 9001, чтобы каждый пакет можно было обернуть заголовками UDP/IP и WireGuard).
Так что, вероятно, произошло то, что вы изначально настроили интерфейс WireGuard с SaveConfig = true
, но без MTU. Когда вы запустили интерфейс с помощью wg-quick, он установил MTU 8921 для интерфейса. Затем, пока интерфейс был запущен, вы отредактировали файл конфигурации WireGuard, добавив MTU = 1420
. Когда вы перезапустили интерфейс, ваши изменения были перезаписаны существующим MTU для интерфейса.