1

Вчера я установил Debian 9 и OpenVPN на домашнем сервере, и все работало безупречно (я следовал этому руководству). Однако сегодня утром OpenVPN работал (на стороне клиента) и вдруг ничего не загружалось. Я попытался повторно подключиться к VPN, и это работало в течение 5 или 10 минут, а затем ничего.

Я провел несколько исследований и проверил состояние сервера OpenVPN с помощью команды systemctl status openvpn@server и увидел сообщение:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, client-instance restarting

Опять же, я посмотрел эту ошибку в Интернете, но ничего не решило проблему. Тем временем всплыли еще 2 ошибки:

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

а также

Authenticate/Decrypt packet error: cipher final failed

Кажется очевидным, что это как-то связано с TLS, верно? У меня есть файл ta.key сгенерированный с помощью openvpn --genkey --secret ta.key как в /etc/openvpn/ на сервере, так и в папке config на клиенте (windows).


Я попытался отключить UFW, но это не решает проблему, поэтому я сомневаюсь, что это брандмауэр. Вот результат ufw status любом случае:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

Вот что я добавил в /etc/ufw/before.rules:

*nat
:POSTROUTING ACCEPT [0.0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

The server.conf (без комментариев):

port 1194
proto udp4
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 82.196.9.45"
push "dhcp-option DNS 89.46.223.237"

keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

И, наконец, client.ovpn (без комментариев и сертификатов):

client
dev tun
proto udp4
remote [server-ip] 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

<ca>
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</ca>

<cert>
Certificate:
    (...)
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
(...)
-----END PRIVATE KEY-----
</key>

Любые предложения приветствуются, спасибо!

2 ответа2

0

Я переустановил сервер после этого, и теперь все работает без нареканий

Я думаю, это потому, что я не добавил key-direction в файлах конфигурации (0 на сервере и 1 на клиенте), потому что это почти единственное, что изменилось в конфигурации

0

Ключи авторизации TLS в OpenVPN являются предварительно общими ключами.

Вы должны сгенерировать один ключ и скопировать этот же ключ на сервер и клиент.
Если я не понял правильно, вы сгенерировали этот ключ как на сервере, так и на клиенте (это означает, что это два разных ключа). Так что сгенерируйте один ключ и скопируйте его в обе системы, тогда не должно быть ошибки, что локальные / удаленные ключи не синхронизированы.

Продолжая, кажется, что это не проблема в вашем случае, это было мое недопонимание, что вы использовали это неправильно.

Из архива списка рассылки OpenVPN (выделено мной):

Это сообщение может появляться при работе OpenVPN в режиме UDP, поскольку UDP не ориентирован на соединение, поэтому для одной стороны соединения нет простого способа узнать, что другая сторона вышла из строя или перезапустилась. Эта ошибка почти никогда не возникает при работе в режиме TCP, потому что TCP обеспечивает надежную семантику клиент / сервер и сброс соединения, когда какая-либо из сторон соединения отключается.

Примечание. Ниже приведено утверждение без конкретной ссылки / данных, подкрепляющих его:

Принимая во внимание эту цитату и тот факт, что вы настроили udp4 в качестве протокола, по которому работает OpenVPN, мне кажется, что использовать TLS вместе с UDP - плохая идея. TLS должен быть безопасным протоколом, поэтому ему необходимо надежное соединение, которое UDP не гарантирует.

Из RFC 5246 - TLS:

На самом низком уровне, расположенном поверх некоторого надежного транспортного протокола (например, TCP [TCP]), находится протокол записи TLS.

Поэтому TLS требует надежного соединения, таким образом , не следует использовать UDP.
Вы также можете узнать больше о причинах этого ответа в Security SE.

Просто переключитесь с:

proto udp4

чтобы:

proto tcp

В ваших конфигурациях OpenVPN.

Рекомендации (читать подробнее):
OpenVPN - использование tls-auth
Список рассылки OpenVPN
OpenVPN HowTo - настройка
Security SE - Почему для TLS требуется TCP?
RFC 5246 - протокол TLS
Википедия - UDP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .