WireGuard VPN не подключается (Нет Handshake): проверка блокировки UDP
Симптомы зависания туннеля WireGuard
Вы нажимаете кнопку «Активировать» в клиенте WireGuard. Программа радостно загорается зеленым щитом, но ни один сайт не открывается, а интернет полностью пропадает. В окне статуса клиента вы видите странную картину:
Transfer: 15.4 KiB sent, 0 B received
Latest handshake: (пусто или более 2 минут назад)Диагноз:
Клиент отправляет зашифрованные пакеты в пустоту, но не получает ни одного байта ответа от сервера. Процедура первичного рукопожатия (Handshake) не состоялась.
Главные причины отсутствия Handshake в WireGuard
Причина 1. Блокировка UDP-протокола или порта провайдером / TSPPU
WireGuard работает строго по протоколу UDP. Многие сотовые операторы, публичные Wi-Fi сети в отелях или магистральные провайдеры фильтруют нестандартный UDP-трафик или блокируют стандартный порт 51820.
Решение: смените порт на сервере на популярный
Переведите сервер и клиент WireGuard на разрешенные порты, которые провайдеры никогда не блокируют:
- Порт 53 UDP (протокол DNS)
- Порт 123 UDP (служба времени NTP)
- Порт 443 UDP (протокол QUIC / HTTP3)
# В файле конфигурации клиента [Peer]:
Endpoint = 203.0.113.10:53Причина 2. Ошибка в ключах Public Key / Private Key
В WireGuard нет логинов и паролей. Проверьте строгое соответствие ключей:
- В конфиге Клиента в поле
[Peer] PublicKeyдолжен быть прописан Публичный ключ СЕРВЕРА. - На Сервере в секции клиента должен быть указан Публичный ключ КЛИЕНТА.
Причина 3. Неправильный размер пакета MTU
Если провайдер использует инкапсуляцию PPPoE или мобильную связь, стандартный пакет размером 1500 байт не пролезает в туннель. Уменьшите значение MTU в клиентском конфиге:
[Interface]
PrivateKey = aAAA...
Address = 10.0.0.2/24
DNS = 1.1.1.1
MTU = 1280(Значение MTU = 1280 является безопасным минимальным стандартом для протокола IPv6/IPv4 и проходит через любые типы сетей).
Частые вопросы (FAQ)
Почему WireGuard всегда показывает зеленый значок, даже если сервер выключен?
WireGuard — это протокол без сохранения состояния (Stateless). Клиент не поддерживает постоянное соединение и становится «зеленым» сразу при применении локального конфига. Реальным показателем связи является только наличие строки «Latest Handshake: X seconds ago».
Что такое PersistentKeepalive = 25?
Эта опция заставляет клиент отправлять пустой проверочный пакет каждые 25 секунд. Это критически важно, если клиент находится за домашним роутером (NAT), чтобы роутер не закрывал открытый UDP-порт в таблице трансляций.
Можно ли заставить WireGuard работать по TCP?
Нативно WireGuard не поддерживает протокол TCP. Для маскировки и оборачивания в TCP используются специальные обертки вроде <code>wstunnel</code> или <code>udp2raw</code>.
Как проверить, слушает ли сервер порт WireGuard?
На сервере Linux выполните команду с правами root: <code>sudo wg show</code>. Вы должны увидеть статус интерфейса и количество переданных байт.