OpenVPN-подключение сбрасывается каждые 2 минуты

OpenVPN-подключение сбрасывается каждые 2 минуты

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

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

client
dev tun
proto udp
remote ............... 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
cipher AES-128-CBC
auth SHA256
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
    Data:
        Version: 3 (0x2)
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

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

PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,route 172.16.0.0 255.255.240.0,route 172.16.16.0 255.255.240.0,route 172.16.128.0 255.255.240.0,route 172.16.144.0 255.255.240.0,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 1,cipher AES-256-GCM'

(обратите внимание ping 10,ping-restart 120)

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

2021-09-03 11:31:21.848620 UDP WRITE [62] to [AF_INET]...:1194: P_ACK_V1 kid=0 pid=[ #13 ] [ 6 ]
2021-09-03 11:31:21.848768 UDP WRITE [130] to [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=129
2021-09-03 11:31:21.848856 UDP WRITE [226] to [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=225

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

2021-09-03 11:40:26.121900 [cc-vpn] Inactivity timeout (--ping-restart), restarting
2021-09-03 11:40:26.122379 SIGUSR1[soft,ping-restart] received, process restarting
2021-09-03 11:40:26.122504 MANAGEMENT: >STATE:1630683626,RECONNECTING,ping-restart,,,,,
2021-09-03 11:40:26.448969 MANAGEMENT: CMD 'hold release'

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

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

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

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

решение1

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

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

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

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

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

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


Если кто-то задается вопросом, почему OpenVPN не обнаруживает это состояние и не сообщает об этом в лог-файлах, как прокомментировано ниже: это было бы слишком ненадежно и вводило бы в заблуждение. Логи должны содержать только сырые факты, и единственным достоверно установленным фактом является то, что один и тот же CN подключается неоднократно из разных мест; он не должен содержать никаких предположений относительно того, почему это произошло.

Если вы следуете процедурам безопасности, описанным выше, проблема просто не возникает. Если она возникает, это может означать только то, что процедура была нарушена. В этом случае, чтобы гарантировать безопасность VPN, самое безопасное — предположить, что ключ был скомпрометирован, и немедленно отозвать сертификат. Вероятно, VPN сломается для кого-то (чьим ключом это был), но это будет естественным следствиемихнеспособность следовать установленной процедуре: они не сообщили вам, что не используют VPN на каком-то компьютере и скопировали его на другой, или сертификат был украден, что угодно. После повторного обучения по теме вы можете выдать им новый сертификат.

Связанный контент