Настройка довольно проста. Для моего домашнего сервера я использую:
reneg-sec 0;keepalive 10 120
к пользовательским параметрам в разделе Дополнительные настройки в меню OpenVPN и перезапустил службу OpenVPN).В FreeRADIUS я установил MOTP. Поэтому я использую на своем телефоне приложение с пин-кодом для создания одноразового пароля (OTP) для входа в систему.
Все это работает нормально, около часа. Затем соединение начинает сбрасываться, и, очевидно, это не удастся, потому что срок действия одноразового пароля истек.
Я пытался удалить persist-tun
вариант из моего локального файла ovpn. Поскольку это исправило аналогичную проблему для нескольких человек. Это тоже не сработало.
После внимательно проверяем логи. Я заметил, что клиент просто показывает:
Connection reset, restarting [0]
.
Сервер показывает (и может объяснить, почему) следующее. Непосредственно перед сбросом соединения сервер регистрирует сообщения в течение примерно 2 минут, каждую секунду следующим образом:
TLS Error: local/remote TLS keys are out of sync:
Затем:
Inactivity timeout (--ping-restart), restarting
TCP connection established with
user '' could not authenticate.
WARNING: Failed running command (--auth-user-pass-verify): external program exited with error status: 1
TLS Auth Error: Auth Username/Password verification failed for peer
Peer Connection Initiated with
Connection reset, restarting [0]
Я понимаю, почему он не может повторно подключиться (см. журнал № 3 и 5), очевидно, что срок действия одноразового пароля истек. Я читаю это так: проблема в том, что TLS keys are out of sync
и здесь может возникнуть проблема до отключения и повторного подключения с неправильными учетными данными. Теперь вопрос:
Как это исправить и где? На стороне сервера в Pfsense, OpenVPN, FreeRADIUS или в профилях OVPN на стороне клиента?
Кроме того, мой профиль ovp выглядит так:
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote [XXXXXX] 1194 tcp-client
auth-user-pass
ns-cert-type server
<ca>
-----BEGIN CERTIFICATE-----
[XXXXXX]
-----END CERTIFICATE-----
</ca>
setenv CLIENT_CERT 0
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
[XXXXXX]
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
Убедитесь, что системные часы на клиенте и сервере правильно синхронизированы через ваш любимый клиент NTP. Разница даже в несколько секунд может вызвать эту проблему.
После некоторой борьбы я нашел обходной путь, который решает проблему.
Настройка reneg-sec 0;
в файл конфигурации OpenVPN клиента, отключает повторное согласование TLS. Установка номера и для сервера OpenVPN, например reneg-sec 28800;
позволяет серверу начать повторное согласование через 8 часов (заканчивая тем, что сеанс прерывается из-за рассинхронизации). В основном это тайм-аут сеанса. Я рекомендую установить неограниченный клиент, а сервер - ограниченный. reneg-sec
так что вы всегда сможете изменить конфигурацию сервера, фактически не изменяя все файлы конфигурации клиента.
Такая настройка позволяет обойти повторное согласование TLS, что в основном является решением реальной проблемы. Настоящая проблема - выяснить, почему это не синхронизировано, и исправить это. Мне пока не удалось найти решение для этого. Но теперь мне достаточно этого обходного пути.