Как работает WireGuard и почему он может не подключаться
WireGuard — современный VPN-протокол, работающий поверх UDP. Его ключевая особенность — короткий handshake (рукопожатие) по схеме Noise IK: клиент отправляет Initiation-пакет, сервер отвечает Response-пакетом, после чего начинается передача данных. Если на любом из этих этапов происходит сбой, клиент показывает ошибку "handshake did not complete" или просто зависает в состоянии connecting.
Понимание этого процесса помогает диагностировать проблему. Если поле "latest handshake" в клиенте пустое — значит, рукопожатие не состоялось, и туннель не поднят. Это может быть вызвано как проблемами на стороне клиента (конфиг, время, брандмауэр), так и на стороне сети (блокировка UDP, DPI).
Важно различать два сценария: когда WireGuard вообще не устанавливает соединение, и когда соединение есть, но интернет не работает. Во втором случае проблема часто кроется в настройках AllowedIPs или маршрутизации на сервере.
Первичная проверка: интернет, конфиг и системное время
Прежде чем углубляться в сложные настройки, проверьте базовые вещи.
Интернет-соединение. Отключите WireGuard и откройте любой сайт. Если сайт не грузится — проблема не в VPN, а в самом подключении: отвалился Wi-Fi, провайдер моргнул, сменилась точка доступа. Переподключите сеть и дождитесь стабильного соединения.
Свежесть конфига. Конфигурационный файл привязан к ключам, которые хранятся на сервере. Если вы пересоздали сеть, перевыпустили конфиг или администратор удалил вас из участников — старый файл становится недействительным. Скачайте свежий конфиг из личного кабинета или с сервера и импортируйте заново.
Системное время. WireGuard критичен к расхождению часов. Если время на устройстве отличается хотя бы на пару минут, метки в handshake не совпадут, и сервер отвергнет пакет. Это частая проблема после переустановки ОС или севшей батарейки CMOS. Включите автоматическую синхронизацию времени и выполните принудительную синхронизацию.
Проблемы с конфигурацией: PrivateKey, PublicKey, Endpoint, AllowedIPs
Ошибки в конфигурационном файле — одна из самых распространённых причин. Разберём ключевые поля.
PrivateKey и PublicKey. Легко перепутать, какой ключ куда вставлять. В секции [Interface] клиента должен быть PrivateKey клиента, в секции [Peer] — PublicKey сервера. На сервере наоборот: в [Interface] — PrivateKey сервера, в [Peer] — PublicKey клиента. Проверьте, что ключи не перепутаны и не содержат лишних символов.
Endpoint. Обязательно в формате host:port. Опечатка в домене, неверный порт или IP, недоступный снаружи — и handshake уходит в никуда. Проверьте, что порт открыт и сервер доступен: можно выполнить ping или проверить порт с другого хоста.
AllowedIPs. Этот параметр определяет, какие подсети маршрутизируются через туннель. Если указано только 10.0.0.0/24, то через WireGuard будет ходить только эта подсеть, а весь остальной трафик пойдёт мимо. Для полного туннеля нужно указывать 0.0.0.0/0, ::/0. Если вы хотите использовать WireGuard только для доступа к локальной сети, укажите соответствующую подсеть.
PersistentKeepalive. Для мобильных сетей и NAT обязательна настройка PersistentKeepalive = 25. Она отправляет keepalive-пакеты каждые 25 секунд, чтобы NAT не забыл UDP-сессию. Без этого туннель может отваливаться через минуту простоя.
Блокировка UDP: как распознать и что делать
WireGuard работает поверх UDP, и некоторые провайдеры (особенно мобильные операторы) режут произвольный исходящий UDP-трафик. TCP при этом работает нормально. Косвенный признак — handshake не проходит ни в одной сети этого оператора, но WireGuard работает по Wi-Fi домашнего провайдера.
Чтобы проверить, блокирует ли оператор UDP, попробуйте подключиться с другой сети — мобильного интернета или другого Wi-Fi. Если там всё работает, дело в провайдере. В этом случае можно:
- Сменить порт WireGuard (например, с 51820 на 443). Это иногда обходит грубые UDP-фильтры, но не сигнатурный DPI.
- Использовать обфусцированный форк, например AmneziaWG, который маскирует handshake-сигнатуру.
- Обратиться к провайдеру с просьбой разблокировать UDP (вряд ли поможет, но попробовать стоит).
Если вы используете сервис с несколькими серверами, попробуйте сменить регион или сервер — возможно, другой адрес не блокируется.
DPI и сигнатурная блокировка WireGuard
В России и некоторых других странах DPI (deep packet inspection) активно используется для блокировки VPN-протоколов. Первый пакет WireGuard имеет фиксированную длину и характерный заголовок, который DPI распознаёт за один пакет и режет соединение. Это уже не проблема конфигурации — это проблема самого протокола.
Симптомы сигнатурной блокировки:
- Handshake проходит, но через 5–10 секунд интернет "исчезает".
- WireGuard не работает в одной сети, но работает в соседней.
- Смена сервера и порта не помогает.
В таких случаях помогает только смена протокола на обфусцированный форк (AmneziaWG) или использование обвязки поверх WireGuard (например, через прокси). AmneziaWG добавляет слой обфускации, который ломает DPI-сигнатуру. Важно не путать AmneziaWG (форк протокола) и AmneziaVPN (клиент).
Проблемы с NAT, CGNAT и PersistentKeepalive
Мобильные операторы часто используют CGNAT с короткими таймаутами на UDP-сессии. Если клиент молчит дольше минуты, NAT может "забыть" сессию, и обратные пакеты от сервера придут в никуда. Это проявляется как периодические обрывы туннеля.
Решение — включить PersistentKeepalive = 25 в секции [Peer] клиента. Этот параметр заставляет клиент отправлять keepalive-пакеты каждые 25 секунд, поддерживая сессию в NAT. Для мобильных сетей это обязательная настройка.
Также стоит проверить, не использует ли ваш провайдер CGNAT. Если у вас серый IP, то входящие соединения к вашему устройству невозможны, но для WireGuard это не проблема, так как клиент сам инициирует исходящее соединение. Однако если вы настраиваете сервер за CGNAT, вам потребуется проброс портов или использование релея.
Антивирус и брандмауэр: скрытые блокировки
Сторонние антивирусы и брандмауэры могут блокировать исходящий UDP или сам сетевой адаптер WireGuard. Внешне это выглядит так же, как и другие проблемы: клиент показывает "подключено", но handshake не проходит.
Что делать:
- Добавьте WireGuard в исключения антивируса и брандмауэра.
- Временно отключите сторонний антивирус и проверьте, появилось ли рукопожатие.
- Проверьте правила брандмауэра Windows: разрешите входящие и исходящие соединения для WireGuard.
Если после отключения антивируса всё заработало — значит, дело в нём. Настройте исключения для процесса wireguard.exe и сетевого адаптера WireGuard.
Настройка сервера WireGuard: типичные ошибки
Если вы настраиваете собственный VPN-сервер на VDS, проблемы часто возникают на стороне сервера. Вот типичные ошибки.
PostUp и PostDown. Эти команды выполняются при старте и остановке WireGuard. В них важно правильно указать сетевой интерфейс. Вместо %i может потребоваться указать конкретное имя интерфейса (например, wg0), а вместо eth0 — ваш реальный интерфейс (может быть ens3, enp0s3 и т.д.). Проверьте список интерфейсов командой ifconfig -a.
MASQUERADE. Для NAT-трафика нужна команда iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Если интерфейс указан неверно, трафик не будет маскироваться, и интернет не заработает.
IP-адреса. Адреса в [Interface] и [Peer] должны совпадать: Address на сервере и AllowedIPs у клиента должны быть из одной подсети. Например, сервер 10.0.0.1/24, клиент 10.0.0.2/32.
Порт. Убедитесь, что порт, указанный в ListenPort на сервере, совпадает с портом в Endpoint у клиента. Также проверьте, что порт открыт в файрволе сервера.
Пошаговая диагностика: от симптома к решению
Соберём всё в единый алгоритм действий.
- Проверьте интернет без VPN. Отключите WireGuard и откройте сайт. Если не грузится — чините интернет.
- Проверьте свежесть конфига. Скачайте заново и импортируйте.
- Синхронизируйте время. Включите автоматическую установку и синхронизируйте.
- Проверьте конфиг на ошибки. PrivateKey/PublicKey, Endpoint, AllowedIPs, PersistentKeepalive.
- Попробуйте другую сеть. Если работает на мобильном интернете, но не на Wi-Fi — провайдер режет UDP.
- Отключите антивирус/брандмауэр. Если помогло — настройте исключения.
- Проверьте сервер. Если вы админ — посмотрите логи, статус wg-quick, iptables.
- Если ничего не помогло — используйте обфускацию. AmneziaWG или другой протокол.
Если вы обращаетесь за помощью, никогда не публикуйте PrivateKey — это доступ к вашему туннелю.
Профилактика: как избежать проблем в будущем
Чтобы WireGuard работал стабильно, следуйте простым правилам.
- Всегда используйте свежие конфиги. После изменения состава сети или перевыпуска ключей скачивайте новый файл.
- Включайте PersistentKeepalive = 25 для мобильных сетей и NAT.
- Проверяйте AllowedIPs. Для полного туннеля — 0.0.0.0/0, ::/0.
- Синхронизируйте время на всех устройствах.
- Настраивайте исключения в антивирусе заранее.
- Используйте обфусцированные форки в регионах с DPI.
- Регулярно проверяйте доступность сервера и порта.
Если вы используете готовый сервис (например, LanBro), конфиг выдаётся автоматически, и ручная настройка не требуется. Это снижает риск ошибок.
Вопросы и ответы
Почему WireGuard не подключается?
Основные причины: пропал интернет, устаревший или отозванный конфиг, сбитое системное время, блокировка UDP провайдером или брандмауэром, DPI-блокировка, ошибки в конфигурации (PrivateKey/PublicKey, Endpoint, AllowedIPs), проблемы с NAT. Начните с проверки интернета и свежести конфига.
Что значит пустое поле latest handshake?
Это означает, что рукопожатие не состоялось: ваш компьютер отправляет пакеты на сервер, но ответа нет. Туннель не поднят. Проверьте интернет, конфиг, системное время, а затем исключите блокировку UDP антивирусом, брандмауэром или провайдером.
Как понять, что провайдер блокирует UDP?
Если WireGuard работает в одной сети (например, домашний Wi-Fi), но не работает в другой (мобильный интернет), вероятно, оператор режет UDP. Также признак — handshake не проходит ни в одной сети этого оператора, но работает у другого. Попробуйте сменить порт или использовать обфускацию.
Что делать, если WireGuard подключается, но интернет не работает?
Проверьте AllowedIPs: для полного туннеля должно быть 0.0.0.0/0, ::/0. Если указана только подсеть, остальной трафик идёт мимо. Также проверьте настройки сервера: MASQUERADE, правильный сетевой интерфейс, маршрутизацию.
Как исправить обрывы WireGuard через минуту простоя?
Это типичная проблема NAT/CGNAT. Добавьте в секцию [Peer] клиента параметр PersistentKeepalive = 25. Это заставит клиента отправлять keepalive-пакеты каждые 25 секунд, поддерживая сессию в NAT.
Может ли антивирус блокировать WireGuard?
Да, антивирусы и брандмауэры могут блокировать исходящий UDP или сетевой адаптер WireGuard. Добавьте WireGuard в исключения или временно отключите антивирус для проверки. Если после этого рукопожатие появилось — дело в защитном ПО.
Что такое AmneziaWG и когда он нужен?
AmneziaWG — это форк WireGuard с обфускацией, который маскирует handshake-сигнатуру и помогает обойти DPI-блокировки. Он нужен, если классический WireGuard не работает из-за сигнатурной блокировки, когда handshake проходит, но данные режутся. Не путайте с клиентом AmneziaVPN.