Ошибка с хендшейком WireGuard через Docker (wg-easy). Что я делаю не так?
По вводным: настраиваю wireguard на арендованном vds. Разворачивал wirguard через wg-easy c такими настройками:
docker run -d \ --name=wg-easy \ -e WG_HOST= Тут IP сервера\ -e PASSWORD_HASH='23232452' \ -e WG_PORT=51722 \ -e WG_DEFAULT_DNS=94.140.14.14,94.140.15.15 \ -v ~/.wg-easy:/etc/wireguard \ -p 51722:51722/udp \ -p 51821:51821/tcp \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --sysctl="net.ipv4.ip_forward=1" \ --restart unless-stopped \ ghcr.io/wg-easy/wg-easy
Сейчас ситуация такая: проверял и не стандартные порты для UPD, уменьшал значение PersistentKeepalive до 5 и 1 секунды, уменьшал MTU.
Сейчас ситуация такая: трафик не устанавливается при первом соединении - на клиенте пишет "Принято 188Б, Передано: 24 КиБ" (Значение "Принято" статично после включения соединения, "Передано" постоянно меняется).
Нужно понять: но после смены Wi-Fi точки или же смены Wi-Fi на мобильную сеть пакеты сразу начинают уходить и приходить стабильно, ip клиента меняется на ip сервера. После выключения и включения на клиенте опять то же самое. Где искать причину?
По вводным: сама настройка wireguard:
# Server [Interface] PrivateKey = Address = 10.8.0.1/24 ListenPort = 51722 PreUp = PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51722 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; PreDown = PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51722 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; # Client: 444 [Peer] PublicKey = PresharedKey = AllowedIPs = 10.8.0.2/32 # Client: 555 [Peer] PublicKey = PresharedKey = AllowedIPs = 10.8.0.3/32
Настройки iptables:
Сейчас ситуация такая: p.S. На купленном ключе wireguard такой проблемы нет, так что дело точно не в провайдере или блокировке.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

По симптомам WireGuard-клиент отправляет пакеты, но почти ничего не получает обратно. Это обычно значит одно из трёх: UDP-порт не доходит до контейнера, firewall/VDS режет UDP, или wg-easy сгенерировал endpoint/порт, который не совпадает с реально проброшенным портом. Смена MTU и PersistentKeepalive тут вторична: сначала нужно убедиться, что handshake вообще приходит на сервер.
На сервере проверьте, слушается ли UDP-порт и видит ли сервер пакеты:
docker ps ss -lunp | grep 51722 tcpdump -ni any udp port 51722
Включите клиент и посмотрите tcpdump. Если пакетов нет, проблема до сервера: firewall хостера, security group, неверный IP/порт в клиентском конфиге, локальная сеть клиента или провайдер. Если пакеты есть, но handshake не появляется, смотрите контейнер и конфиг.
В docker run у вас проброшен 51722/udp, но важно, чтобы WG_PORT внутри wg-easy и Endpoint в клиентском конфиге тоже были 51722. После смены WG_PORT старые клиенты могли остаться со старым endpoint. Пересоздайте клиентский конфиг или проверьте вручную:
[Peer] Endpoint = SERVER_IP:51722 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25
На хосте включите forwarding и проверьте firewall:
sysctl net.ipv4.ip_forward iptables -S iptables -t nat -S ufw status verbose
Для Docker wg-easy обычно нужны NET_ADMIN и sysctl, они у вас есть, но на некоторых VDS модуль wireguard/ядро или nftables/iptables могут конфликтовать. Посмотрите логи контейнера:
docker logs wg-easy --tail=100
Если после смены Wi-Fi начинает работать, возможно, предыдущая сеть режет UDP или держит плохой NAT. Тогда PersistentKeepalive 25, другой UDP-порт вроде 443/udp или 53/udp для теста, либо смена транспорта/сети помогут проверить гипотезу. Но сначала tcpdump: он сразу покажет, доходят ли UDP-пакеты до VDS. Без этого можно бесконечно крутить MTU и не попасть в причину.