MikroTik WireGuard Error: handshake did not complete after 5 seconds
- В логах RouterOS появляется
wireguard,error handshake did not complete after 5 seconds / giving up. - Счетчик
Latest Handshakeв меню/interface wireguard peersпустой или не обновляется. - Переданные байты (Tx) растут, принятые байты (Rx) равны 0.
- Сетевой трафик внутри WireGuard туннеля полностью отсутствует.
1. Проверка разрешения входящего UDP порта в Firewall
Убедитесь, что порт прослушивания WireGuard открыт в цепочке Input:
/interface wireguard print
! Добавление правила в Firewall Filter (например, порт 51820)
/ip firewall filter
add chain=input action=accept protocol=udp port=51820 comment="Allow WireGuard" place-before=02. Сверка пары Public Key и Private Key
Публичный ключ пира на стороне MikroTik должен строго соответствовать публичному ключу интерфейса удаленного клиента (а не его приватному ключу):
/interface wireguard peers print detail
/interface wireguard print3. Проверка Endpoint Address и Endpoint Port
Если удаленный узел имеет белый IP, убедитесь в правильности настроек endpoint:
/interface wireguard peers
set [find] endpoint-address="203.0.113.10" endpoint-port=51820 persistent-keepalive=25s4. Настройка правильного MTU
Стандартный MTU для WireGuard — 1420 (или 1280 для мобильных/PPPoE сетей):
/interface wireguard set [find] mtu=14205. Проверка блокировки провайдером (DPI)
Если провайдер блокирует трафик WireGuard по сигнатурам протокола, смените порт прослушивания на нестандартный (например, UDP 443, 53 или диапазон 40000–50000).
Частые вопросы (FAQ)
Что означает ошибка 'handshake did not complete after 5 seconds'?
Маршрутизатор отправил пакет инициализации рукопожатия WireGuard, но не получил ответного пакета аутентификации от пира. Соединение не установлено.
Почему параметр persistent-keepalive важен для клиентов за NAT?
WireGuard работает по протоколу UDP без сохранения состояния. Опция 'persistent-keepalive=25s' заставляет узел отправлять пустые пакеты каждые 25 секунд для поддержания открытой трансляции в таблице NAT роутера.
Может ли опечатка в Allowed-IPs вызывать таймаут хэндшейка?
Нет, сам хэндшейк выполняется на уровне открытых ключей и UDP портов. Неверный Allowed-IPs заблокирует передачу данных уже после успешного хэндшейка.
Как проверить, отправляет ли клиент ответы?
Запустите сниффер пакетов: '/tool sniffer quick interface=ether1 ip-protocol=udp port=51820' и проверьте наличие двунаправленного потока пакетов.