Ошибка с хендшейком WireGuard через Docker (wg-easy). Что я делаю не так?

Ссылка скопирована
1 ответ

По вводным: настраиваю 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:

68b024031d54d409454099.png
Сейчас ситуация такая: p.S. На купленном ключе wireguard такой проблемы нет, так что дело точно не в провайдере или блокировке.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

По симптомам WireGuard-клиент отправляет пакеты, но почти ничего не получает обратно. Это обычно значит одно из трёх: UDP-порт не доходит до контейнера, firewall/VDS режет UDP, или wg-easy сгенерировал endpoint/порт, который не совпадает с реально проброшенным портом. Смена MTU и PersistentKeepalive тут вторична: сначала нужно убедиться, что handshake вообще приходит на сервер.

На сервере проверьте, слушается ли UDP-порт и видит ли сервер пакеты:

docker ps
ss -lunp | grep 51722
tcpdump -ni any udp port 51722

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

[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

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

docker logs wg-easy --tail=100

Если после смены Wi-Fi начинает работать, возможно, предыдущая сеть режет UDP или держит плохой NAT. Тогда PersistentKeepalive 25, другой UDP-порт вроде 443/udp или 53/udp для теста, либо смена транспорта/сети помогут проверить гипотезу. Но сначала tcpdump: он сразу покажет, доходят ли UDP-пакеты до VDS. Без этого можно бесконечно крутить MTU и не попасть в причину.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно