Почему WireGuard VPN начинает работать только после смены сети (например, при переключении между Wi‑Fi и мобильной сетью)?

Арендовал за рубежом три VPS в разных странах (Нидерланды, Англия, США), установил на них Ubuntu и WireGuard по самым простым инструкциям. При подключении к любому из серверов ситуация одинаковая: первый handshake проходит успешно — на сервере <code>wg show</code> видно, что peer подключился и были приняты/отправлены какие‑то пакеты, — но клиент не выходит в интернет и не может достучаться до сервера WireGuard (и сервер не достучаться до клиента). Все последующие handshakes завершаются таймаутом.
  • 6 июня 2026 г. 22:00
Ответы на вопрос 6
Коротко — это почти всегда либо NAT/«жизнь» NAT‑маппинга + поведение мобильных сетей/приложений, либо ошибка в маршрутах/форварде/маскараде на сервере. Симптом «первый handshake виден, пакеты в wg show, а дальше ничего; работает только после смены сети» очень похоже на то, что после initial‑handshake у клиента или NAT‑роутера не сохраняется корректная 5‑tuple (IP:port) или сокет мобильного приложения уходит в спящий режим, и серверу дальше некуда слать трафик.

Что проверить и как исправить (пошагово)

1) Правильность маршрутов и AllowedIPs
- На клиенте: ip addr show wg0 и ip route show. Если вы хотите весь трафик через VPN — в peer конфиге на клиенте должно быть AllowedIPs = 0.0.0.0/0 (и ::/0 для IPv6).
- На сервере: в peer для клиента AllowedIPs = клиент_vpn_ip/32 (например 10.0.0.2/32). Если там стоит 0.0.0.0/0 — это неправильно для многопользовательского сервера.

2) Форвардинг и NAT на сервере (если вы даёте доступ в интернет через VPS)
- Включить ip_forward:
  sudo sysctl -w net.ipv4.ip_forward=1
  и в /etc/sysctl.conf прописать net.ipv4.ip_forward=1
- Настроить MASQUERADE (пример для eth0 и wg0):
  sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  sudo iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
- Если используете nftables/ufw — не забыть соответствующие правила.

3) NAT и PersistentKeepalive (особенно для мобильных / роутеров)
- Если клиент за NAT или в мобильной сети — поставить в конфиге клиента в секции peer:
  PersistentKeepalive = 25
  Это держит NAT‑маппинг и socket «тёплыми», сервер сможет доставлять пакеты. Без этого многие мобильные сети/роутеры убивают UDP‑маппинг через десятки секунд.
- Для мобильных приложений (Android/iOS) убедитесь, что приложение не уходит в жёсткий фон и что «keepalive» включён (Android‑приложение обычно делает это при настройке).

4) Диагностика трафика
- На сервере смотрите wg show и tcpdump:
  sudo wg show
  sudo tcpdump -n -i eth0 udp port 51820
  и на клиенте tcpdump -i <интерфейс> чтобы увидеть, приходят ли ответы.
- Проверяйте latest handshake unix timestamp в wg show — если он обновляется при переключении сети, значит endpoint меняется.

5) MTU/фрагментация
- Если handshake проходит, а дальнейшие пакеты «пропадают», может быть PMTU/фрагментация. Попробуйте снизить MTU на wg интерфейсе, например:
  ip link set mtu 1420 dev wg0
  Или 1280 при проблемах с мобильными сетями.

6) Другие моменты
- Порт и firewall провайдера VPS: убедитесь, что UDP‑порт WireGuard (обычно 51820) открыт и не блокируется.
- Если у вас в peer в качестве Endpoint указан домен, резолв может возвращать разные IP (CDN) — лучше фиксировать текущий IP или обновлять его.
- На клиенте проверьте DNS: если VPN подключён, но DNS неверный — «кажется» что нет интернета. В конфиге клиента можно прописать DNS = 1.1.1.1 или ваш DNS.

Почему переключение сети решает проблему
- При смене сети мобильный стэк генерирует новый исходный IP/порт и/или приложение пересоздаёт UDP‑сокет — это принудительно создает новый NAT‑mapping и заставляет инициировать полноценный handshake, после чего соединение начинает работать. Добавление PersistentKeepalive и корректной настройки NAT/форварда устраняет необходимость в «ручной перезагрузке» сети.

Если хотите — пришлите:
- вывод sudo wg show,
- конфиги /etc/wireguard/*.conf (обезличьте приватные ключи),
- вывод ip route и ip addr на клиенте,
и я конкретно укажу, где ошибка и что править.
Потому что кукуруза, вот почему. <code>(๑-﹏-๑)</code> <br/> Да, WG блокируют, уже давно. Ищите другие решения.
вы в какой стране были последние года так 3-4? если только "Начинаю подозревать".... <br/> <br/> про <i>другую</i> сеть непонятно и странно <br/> <br/> используй амнезию а не ванильный wg. так даже на серваках можно ничего не менять а только на клиентах <br/> <br/> <a href="https://proton-converter.github.io/" rel="nofollow">https://proton-converter.github.io/</a> свой клиентский конфиг скармливаешь и получаешь амнезийный, из всего изменения лишь i1 основную роль несёт. только его и можно оставлять
Сделай обфускацию WG с помощью <br/> <br/> <br/> На гите <br/> <br/> <br/> А просто WG уже давно рубит ркн, одного из первых подрезал именно его...
Только начинаешь?)) лет 7 уже эта котовасия продолжается... <br/> <br/> да, по первым пакет определяет WG, обычно это 92 байта, и блокирует. никто давно уже чистым WG не пользуется
Я тут вчера замечательную картинку прикреплял - с РКН-тян и ее банхаммером :) Вот это оно и есть :)
Похожие вопросы