Исправить ошибку ‘TLS Error: TLS handshake failed’ на клиенте OpenVPN

Вопрос или проблема

Я настраиваю OpenVPN 2.3.6-1 на своем сервере Arch Linux для шифрования трафика SMB через общедоступный Интернет. Когда я тестирую настройки на одном из своих клиентов в виртуальной машине Linux, я получаю ошибку: TLS Error: TLS handshake failed.

Я быстро прочитал (OpenVPN на OpenVZ TLS Error: TLS handshake failed (предложенные Google решения не помогают)) и попытался переключиться с UDP на TCP, но это только привело к тому, что клиент повторно сообщал, что соединение истекло. Я также пытался отключить шифрование и аутентификацию TLS, но это привело к тому, что сервер выдал ошибку Assertion failed at crypto_openssl.c:523. В обоих случаях необходимые изменения были внесены как в конфигурацию клиента, так и сервера.

Я следовал инструкциям на (https://wiki.archlinux.org/index.php/OpenVPN), чтобы настроить OpenVPN, и инструкциям на (https://wiki.archlinux.org/index.php/Create_a_Public_Key_Infrastructure_Using_the_easy-rsa_Scripts), чтобы создать ключи и сертификаты. Единственные отклонения от этих инструкций заключались в указании имен моих компьютеров и соответствующих имен файлов ключей/сертификатов.

Смотрите также мой первоначальный вопрос о защите трафика SMB через Интернет: (Простое шифрование для общих ресурсов Samba)

Может кто-то объяснить, как я могу решить эту проблему?

Детали:

Сервер: Arch Linux (обновленный), подключенный напрямую к шлюзу по Ethernet-кабелю. Без iptables.

Клиент: Arch Linux (обновленный) виртуальная машина на VirtualBox 4.3.28r100309 на хосте Windows 8.1, сетевой адаптер в режиме сетевого моста. Без iptables. Брандмауэр Windows отключен.

Шлюз: Перенаправление порта для порта 1194 включено, без ограничений брандмауэра.

Вот конфигурационные файлы на сервере и клиенте соответственно. Я создал их в соответствии с инструкциями на Arch Wiki.

/etc/openvpn/server.conf (Только непомеченные строки):

port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server-name.crt
key /etc/openvpn/server-name.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

/etc/openvpn/client.conf (Только непомеченные строки):

client
dev tun
proto udp
remote [мой публичный IP здесь] 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client-name.crt
key /etc/openvpn/client-name.key
remote-cert-tls server
tls-auth /etc/openvpn/ta.key 1
comp-lzo
verb 3

Вот выводы запуска openvpn на машинах с вышеуказанными конфигурациями. Я сначала запустил сервер, затем клиент.

Вывод openvpn /etc/openvpn/server.conf на сервере:

Чт Июл 30 17:02:53 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] собран на 2 декабря 2014
Чт Июл 30 17:02:53 2015 версии библиотеки: OpenSSL 1.0.2d 9 Июл 2015, LZO 2.09
Чт Июл 30 17:02:53 2015 ПРИМЕЧАНИЕ: ваша локальная сеть использует чрезвычайно распространенный адрес подсети 192.168.0.x или 192.168.1.x. Имейте в виду, что это может создать конфликты маршрутизации, если вы подключаетесь к VPN-серверу из общественных мест, таких как интернет-кафе, которые используют ту же подсеть.
Чт Июл 30 17:02:53 2015 Алгоритм Диффи-Хеллмана инициализирован с ключом 2048 бит
Чт Июл 30 17:02:53 2015 Аутентификация управляющего канала: используется '/etc/openvpn/ta.key' в качестве статического ключевого файла OpenVPN
Чт Июл 30 17:02:53 2015 Исходящая аутентификация управляющего канала: Используется 160 битный хеш сообщения 'SHA1' для HMAC аутентификации
Чт Июл 30 17:02:53 2015 Входящая аутентификация управляющего канала: Используется 160 битный хеш сообщения 'SHA1' для HMAC аутентификации
Чт Июл 30 17:02:53 2015 Буферы сокетов: R=[212992->131072] S=[212992->131072]
Чт Июл 30 17:02:53 2015 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 IFACE=enp5s0 HWADDR=##:##:##:##:##:##
Чт Июл 30 17:02:53 2015 Устройство TUN/TAP tun0 открыто
Чт Июл 30 17:02:53 2015 Длина TX очереди TUN/TAP установлена в 100
Чт Июл 30 17:02:53 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Чт Июл 30 17:02:53 2015 /usr/bin/ip link set dev tun0 up mtu 1500
Чт Июл 30 17:02:53 2015 /usr/bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
Чт Июл 30 17:02:53 2015 /usr/bin/ip route add 10.8.0.0/24 via 10.8.0.2
Чт Июл 30 17:02:53 2015 GID установлен в nobody
Чт Июл 30 17:02:53 2015 UID установлен в nobody
Чт Июл 30 17:02:53 2015 UDPv4 локальная ссылка (связана): [undef]
Чт Июл 30 17:02:53 2015 UDPv4 удаленная ссылка: [undef]
Чт Июл 30 17:02:53 2015 MULTI: multi_init вызван, r=256 v=256
Чт Июл 30 17:02:53 2015 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Чт Июл 30 17:02:53 2015 СПИСОК IFCONFIG POOL
Чт Июл 30 17:02:53 2015 Процесс инициализации завершен

Вывод openvpn /etc/openvpn/client.conf на клиенте:

Чт Июл 30 21:03:02 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] собран на 2 декабря 2014
Чт Июл 30 21:03:02 2015 версии библиотеки: OpenSSL 1.0.2d 9 Июл 2015, LZO 2.09
Чт Июл 30 21:03:02 2015 ПРЕДУПРЕЖДЕНИЕ: файл '/etc/openvpn/client-name.key' доступен группе или другим пользователям
Чт Июл 30 21:03:02 2015 ПРЕДУПРЕЖДЕНИЕ: файл '/etc/openvpn/ta.key' доступен группе или другим пользователям
Чт Июл 30 21:03:02 2015 Аутентификация управляющего канала: используется '/etc/openvpn/ta.key' в качестве статического ключевого файла OpenVPN
Чт Июл 30 21:03:02 2015 Исходящая аутентификация управляющего канала: Используется 160 битный хеш сообщения 'SHA1' для HMAC аутентификации
Чт Июл 30 21:03:02 2015 Входящая аутентификация управляющего канала: Используется 160 битный хеш сообщения 'SHA1' для HMAC аутентификации
Чт Июл 30 21:03:02 2015 Буферы сокетов: R=[212992->131072] S=[212992->131072]
Чт Июл 30 21:03:02 2015 ПРИМЕЧАНИЕ: понижение UID/GID будет задержано из-за --client, --pull или --up-delay
Чт Июл 30 21:03:02 2015 UDPv4 локальная ссылка: [undef]
Чт Июл 30 21:03:02 2015 UDPv4 удаленная ссылка: [AF_INET][мой публичный IP здесь]:1194
Чт Июл 30 21:04:02 2015 TLS Error: TLS ключевая переговоры не произошли в течение 60 секунд (проверьте свою сетевую связь)
Чт Июл 30 21:04:02 2015 TLS Error: TLS handshake failed
Чт Июл 30 21:04:02 2015 SIGUSR1[soft,tls-error] получен, процесс перезагружается
Чт Июл 30 21:04:02 2015 Пауза перед перезапуском, 2 секунды

У меня также была эта проблема.

Я использую провайдера DigitalOcean для своего сервера, и проблема заключалась в функции плавающего IP.

Чтобы это исправить, вам нужно обновить настройки конфигурации openvpn:

local <ip anchor>

ip anchor должен быть IP-адресом, собранным с помощью команды ip addr, смотрите пример:
введите описание изображения здесь

Благодарности этому посту

Как предложили Майкл Хэмптон и Михаил Соколовский в комментариях к моему вопросу, это была проблема с правилом перенаправления порта, которое я создал на своем шлюзе. OpenVPN настроен на использование UDP, и я забыл переключиться с TCP на UDP на шлюзе, так как обычно не использую этот протокол. Правило перенаправления теперь использует UDP, и мой VPN функционирует.

Моя текущая конфигурация работает в некоторых странах, но не в других. Я подозреваю, что мой текущий провайдер блокирует пакеты TLS handshake. Решение? Поскольку я единственный, кто использует этот VPN, я перешел на аутентификацию по статическому ключу, которая – в моем случае – оказалась очень быстрой
https://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html

Это произошло со мной из-за использования некоторых старых, недействительных сертификатов.

Проблема была решена с помощью нового созданного конфигурационного профиля.

Если это появляется после обновления ядра ОС. Или входящие пакеты отображаются в tcpdump на сервере, но все равно не работают. Попробуйте простое отключение/включение брандмауэра. Возможно, кто-то поможет.

sudo ufw disable
sudo ufw enable

У меня была эта проблема из-за неправильно настроенного шлюза по умолчанию на стороне сервера. OpenVPN сервер получал попытку подключения от клиента, но ответ терялся, потому что никогда не доходил до правильного маршрутизатора.

У меня только что возникла эта проблема. Проверив свой файл .ovpn, я увидел, что ?.ddns.net был изменен на IP-адрес, поэтому он не подключался. Я изменил IP обратно на адрес ?.ddns.net, и он подключился.

В моем случае я настраивал IP-телефон GrandStream, когда столкнулся с этой проблемой. Дата на телефоне была виновата. Я установил дату вручную, отключил и снова подключил Ethernet-кабель, он успешно подключился к OpenVPN серверу. Телефон всегда загружается с неправильной датой, потому что не может получить информацию о времени с сети. Это происходило с конкретным маршрутизатором.

Я столкнулся с той же проблемой “Ошибка обработки TLS” и решил ее, изменив UDP на TCP (в конфигурациях сервера и клиента: proto tcp).

Если вы уже проверяли Официальные FQA.
Убедитесь, что UDP-пакеты поступили на сервер OpenVPN.
Используйте

tcpdump -i <inf> udp port 1194
# inf - имя сетевого интерфейса. используйте ifconfig, чтобы получить

Если с сетевой связью все в порядке, вы увидите что-то вроде:

содержимое tcpdump

Это указывает на то, что сервер OpenVPN действительно отправляет результат вашему клиенту OpenVPN через UDP порт 1194. Но клиент OpenVPN не получает пакеты с результатами.

Много причин могут привести к этой ситуации, ваш провайдер блокирует UDP или компания блокирует UDP.
Поэтому измените на TCP и попробуйте.

Ответ или решение

Как исправить ошибку ‘TLS Error: TLS handshake failed’ в OpenVPN клиенте

Введение

Ошибка TLS Error: TLS handshake failed в OpenVPN часто свидетельствует о проблемах с подключением между клиентом и сервером. В данном руководстве мы детально рассмотрим шаги по устранению данной ошибки, особенно в контексте использования OpenVPN на Arch Linux, а также портов и конфигураций, которые могут быть причиной её возникновения.

Причины ошибки

Ошибки TLS Handshake могут возникать по ряду причин, включая:

  1. Неверная конфигурация сервера или клиента: Неправильные параметры, такие как параметры шифрования, могут вызвать сбой в процессе рукопожатия TLS.
  2. Проблемы с сетью: Блокировки на уровне провайдеров, ограничение по портам или неправильные настройки переадресации портов могут также повлиять на соединение.
  3. Старые или недействительные сертификаты: Использование устаревших сертификатов может стать причиной неудачи рукопожатия.
  4. Ошибки в файле конфигурации: Неверные пути к файлам сертификатов и ключей могут привести к сбою.

Шаги по исправлению ошибки

1. Проверка конфигурационных файлов

Убедитесь, что конфигурационные файлы сервера и клиента правильно настроены и соответствуют друг другу. Сравните следующие параметры:

  • Порт и протокол: Оба файла должны использовать одинаковые параметры (UDP или TCP).
  • Пути к сертификатам и ключам: Проверьте, что указанные пути к файлам сертификатов и ключей верные.
  • Настройки tls-auth: Обратите внимание на настроенные параметры в обоих файлах (0 для сервера и 1 для клиента). Убедитесь, что ключ ta.key расположен по указанному пути.

Пример конфигурации:

# server.conf
port 1194
proto udp
# client.conf
proto udp
remote <ваш_public_IP> 1194

2. Проверка настроек сети и маршрутизации

Убедитесь, что провайдер не блокирует UDP-трафик. Вы можете выполнить команду tcpdump на сервере, чтобы проверить, получает ли он UDP-пакеты:

tcpdump -i <интерфейс> udp port 1194

Если пакеты не приходят, возможно, ваша настройка переадресации портов неправильно настроена. Убедитесь, что правила перенаправления на вашем маршрутизаторе правильно настроены на UDP.

3. Проверка сертификатов

Если вы используете старые или неправильно сгенерированные сертификаты, создайте новые сертификаты и ключи, следуя инструкциям из документации Easy-RSA.

4. Настройка локального IP

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

local <ваш_lokal_IP>

5. Отключение/включение брандмауэра

Если у вас установлен брандмауэр, попробуйте временно его отключить, чтобы проверить, не он ли является причиной проблемы:

sudo ufw disable
sudo ufw enable

6. Переход на TCP

Если все вышеперечисленные методы не помогли, попробуйте изменить протокол с UDP на TCP как на сервере, так и на клиенте:

# server.conf
proto tcp
# client.conf
proto tcp

Заключение

Ошибка TLS Error: TLS handshake failed может быть вызвана множеством факторов, начиная от неправильной конфигурации и заканчивая проблемами с сетью. Используя пошаговый подход, описанный выше, вы сможете выявить и устранить причину проблемы. Если проблема сохраняется, рекомендуется обратиться к документации OpenVPN или сообществу за дополнительной поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...