Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

WG_HANDSHAKE_TIMEOUT Сетевое оборудование и VPN

Ошибка WireGuard: Handshake did not complete after 5 seconds, retrying

Обновлено: 24.08.2026 · Официальная документация ↗
  • В выводе команды wg show отсутствует строка latest handshake или время последнего рукопожатия превышает несколько минут.
  • В системном журнале ядра: wireguard: wg0: Handshake for peer N did not complete after 5 seconds, retrying (try 2).
  • Трафик не проходит через туннель: счетчик transfer: tx увеличивается, а rx остается равным 0 байт.

1. Архитектурная особенность WireGuard («Тишина» протокола)

WireGuard намеренно разработан абсолютно бесшумным (Stealth). Если пакет содержит неверный открытый ключ, неверный порт или отброшен файрволом, сервер никогда не отправляет ICMP или RST ответы. Для клиента это всегда выглядит как таймаут 5 секунд.

2. Проверка статуса пиров через утилиту wg

# Просмотр состояния интерфейса и времени последнего рукопожатия
wg show

# Проверка детальной статистики по интерфейсу
ip -s link show wg0

3. Проверка публичных ключей (Key Mismatch)

Убедитесь, что публичный ключ, сгенерированный из приватного ключа клиента, в точности прописан в секции [Peer] на сервере:

# На клиенте: генерация публичного ключа из своего приватного
echo "<клиентский_privatekey>" | wg pubkey

# Полученный хэш должен СТРОГО совпадать со строкой PublicKey в секции [Peer] сервера!

4. Настройка PersistentKeepalive при работе за NAT

Если клиент находится за домашним роутером или мобильным NAT, входящие пакеты от сервера блокируются. Добавьте в конфигурацию клиента /etc/wireguard/wg0.conf:

[Peer]
PublicKey = <server_public_key>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
# Отправлять heartbeat-пакет каждые 25 секунд для удержания NAT-сессии:
PersistentKeepalive = 25

5. Проверка брандмауэра и проброса UDP портов

# Разрешить порт WireGuard на сервере (Ubuntu/Debian)
ufw allow 51820/udp

# Разрешить в iptables
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
💡 Практика специалистов: Помните правило WireGuard: клиент указывает в [Peer] публичный ключ СЕРВЕРА, а сервер указывает в [Peer] публичный ключ КЛИЕНТА. Приватные ключи (PrivateKey) никогда не должны покидать хост!

Частые вопросы (FAQ)

Почему в выводе wg show растет только TX, а RX равен 0?

Это классический симптом: клиент зашифровывает и отправляет пакеты рукопожатия (TX), но сервер их либо не получает (закрыт UDP порт), либо молча отбрасывает из-за несовпадения Public Key или AllowedIPs.

Как включить отладочные логи WireGuard в ядре Linux?

Выполните: modprobe wireguard && echo 'module wireguard +p' > /sys/kernel/debug/dynamic_debug/control, после чего смотрите вывод dmesg -wT.

Может ли WireGuard работать через TCP?

Нет, протокол WireGuard спроектирован для работы исключительно поверх UDP. Для туннелирования через TCP требуются сторонние обертки, такие как wstunnel или udp2raw.

Какой стандартный интервал PersistentKeepalive рекомендуется использовать?

Значение 25 секунд является стандартом RFC для большинства маршрутизаторов NAT и файрволов со stateful inspection.

Полезные материалы
Рекомендуем