Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

WireGuard Error: PersistentKeepalive failure — Обрыв туннеля за NAT

Обновлено: 24.08.2026  ·  Официальная база знаний

После нескольких минут отсутствия сетевой активности туннель перестает принимать входящие пакеты. Соединение восстанавливается только после того, как клиент сам отправит любой запрос наружу.

  • Сервер теряет возможность инициировать соединение с клиентом за NAT (SSH, мониторинг Prometheus/Zabbix отваливаются).
  • Тайм-аут сокета происходит ровно через 30, 60 или 120 секунд после завершения передачи трафика.
  • В выводе wg show на сервере endpoint клиента отображает устаревший порт.
  • Параметр PersistentKeepalive отсутствует в конфигурационном файле клиента.

1. Причина закрытия состояния в таблицах NAT роутеров

Домашние роутеры, корпоративные файрволы и CGNAT операторов удаляют трансляции UDP-портов из таблицы NAT (Stateful Firewall Table), если по порту нет трафика в течение короткого промежутка времени (обычно 30–60 секунд).

2. Настройка параметра PersistentKeepalive

Добавьте директиву PersistentKeepalive = 25 в секцию [Peer] на клиенте, находящемся за NAT/брандмауэром:

# Конфигурация клиента (/etc/wireguard/wg0.conf) или мобильного профиля:

[Interface]
PrivateKey = <Client_Private_Key>
Address = 10.0.0.2/24

[Peer]
PublicKey = <Server_Public_Key>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
# Отправка пустого аутентифицированного пакета каждые 25 секунд
PersistentKeepalive = 25

3. Применение изменений без перезапуска интерфейса

wg set wg0 peer <Server_PublicKey> persistent-keepalive 25

4. Проверка активности Keepalive

Убедитесь, что параметр применен:

wg show wg0 | grep -i keepalive

В выводе должна появиться строка: persistent keepalive: every 25 seconds.

Практический опыт инженера: Если сервер выступает в роли мониторинговой ноды и опрашивает удаленные филиалы за серыми IP, параметр PersistentKeepalive = 25 должен быть обязательно прописан на каждом клиенте в филиале.

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

Нужно ли указывать PersistentKeepalive на сервере?

Нет. На сервере с публичным статическим IP-адресом указывать этот параметр не нужно. Он настраивается исключительно на клиентах, работающих за NAT.

Почему рекомендуется именно интервал 25 секунд?

Большинство маршрутизаторов и мобильных операторов сбрасывают неактивные UDP-сессии через 30 секунд. Интервал в 25 секунд гарантирует поддержание сокета открытым с минимальным расходом трафика и батареи.

Сколько трафика расходует PersistentKeepalive?

Keepalive-пакет имеет размер всего 32 байта. При интервале 25 секунд суммарный трафик за сутки составляет менее 150 килобайт.

Помогает ли PersistentKeepalive при смене IP-адреса клиента (Roaming)?

Да. Как только клиент переключается между сетями (например, с Wi-Fi на LTE), первый же keepalive-пакет сообщает серверу новый endpoint (IP и порт) клиента.