TLS ключи не синхронизированы? Почему время моего VPN-соединения истекает ровно через час?
Настройка довольно проста. Для моего домашнего сервера я использую:
- Сервер с Pfsense 2.3.4-RELEASE (последняя версия) в качестве ОС / брандмауэра
- Настройка OpenVPN (встроенная версия Pfsense) в качестве TCP tun (дополнительно в бесполезной попытке решить проблему, которую я добавил
reneg-sec 0;keepalive 10 120
к пользовательским параметрам в разделе "Дополнительные параметры" в меню OpenVPN и перезапустил службу OpenVPN). - FreeRADIUS как сервер аутентификации для установки OpenVPN.
В FreeRADIUS я настроил MOTP. Поэтому я использую приложение на своем телефоне с пин-кодом для генерации одноразового пароля (OTP) для входа в систему.
Все это работает нормально, около часа. Затем соединение начинает переустанавливаться, и, очевидно, это не удастся, поскольку срок действия 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), OTP явно истек. То, как я это читаю, заключается в том, что проблема в том, что 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
1 ответ
После некоторой борьбы я нашел обходной путь, который решает проблему.
настройка reneg-sec 0;
в файл конфигурации клиента OpenVPN отключает повторное согласование TLS. Например, установка номера для сервера OpenVPN reneg-sec 28800;
позволяет серверу начать повторное согласование через 8 часов (в конечном итоге убивая сеанс, потому что он не синхронизирован). В основном это делает сеанс тайм-аут. Я рекомендую установить клиент на неограниченный и сервер на ограниченный reneg-sec
так что вы всегда сможете изменить конфигурацию сервера, не изменяя все конфигурационные файлы клиента.
Такая настройка позволяет обойти пересмотр TLS, что по сути является обходным решением для реальной проблемы. Настоящая проблема состоит в том, чтобы выяснить, почему он не синхронизирован, и исправить это. Мне пока не удалось найти решение для этого. Но этого обходного пути мне достаточно.
Убедитесь, что системные часы на клиенте и сервере правильно синхронизированы через ваш любимый клиент NTP. Разница даже в несколько секунд может вызвать эту проблему.