Как там reneg-sec 0 поживает?
Поясню что мы тут думаем.
В борьбе с зависшими сессиями, некоторое время, назад мы наткнулись на баг (?) со стороны OpenVPN. Он выглядит следующим образом. По умолчанию, процедура обмена ключами согласуется между сервером и клиентом в момент подключения и период рекеинга составляет 1 час. Так как мы используем UDP (что не гарантирует доставку), то, видимо, что-то не так происходит в процедуре рекеинга и второй (именно второй) рекей не проходит. При этом туннель не отключается, а просто перестает ходить трафик из-за отсутствия согласованного шифрования. Что интересно, но непрохождение этого трафика не означает, что сработает inactivity timeout и туннель будет отключен. Точнее, мы так и не поняли, а должны ли вообще шифроваться служебные пинги? Получается, что раз Inactivity Timeout не сработал, то значит служебные пинги не шифруются и все равно ходят. Поэтому туннель трафик не пропускал, но продолжал висеть до следующего рекея, который проходил нормально и хождение трафика возобновлялось.
Мы решили это побороть двумя действиями. Первое - увеличить время рекеинга до 48 часов и, одновременно, ввести перезапуск сессий пользователей каждые 24 часа. Таким образом, рекеинг просто никогда бы не наступил, а пользователи не теряли бы трафик.
Это мы сделали, но, тем не менее, какие-то клиенты OpenVPN (не все) ПО-ПРЕЖНЕМУ пытаются каждый час начать процедуру рекеинга, хотя их на сервере никто не ждет. Возможно, у них это вшито по-умолчанию. Но только в этот раз, невыполненный рекеинг приводит к обрыву сессии по Inactivity Timeout со стороны клиента. В общем все кривовато и не так как ожидалось. Поэтому ...
Есть предложение жестко принудить клиентское ПО OpenVPN не выполнять процедуру рекеинга, поставив параметр reneg-sec 0 в файле .ovpn (отдельной строкой перед тегом <ca>) или скачав новую версию файла с персональной страницы.