Клиент OpenVPN не подключается к серверу OpenVPN на Netgear.

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

Мой сын настроил сервер OpenVPN на своем маршрутизаторе NetGear в Великобритании. Я нахожусь в Италии и у меня есть клиент OpenVPN, который хорошо работает на Windows, но я хочу подключаться также с моего Raspberry Pi и ноутбука на Ubuntu. Я следовал всем инструкциям по установке клиента OpenVPN, но ни одна из версий для Linux не подключается. Версия OpenVPN, установленная на Raspberry Pi, — 2.6.3-1+deb12u2. Сейчас я сосредоточусь на версии для Raspberry Pi, поскольку проблемы, похоже, схожи в обоих случаях, и, возможно, решение одной из них подскажет, как решить другую. Raspberry Pi — это модель 5, которая работает на Debian GNU/Linux 12 (bookworm). Файл Client.conf выглядит следующим образом:

client
#dev tap
dev tun
proto udp
remote beerisgood.ddns.net 12974
resolv-retry infinite
nobind
persist-key
persist-tun
persist-remote-ip
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
cipher AES-128-CBC
# data-ciphers-fallback AES-128-CBC
comp-lzo
# route-noexec  ## added JKJ 17/2/25
verb 3
log /etc/openvpn/log/jrjvpn.log
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Запуск клиента OpenVPN генерирует следующий файл журнала:

    2025-02-19 18:58:07 DEPRECATED OPTION: --cipher set to 'AES-128-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305). OpenVPN ignores --cipher for cipher negotiations. 
    2025-02-19 18:58:07 Note: '--allow-compression' is not set to 'no', disabling data channel offload.
    2025-02-19 18:58:07 OpenVPN 2.6.3 aarch64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
    2025-02-19 18:58:07 library versions: OpenSSL 3.0.15 3 Sep 2024, LZO 2.10
    2025-02-19 18:58:07 DCO version: N/A
    2025-02-19 18:58:07 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
    2025-02-19 18:58:08 TCP/UDP: Preserving recently used remote address: [AF_INET]213.18.141.7:12974
    2025-02-19 18:58:08 Socket Buffers: R=[212992->212992] S=[212992->212992]
    2025-02-19 18:58:08 UDPv4 link local: (not bound)
    2025-02-19 18:58:08 UDPv4 link remote: [AF_INET]213.18.141.7:12974
    2025-02-19 18:58:08 TLS: Initial packet from [AF_INET]213.18.141.7:12974, sid=2f04db75 d6626407
    2025-02-19 18:58:08 VERIFY OK: depth=1, C=TW, ST=TW, L=Taipei, O=netgear, OU=netgear, CN=netgear CA, name=EasyRSA, emailAddress=mail@netgear
    2025-02-19 18:58:08 VERIFY OK: depth=0, C=TW, ST=TW, L=Taipei, O=netgear, OU=netgear, CN=server, name=EasyRSA, emailAddress=mail@netgear
    2025-02-19 18:58:08 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, peer certificate: 1024 bit RSA, signature: RSA-SHA256
    2025-02-19 18:58:08 [server] Peer Connection Initiated with [AF_INET]213.18.141.7:12974
    2025-02-19 18:58:08 TLS: move_session: dest=TM_ACTIVE src=TM_INITIAL reinit_src=1
    2025-02-19 18:58:08 TLS: tls_multi_process: initial untrusted session promoted to trusted
    2025-02-19 18:58:09 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
    2025-02-19 18:58:09 PUSH: Received control message: 'PUSH_REPLY,ping 10,ping-restart 120,route-delay 10,route-gateway 192.168.1.1,redirect-gateway def1,peer-id 0,cipher AES-256-GCM'
    2025-02-19 18:58:09 OPTIONS IMPORT: route options modified
    2025-02-19 18:58:09 OPTIONS IMPORT: route-related options modified
    2025-02-19 18:58:09 net_route_v4_best_gw query: dst 0.0.0.0
    2025-02-19 18:58:09 net_route_v4_best_gw result: via 192.168.178.1 dev wlan0
    2025-02-19 18:58:09 ROUTE_GATEWAY 192.168.178.1/255.255.255.0 IFACE=wlan0 HWADDR=2c:cf:67:5e:8e:04
    2025-02-19 18:58:09 TUN/TAP device tun0 opened
    2025-02-19 18:58:09 Data Channel: cipher 'AES-256-GCM', peer-id: 0, compression: 'lzo'
    2025-02-19 18:58:09 Timers: ping 10, ping-restart 120
    2025-02-19 18:58:19 net_route_v4_add: 213.18.141.7/32 via 192.168.178.1 dev [NULL] table 0 metric -1
    2025-02-19 18:58:19 net_route_v4_add: 0.0.0.0/1 via 192.168.1.1 dev [NULL] table 0 metric -1
    2025-02-19 18:58:19 sitnl_send: rtnl: generic error (-101): Network is unreachable
    2025-02-19 18:58:19 ERROR: Linux route add command failed
    2025-02-19 18:58:19 net_route_v4_add: 128.0.0.0/1 via 192.168.1.1 dev [NULL] table 0 metric -1
    2025-02-19 18:58:19 sitnl_send: rtnl: generic error (-101): Network is unreachable
    2025-02-19 18:58:19 ERROR: Linux route add command failed
    2025-02-19 18:58:19 Initialization Sequence Completed

Как вы можете видеть, происходит ошибка выполнения команды route add. Скрипт для Windows, который работает, использует dev tap, но я изменил его на dev tun в надежде, что это решит ошибку, но это не принесло никакой разницы. Запуск ip a до и после запуска клиента показывает следующее различие после запуска OpenVPN:

17: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
    link/none

Вызовы скриптов up и down для update-resolv-conf были предложены как дополнения в инструкциях по установке, но они не повлияли на ситуацию, поэтому я закомментировал их для генерации приведенного выше файла журнала. Насколько я могу понять из скриптов, они используют переменные окружения, которые могут передаваться с сервера и использоваться для изменения таблиц маршрутизации, но ничего не передается с сервера, поэтому их наличие или отсутствие не имеет значения.
Одна из тем, которую я прочитал, предположила, что нужна утилита resolvconf, поэтому я установил и ее, но это тоже не помогло. Запуск утилиты до и после запуска OpenVPN дает следующий результат:

$ sudo resolvconf -l
# resolv.conf from NetworkManager
search fritz.box
nameserver 192.168.178.1
nameserver fd00::de39:6fff:feec:40a6

Еще одна вещь, которую я попробовал, это добавление route-noexec в файл конфигурации (закомментировано выше). Это устранило ошибки, но не решило проблему неработающего VPN, поэтому я решил, что лучше видеть ошибки. Сравнение файлов журналов с этой командой и без нее показало, что они идентичны до момента 2025-02-19 18:58:09 Timers: ping 10, ping-restart 120 в приведенном выше журнале, но затем остаток журнала пуст до Initialization Sequence Completed.

Вопрос: как заставить это работать?

Спасибо @tink и @StephenHarris за ваши очень быстрые ответы.

Ничего не изменяя на сервере, клиент VPN теперь работает на Raspberry Pi и также на Ubuntu. Проблема оказалась в том, что TUN использует порт 12973, тогда как TAP использует 12974. Переключившись на порт 12973, ошибки исчезли.

Мой сын обнаружил, что VPN NetGear очень ограничен, и он может настроить очень мало, так что невозможно устранить некоторые предупреждения, которые записываются клиентом, такие как проверка сертификатов. Он изучает возможность перейти на Raspberry Pi и использовать WireGuard.

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

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

Решение задачи подключения клиента OpenVPN к серверу OpenVPN, установленному на маршрутизаторе NetGear, требует тщательного подхода. Рассмотрим все аспекты проблемы, чтобы понять, как можно исправить возникшую ситуацию и добиться устойчивой работы VPN-соединения.

Теория

OpenVPN — это программное обеспечение для создания виртуальных частных сетей с использованием шифрования для поддержки конфиденциальности и защиты данных в сети. Основные элементы установки OpenVPN включают клиентскую и серверную части, а также необходимые конфигурационные файлы и сертификаты. Полноценное функционирование сети зависит от правильной настройки и совместимости данных компонентов.

В вашем случае проблемой могла стать неправильно настроенная конфигурация клиента OpenVPN на Raspberry Pi и Ubuntu. Также следует учитывать особенности маршрутизаторов NetGear, которые могут ограничивать некоторые параметры конфигурации в сравнении с более гибкими решениями, например, собственной сборкой на Raspberry Pi.

Пример

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

  1. Конфигурация порта и устройства: Замена dev tap на dev tun и смена порта с 12974 на 12973, как выяснилось, оказалась ключевым моментом. TAP и TUN используют разные порты, что важно учитывать.

  2. Шифрование и компрессия: В логе упоминается о необходимости настроить --data-ciphers вместо устаревшего параметра --cipher. Это важно, так как неправильные настройки шифрования могут привести к отказу в соединении.

  3. Маршруты и туннели: Ошибка, связанная с route add, может указывать на проблему с маршрутами, которые сервер OpenVPN пытается передать клиенту. Если устройство TUN не открылось корректно, это может возникать из-за неверных маршрутов.

  4. Результат выполнения скриптов: Замечено, что скрипты up и down, связанные с update-resolv-conf, не влияют на проблему. Однако важно убедиться, что они правильно настроены и применяются в нужное время. Это может быть критично для обновления DNS и конфигурации маршрутизации.

Применение

Учитывая вышеописанные данные, чтобы успешно настроить OpenVPN клиент на Raspberry Pi:

  • Правильная настройка порта: Убедитесь, что используете правильный порт. Как выяснилось, 12973 является правильным для конфигурации TUN.

  • Обновите параметры шифрования: Замените устаревший параметр --cipher на --data-ciphers, указав поддерживаемые шифры. Это необходимо для обеспечения совместимости с сервером.

  • Проверьте устройство TUN: Убедитесь, что устройство TUN правильно конфигурируется и доступно в системе. Команда ip a должна отобразить его как активное и поднятое устройство.

  • Устраните маршрутизационные ошибки: Проверьте настройки маршрутизации, используя команды ip route и sudo resolvconf -l, чтобы убедиться, что VPN-туннель получает и использует корректные маршруты.

  • Отладка и логи: Сохраняйте подробные логи для анализа, используя verb 3 или более высокий уровень. Это поможет диагностировать этап, на котором происходит сбой.

  • Сертификационная валидация: Хотя сервер NetGear ограничен в настройках, рекомендуем использовать доступные средства, чтобы убедиться в безопасности соединений.

После выполнения этих шагов клиент на Raspberry Pi должен подключаться без ошибок. В дальнейшем рассматривайте переход на более гибкие VPN-решения, такие как WireGuard, для упрощения управления и повышения безопасности.

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

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