AmneziaWG: Соединение разрывается каждые 120 секунд (PersistentKeepalive)
- Туннель работает стабильно при активном скачивании, но зависает после 1-2 минут простоя.
- Входящий трафик перестает поступать, пока пользователь вручную не отправит запрос (например, не обновит страницу).
- Сервер не может инициировать соединение с клиентом, находящимся за межсетевым экраном или сотовой вышкой NAT.
- Регулярные задержки в получении Push-уведомлений и входящих сообщений в мессенджерах.
1. Архитектура работы State-таблиц NAT и межсетевых экранов
Домашние роутеры и шлюзы сотовых операторов (CGNAT) сохраняют соответствие трансляции UDP портов в течение ограниченного времени (обычно от 30 до 120 секунд). Если по туннелю не передаются данные, запись в таблице трансляции удаляется, и входящие пакеты от сервера перестают доходить до клиента.
2. Включение директивы PersistentKeepalive в конфиге клиента
Добавьте директиву регулярного пинга в секцию [Peer] клиентского файла конфигурации:
[Peer]
PublicKey = <Server_Public_Key>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
# Отправка пустого защищенного heartbeat-пакета каждые 25 секунд
PersistentKeepalive = 253. Тюнинг времени жизни UDP-соединений в ядре сервера
Если разрывы наблюдаются на стороне сервера, увеличьте тайм-ауты conntrack в /etc/sysctl.d/99-conntrack.conf:
net.netfilter.nf_conntrack_udp_timeout = 60
net.netfilter.nf_conntrack_udp_timeout_stream = 180sysctl --system4. Проверка интервала через консоль awg
awg show awg0 persistent-keepalive Частые вопросы (FAQ)
Почему PersistentKeepalive по умолчанию выключен в WireGuard/AmneziaWG?
По умолчанию он отключен для экономии заряда батареи мобильных устройств и снижения фонового трафика в сетях со статическими белыми IP-адресами.
Какое значение PersistentKeepalive считается оптимальным?
Значение 25 секунд является общепринятым стандартом для преодоления подавляющего большинства таймаутов домашнего NAT и мобильных операторов.
Создает ли PersistentKeepalive заметный трафик?
Нет, пакет keepalive имеет минимальный размер (около 32 байт) и передается раз в 25 секунд, расходуя менее 100 КБ трафика в сутки.
Нужно ли прописывать PersistentKeepalive на сервере?
Нет, keepalive настраивается на стороне клиента, находящегося за NAT, чтобы держать исходящий порт открытым в сторону публичного сервера.