Назад | Перейти на главную страницу

Ключи TLS не синхронизированы? Почему время ожидания моего VPN-подключения истекает ровно через час?

Настройка довольно проста. Для моего домашнего сервера я использую:

  1. Сервер с Pfsense 2.3.4-RELEASE (последняя версия) в качестве ОС / брандмауэра
  2. Настройка OpenVPN (интегрированная версия Pfsense) как TCP tun (кроме того, в бесполезной попытке решить проблему, я добавил reneg-sec 0;keepalive 10 120 к пользовательским параметрам в разделе Дополнительные настройки в меню OpenVPN и перезапустил службу OpenVPN).
  3. FreeRADIUS как серверная часть аутентификации для установки OpenVPN.

В FreeRADIUS я установил MOTP. Поэтому я использую на своем телефоне приложение с пин-кодом для создания одноразового пароля (OTP) для входа в систему.

Все это работает нормально, около часа. Затем соединение начинает сбрасываться, и, очевидно, это не удастся, потому что срок действия одноразового пароля истек.

Я пытался удалить persist-tun вариант из моего локального файла ovpn. Поскольку это исправило аналогичную проблему для нескольких человек. Это тоже не сработало.

После внимательно проверяем логи. Я заметил, что клиент просто показывает:

Connection reset, restarting [0].

Сервер показывает (и может объяснить, почему) следующее. Непосредственно перед сбросом соединения сервер регистрирует сообщения в течение примерно 2 минут, каждую секунду следующим образом:

TLS Error: local/remote TLS keys are out of sync:

Затем:

  1. Inactivity timeout (--ping-restart), restarting
  2. TCP connection established with
  3. user '' could not authenticate.
  4. WARNING: Failed running command (--auth-user-pass-verify): external program exited with error status: 1
  5. TLS Auth Error: Auth Username/Password verification failed for peer
  6. Peer Connection Initiated with
  7. 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, что в основном является решением реальной проблемы. Настоящая проблема - выяснить, почему это не синхронизировано, и исправить это. Мне пока не удалось найти решение для этого. Но теперь мне достаточно этого обходного пути.