Ошибка OpenVPN: Inactivity timeout (--inactive) – terminating connection
- VPN-клиент самопроизвольно отключается через фиксированное время простоя с сообщением:
Inactivity timeout (--inactive), terminating connection. - В серверном логе регистрируется:
[client_name] Inactivity timeout (--inactive). - Пользователи фоновых сессий (SSH, мониторинг) теряют доступ, если через туннель не передаются большие объемы данных.
1. Назначение и логика директивы inactive
Директива inactive <секунды> [байты] отключает клиента, если объем переданного трафика через TUN/TAP интерфейс за указанное время не превысил заданный порог (по умолчанию 0 байт).
2. Отключение таймаута неактивности на сервере
Если требуется поддерживать постоянное соединение (Always-On VPN), удалите или закомментируйте директиву inactive в server.conf:
# Закомментируйте строку:
# inactive 3600
# Либо явно отключите в CCD (Client Config Directory) для конкретного пользователя:
# /etc/openvpn/ccd/username
inactive 03. Настройка порога трафика (Bypass bytes)
Если таймаут необходим для освобождения неиспользуемых IP, но ping-пакеты не должны удерживать сессию, настройте порог байт:
# Отключать через 1800 сек (30 мин), если передано менее 100 КБ полезного трафика
inactive 1800 1024004. Генерация фонового трафика на клиенте (Workaround)
Если сервер управляется сторонним провайдером и директиву inactive нельзя изменить:
# Настройте регулярный опрос внутреннего ресурса через cron / systemd timer
*/5 * * * * curl -s http://10.8.0.1/healthz > /dev/null Частые вопросы (FAQ)
Учитываются ли системные keepalive ping-пакеты в расчете --inactive?
Нет, внутренние ping-пакеты OpenVPN (keepalive) обрабатываются на управляющем уровне и не учитываются счетчиком полезного payload интерфейса TUN/TAP.
Как настроить разные таймауты неактивности для разных пользователей?
Используйте каталог индивидуальных настроек клиентов ccd (client-config-dir). Создайте файл с именем сертификата пользователя и пропишите туда inactive 7200.
Почему при активной SSH-сессии туннель все равно закрывается по inactive?
Если по SSH сессии не передаются данные, трафик равен нулю. Включите ServerAliveInterval 30 в ~/.ssh/config для генерации SSH-keepalive трафика.
Что произойдет, если задать inactive 0?
Значение 0 полностью отключает проверку простоя, и туннель будет активен бесконечно до ручного отключения или аппаратного сбоя сети.