Рейтинг:1

Сброс соединения OpenVPN каждые 2 минуты

флаг vn

У меня есть сервер OpenVPN, работающий на Ubuntu в AWS, и я использую Tunnelblick в macOS для подключения к нему. У меня нет проблем с подключением к другим VPN-серверам, но этот, кажется, истекает/сбрасывается каждые 2 минуты.

Мой OVPN-профиль:

клиент
разработчик тун
прото удп
удаленный ....... 1194
разрешить-повторить бесконечный
ни к чему
пользователь никто
группа
постоянный ключ
упорный тун
сервер удаленного сертификата tls
шифр AES-256-CBC
глагол 3
шифр AES-128-CBC
аутентификация SHA256
ключевое направление 1
<ca>
-----НАЧАТЬ СЕРТИФИКАТ-----
...
-----КОНЕЦ СЕРТИФИКАТА-----
</ca>
<сертификат>
Сертификат:
    Данные:
        Версия: 3 (0x2)
...
-----НАЧАТЬ СЕРТИФИКАТ-----
...
-----КОНЕЦ СЕРТИФИКАТА-----
</сертификат>
<ключ>
-----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ-----
...
-----КОНЕЦ ЗАКРЫТОГО КЛЮЧА-----
</ключ>
<tls-авторизация>
#
# 2048-битный статический ключ OpenVPN
#
-----НАЧАЛО Статический ключ OpenVPN V1-----
...
-----END Статический ключ OpenVPN V1-----
</tls-авторизация>

При подключении сервер выставляет следующие настройки:

PUSH: получено управляющее сообщение: 'PUSH_REPLY, перенаправление шлюза def1 bypass-dhcp, dhcp-option DNS 8.8.8.8, маршрут 172.16.0.0 255.255.240.0, маршрут 172.16.16.0 255.255.240.0, маршрут 172.16.128.25, маршрут 172.16.128.25, 524.0 255.0. 172.16.144.0 255.255.240.0,маршрут 10.8.0.1,топология net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 1,шифр AES-256-GCM'

(обратите особое внимание пинг 10, пинг-перезагрузка 120)

Подняв уровень журнала на клиенте, похоже, что соединение отправляет пакеты данных:

2021-09-03 11:31:21.848620 ЗАПИСЬ UDP [62] в [AF_INET]...:1194: P_ACK_V1 kid=0 pid=[ #13 ] [ 6 ]
2021-09-03 11:31:21.848768 ЗАПИСЬ UDP [130] в [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=129
2021-09-03 11:31:21.848856 ЗАПИСЬ UDP [226] в [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=225

Однако соединение всегда обрывается примерно через 2 минуты. В журнале клиента указано:

2021-09-03 11:40:26.121900 [cc-vpn] Тайм-аут бездействия (--ping-restart), перезапуск
2021-09-03 11:40:26.122379 SIGUSR1 [soft, ping-restart] получен, перезапуск процесса
2021-09-03 11:40:26.122504 УПРАВЛЕНИЕ: >СОСТОЯНИЕ: 1630683626,ПОВТОРНОЕ СОЕДИНЕНИЕ,пинг-перезапуск,,,,,
2021-09-03 11:40:26.448969 МЕНЕДЖМЕНТ: CMD «отложить выпуск»

На самом деле в журнале сервера ничего нет, кроме перезапуска соединения.

Двухминутный тайм-аут имеет смысл, учитывая пинг-перезагрузка 120 настройка передана клиенту, но я не понимаю, почему он считает, что он неактивен. Что мне не хватает? Есть ли настройка на клиенте, которая предотвращает правильную отправку пинга на сервер?

В частности, добавление ping/ping-restart в конфигурацию клиента, похоже, не помогает (я предполагаю, что это все равно будет переопределено сервером PUSH).

Как я могу отладить это и выяснить, почему соединение не поддерживается?

Nikita Kipriyanov avatar
флаг za
Может быть, у вас есть два клиента, использующие одну и ту же пару сертификат/ключ и работающие одновременно?
DrTeeth avatar
флаг vn
Ага. Вот и все. Я наткнулся на несколько других ответов, предполагающих это, но я не смог найти другого клиента, и я знал, что у меня его нет. Оказывается, у кого-то еще был старый контейнер, работающий в фоновом режиме, который все еще его использовал. Более того, оба клиента пытались переподключиться каждый раз, когда они отключались, так что они просто боролись за соединение. Я бы хотел, чтобы сообщение об ошибке было лучше... на самом деле это не "тайм-аут бездействия"... @NikitaKipriyanov Если вы хотите написать это как ответ, я буду рад отдать вам должное. Иначе я просто напишу свою глупость.
Рейтинг:1
флаг za

Это часто является признаком того, что существует более одного клиента, использующего эту пару ключ/сертификат:

  • (1) аутентифицирует
  • (2) аутентифицирует; сервер видит тот же сертификат, поэтому он думает, что это было просто замененное соединение, и (1) больше не будет получать пинг поддержки активности
  • (1) пропускает некоторые пинги, решает, что соединение разорвано, и снова подключается, теперь (2) не будет получать пинги
  • (2) пропускает некоторые пинги, решает, что соединение разорвано, и снова подключается, теперь (1) не будет получать пинги

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

Чтобы этого не произошло, вы должны тщательно управлять своим VPN CA. В частности:

  • Отслеживайте, где установлены ваши ключи и кто отвечает за устройство, на котором установлен каждый ключ. Иметь способ связаться со всеми, у кого есть активные ключи VPN (например, записать их номер телефона, адрес электронной почты и т. д., вы можете настроить OpenSSL, чтобы он запрашивал эти данные во время выпуска сертификата и записывал эти данные непосредственно в сертификаты и индекс ЦС) .
  • Никогда не используйте один и тот же ключ/сертификат более одного раза; никогда не вставляйте ключ/сертификат в шаблоны; если вы клонируете какую-то систему, очищайте там ключи. Ключи должны всегда генерироваться и сертифицироваться заново каждый раз, когда система развернутый.
  • Если какой-либо пользователь запрашивает (другой) ключ/сертификат, когда у них есть активный, он должен объяснить, почему.Возможно, они потеряли старые данные, потому что ОС была переустановлена, и они забыли сохранить конфигурацию VPN; или им просто может понадобиться VPN на дополнительном компьютере. Или что угодно. Оценивая их объяснение, вы либо сначала отозвать старый ключ, прежде чем выдавать другой, или выпустить ключ с другим CN, чтобы избежать конфликта.
  • Научите своих пользователей всегда уведомлять вас, что их ключ/сертификат больше не используется (он утерян или причина его выдачи утеряна), чтобы вы могли его отозвать. И тогда вам придется отозвать его.
  • Очень важно, научите пользователей небрежно уведомлять вас, если они подозревают, что ключ/сертификат был украден, и в этом случае вы должны немедленно отозвать его.

Это части процесса, называемого «сетевой безопасностью». VPN не может быть безопасным без определенной дисциплины, независимо от того, насколько совершенным является его программное обеспечение и современная криптография.

DrTeeth avatar
флаг vn
Я действительно хотел бы, чтобы у клиента или сервера было лучшее сообщение об ошибке - на самом деле это не «тайм-аут бездействия», а скорее два клиента, пытающиеся украсть активное соединение друг у друга. Тем не менее, это был ответ для меня - кто-то другой использовал профиль на машине, которую никто из нас больше не использовал, и он пытался подключиться / переподключиться, пока я пытался сделать то же самое.
Nikita Kipriyanov avatar
флаг za
Сервер не мог этого сделать. Он просто сообщает о том, что видит: клиент постоянно подключается снова и снова. Он не может легко связать последующие попытки подключения и решить, что «это два конфликтующих клиента с одним и тем же сертификатом». Каждая новая аутентификация поступает из новой пары (адрес, порт), поэтому, хотя может быть *понимание*, эти *могут* быть только два клиента, нет надежного способа определить это. Я видел случаи, когда это понимание было неверным. Никто не хочет, чтобы сообщения об ошибках сервера *вводили в заблуждение*, поэтому лучше оставить их такими, какие они есть.
DrTeeth avatar
флаг vn
Я все еще не уверен, что сервер не может что-то сделать. Клиент А подключается. Затем подключается клиент B, что делает подключение клиента A более недействительным, поскольку он использует тот же сертификат. Только сервер знает, что одно соединение стало недействительным из-за того, что подключился другой клиент. В этот момент сервер мог: а) поместить сообщение в свой собственный файл журнала (я его не видел), б) отправить сообщение одному или обоим клиентам о том, что несколько клиентов пытаются использовать один и тот же сертификат (аналогично статическому DNS конфликтные сообщения с использованием одного и того же IP-адреса), c) отслеживать IP-адреса и отправлять сообщение клиенту, который повторно подключается
DrTeeth avatar
флаг vn
Но я понимаю, что это дизайнерское решение на стороне OpenVPN, так что выходит за рамки этого. Просто... может быть, если однажды ночью разработчику OpenVPN станет скучно читать эти комментарии...?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.