Ошибка OpenVPN: Connection reset, restarting [--ping-restart]
- VPN-соединение периодически разрывается каждые 60 или 120 секунд с логом:
[server] Inactivity timeout (--ping-restart), restarting. - В журнале регистрируется:
Connection reset, restarting [--ping-restart]. - Клиенты испытывают кратковременные зависания SSH-сессий, звонков VoIP и RDP-подключений.
- После рестарта туннель поднимается заново, но ситуация повторяется циклически.
1. Устранение сброса состояния в NAT-таблицах промежуточных роутеров
Домашние роутеры и мобильные операторы очищают неактивные трансляции UDP через 30–60 секунд отсутствия трафика. Для поддержания сессии уменьшите интервалы keepalive в конфиге клиента и сервера:
# Пинг каждые 10 секунд, перезапуск туннеля только если ответа нет 60 секунд
keepalive 10 60
# Для клиента (если сервер нельзя изменить):
ping 10
ping-restart 602. Включение сохранения состояния интерфейса и ключей
Чтобы при срабатывании ping-restart не происходило полное пересоздание сетевого адаптера (что рвет локальные маршруты и сокеты):
persist-tun
persist-key3. Решение проблем с фрагментацией пакетов (MTU Black Hole)
Если ping-пакеты проходят, а реальный рабочий трафик блокируется из-за превышения MTU:
# Добавьте в client.ovpn:
tun-mtu 1400
mssfix 13604. Переключение протокола на TCP при критических потерях UDP
Если провайдер выполняет троттлинг нестандартного UDP-трафика:
# В конфиге сервера и клиента:
proto tcp
port 443 Частые вопросы (FAQ)
Что именно делает параметр --ping-restart?
Директива указывает клиенту или серверу инициировать рестарт туннеля (мягкий SIGUSR1), если в течение указанного числа секунд от удаленной стороны не поступило ни одного пакета данных или управляющего ping.
Чем keepalive 10 60 отличается от ping-restart?
Директива keepalive 10 60 — это хелпер, который автоматически разворачивается в ping 10 и ping-restart 60 на сервере, а также пушит эти параметры клиенту.
Почему ping-restart часто срабатывает через мобильный интернет (LTE/5G)?
Мобильные вышки сотовой связи при переключении клиента между базовыми станциями меняют внешний IP адрес абонента. Настройте директиву float на сервере для бесшовного приема трафика со сменившихся IP.
Поможет ли explicit-exit-notify предотвратить зависание сессии?
Да, директива explicit-exit-notify 1 отправляет сигнал серверу о плановом закрытии клиента, освобождая ресурсы без ожидания таймаута ping-restart.