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

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

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

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

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 и порт) клиента.

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