Позавчера столкнулся с непонятным фактом, дело в том, что у меня на моем смартфоне Honor 9X
установлено приложение OpenVPN
и посредством импортированного профиля я имею возможность подключаться к домашней сети. Дабы, запустив приложение DMSS
подключаться к своему видеорегистратору: Dahua DHI-NVR2108HS-8P-4KS2
, т.к. я намеренно не делаю Port Forward
дабы не светить доступ из вне к нему, доступ только из вне только через VPN.
Ну так вот, запустив приложение OpenVPN Connect
нажимаю на профиль и обычно соединение устанавливалось, а тут происходит включение/выключение, включение/выключение.
Ниже какие действия я предпринимал чтобы разобраться в ситуации, ведь до выявленного факта что не подключается все работало от 03.10.2020
заметки "Настройка OpenVPN клиента на смартфоне"
Шаг №1:
Первым делом обновил приложение OpenVPN
на смартфоне, стала версия 3.3.4 (9290)
, пробую подключиться с профилем, которым я в первый раз создал, ситуация не изменилась, также не подключается.
Шаг №2:
Удалил профиль client.ovpn
и пробую его заново подключить в приложение OpenVPN
на смартфоне:
пробую добавить заново и получаю
Failed to import profile
This profile requires additional files for successful import: ca.crt, honor.crt, honor.key. Please select multiple files
мой конфиг client.ovpn
файла
client remote vpn.ekzorchik.ru 1194 dev tun0 proto tcp ca /storage/emulated/0/oclient/ca.crt cert /storage/emulated/0/oclient/honor.crt key /storage/emulated/0/oclient/honor.key route 10.8.0.0 255.255.255.0 pull
изменяю на
client remote vpn.ekzorchik.ru 1194 dev tun0 proto tcp <ca> -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- </cert> <key> -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----- </key> route 10.8.0.0 255.255.255.0 pull
На заметку: Конфигурационный файл, составленный способом выше удобен тем что все в нем и не нужно заморачиваться с нахождением путей как именуется пути в смартфоне.
после передаю данный client.ovpn
любым удобным способом на смартфон и размещаю в каталоге /storage/emulated/0/oclient/
Запускаю на Honor 9X
приложение OpenVPN
(сейчас у меня версия: 3.3.4 (9290)) - Upload File
, нажимаю BROWSE
, перехожу в каталог oclient
и выбираю client.ovpn
вижу запрос "Do you want to import .ovpn profile from client.ovpn?"
на импорт .ovpn profile
, нажимаю OK
после нажимаю Connect
и вижу все также пытающееся соединение
но ПО крайней мере сейчас профиль подключения правильно импортирован и жалоб на него нет, жаль я не записал себе какая тогда версия OpenVPN
была на смартфоне.
Шаг №3:
Проверил какая версия на сервере куда я подключаюсь:
root@ekzorchik:~# dpkg -l | grep openvpn ii openvpn 2.4.4-2ubuntu1.3 amd64 virtual private network daemon root@ekzorchik:~# root@ekzorchik:~# uname -a && lsb_release -a Linux ekzorchik.ru 4.15.0-65-generic #74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic root@ekzorchik:~#
Шаг №4:
Смотрю на сервере srv-vpn
что по логам в момент подключения:
root@ekzorchik:~# tail -f /var/log/openvpn/openvpn.log Tue Sep 12 21:02:48 2023 us=716394 176.59.43.56:59598 VERIFY OK: depth=0, C=RU, ST=RU, L=MOSCOW, O=RUSSIAN, OU=ekzorchik, CN=honor, name=EasyRSA, emailAddress=support@ekzorchik.ru Tue Sep 12 21:02:48 2023 us=804110 176.59.43.56:59598 [honor] Peer Connection Initiated with [AF_INET]176.59.43.56:59598 Tue Sep 12 21:02:48 2023 us=804249 honor/176.59.43.56:59598 MULTI_sva: pool returned IPv4=10.8.0.10, IPv6=(Not enabled) Tue Sep 12 21:02:48 2023 us=804352 honor/176.59.43.56:59598 MULTI: Learn: 10.8.0.10 -> honor/176.59.43.56:59598 Tue Sep 12 21:02:48 2023 us=804392 honor/176.59.43.56:59598 MULTI: primary virtual IP for honor/176.59.43.56:59598: 10.8.0.10 Tue Sep 12 21:02:48 2023 us=804465 honor/176.59.43.56:59598 PUSH: Received control message: 'PUSH_REQUEST' Tue Sep 12 21:02:48 2023 us=804557 honor/176.59.43.56:59598 SENT CONTROL [honor]: 'PUSH_REPLY,route 172.33.33.0 255.255.255.0,route 172.35.35.0 255.255.255.0,redirect-gateway def1,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9,peer-id 0,cipher AES-256-GCM' (status=1) Tue Sep 12 21:02:48 2023 us=804666 honor/176.59.43.56:59598 Data Channel: using negotiated cipher 'AES-256-GCM' Tue Sep 12 21:02:48 2023 us=804762 honor/176.59.43.56:59598 Data Channel MTU parms [ L:1551 D:1450 EF:51 EB:406 ET:0 EL:3 ] Tue Sep 12 21:02:48 2023 us=804928 honor/176.59.43.56:59598 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Tue Sep 12 21:02:48 2023 us=805006 honor/176.59.43.56:59598 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Tue Sep 12 21:02:49 2023 us=24421 honor/176.59.43.56:59598 MULTI: bad source address from client [10.172.247.255], packet dropped Tue Sep 12 21:02:49 2023 us=35005 honor/176.59.43.56:59598 MULTI: bad source address from client [10.172.247.255], packet dropped Tue Sep 12 21:02:49 2023 us=35191
вот этот вот адрес 10.172.247.255
у меня на Honor 9X: Настройки - О телефоне - Общая информация - IP-адрес
Если на смартфоне открыть браузер и обратиться к сайту 2ip.ru
– показывает 176.59.43.56
адрес на телефоне через ТЕЛЕ2
Почему внутренний адрес TELE2
фигурирует при подключении к OpenVPN
, раньше ведь такого не было.
Пока для меня данный лог ничего не значит, анализирую.
Шаг №5:
Предположил, что дело в сертификате для подключения через смартфон:
Сертификат я делал на 10
лет
root@ekzorchik:/etc/openvpn/client/honor# openssl x509 -in honor.crt -dates -noout notBefore=Mar 12 13:23:36 2020 GMT notAfter=Mar 10 13:23:36 2030 GMT root@ekzorchik:/etc/openvpn/client/honor#
так что не в этом дело.
Шаг №6:
Удалил профиль на телефоне:
а если в этот момент смотреть логи на сервере, то
Wed Sep 13 08:08:38 2023 us=9517 TCP connection established with [AF_INET]176.59.43.213:56218 Wed Sep 13 08:08:38 2023 us=9668 TCPv4_SERVER link local: (not bound) Wed Sep 13 08:08:38 2023 us=9803 TCPv4_SERVER link remote: [AF_INET]176.59.43.213:56218 Wed Sep 13 08:08:38 2023 us=14143 176.59.43.213:56218 TLS: Initial packet from [AF_INET]176.59.43.213:56218, sid=ba0d9584 5bc61d73 Wed Sep 13 08:08:38 2023 us=142870 176.59.43.213:56218 VERIFY OK: depth=1, C=RU, ST=RU, L=MOSCOW, O=RUSSIAN, OU=ekzorchik, CN=RUSSIAN CA, name=EasyRSA, emailAddress=support@ekzorchik.ru Wed Sep 13 08:08:38 2023 us=143362 176.59.43.213:56218 VERIFY OK: depth=0, C=RU, ST=RU, L=MOSCOW, O=RUSSIAN, OU=ekzorchik, CN=honor, name=EasyRSA, emailAddress=support@ekzorchik.ru Wed Sep 13 08:08:38 2023 us=143753 176.59.43.213:56218 peer info: IV_VER=3.git::081bfebe:RelWithDebInfo Wed Sep 13 08:08:38 2023 us=143899 176.59.43.213:56218 peer info: IV_PLAT=android Wed Sep 13 08:08:38 2023 us=144030 176.59.43.213:56218 peer info: IV_NCP=2 Wed Sep 13 08:08:38 2023 us=144158 176.59.43.213:56218 peer info: IV_TCPNL=1 Wed Sep 13 08:08:38 2023 us=144284 176.59.43.213:56218 peer info: IV_PROTO=30 Wed Sep 13 08:08:38 2023 us=144408 176.59.43.213:56218 peer info: IV_CIPHERS=AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:BF-CBC Wed Sep 13 08:08:38 2023 us=144533 176.59.43.213:56218 peer info: IV_AUTO_SESS=1 Wed Sep 13 08:08:38 2023 us=144655 176.59.43.213:56218 peer info: IV_GUI_VER=net.openvpn.connect.android_3.3.4-9290 Wed Sep 13 08:08:38 2023 us=144779 176.59.43.213:56218 peer info: IV_SSO=webauth,openurl,crtext Wed Sep 13 08:08:38 2023 us=144879 176.59.43.213:56218 peer info: IV_BS64DL=1 Wed Sep 13 08:08:38 2023 us=144989 176.59.43.213:56218 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1559', remote='link-mtu 1543' Wed Sep 13 08:08:38 2023 us=145087 176.59.43.213:56218 WARNING: 'cipher' is used inconsistently, local='cipher AES-128-CBC', remote='cipher BF-CBC' Wed Sep 13 08:08:38 2023 us=232736 176.59.43.213:56218 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA Wed Sep 13 08:08:38 2023 us=233183 176.59.43.213:56218 [honor] Peer Connection Initiated with [AF_INET]176.59.43.213:56218 Wed Sep 13 08:08:38 2023 us=233379 honor/176.59.43.213:56218 MULTI_sva: pool returned IPv4=10.8.0.14, IPv6=(Not enabled) Wed Sep 13 08:08:38 2023 us=233557 honor/176.59.43.213:56218 MULTI: Learn: 10.8.0.14 -> honor/176.59.43.213:56218 Wed Sep 13 08:08:38 2023 us=233679 honor/176.59.43.213:56218 MULTI: primary virtual IP for honor/176.59.43.213:56218: 10.8.0.14 Wed Sep 13 08:08:38 2023 us=233839 honor/176.59.43.213:56218 PUSH: Received control message: 'PUSH_REQUEST' Wed Sep 13 08:08:38 2023 us=234115 honor/176.59.43.213:56218 SENT CONTROL [honor]: 'PUSH_REPLY,route 172.33.33.0 255.255.255.0,route 172.35.35.0 255.255.255.0,redirect-gateway def1,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.14 10.8.0.13,peer-id 0,cipher AES-256-GCM' (status=1) Wed Sep 13 08:08:38 2023 us=234343 honor/176.59.43.213:56218 Data Channel: using negotiated cipher 'AES-256-GCM' Wed Sep 13 08:08:38 2023 us=234487 honor/176.59.43.213:56218 Data Channel MTU parms [ L:1551 D:1450 EF:51 EB:406 ET:0 EL:3 ] Wed Sep 13 08:08:38 2023 us=234691 honor/176.59.43.213:56218 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Wed Sep 13 08:08:38 2023 us=234829 honor/176.59.43.213:56218 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Wed Sep 13 08:08:38 2023 us=514526 honor/176.59.43.213:56218 MULTI: bad source address from client [10.172.247.255], packet dropped
уже чуть больше информации.
Шаг №7:
Решил, что для большей информативности, чтобы адрес VPN
сети на смартфоне не менялся, сделать статический адрес клиентам OpenVPN:
root@ekzorchik:~# nano /etc/openvpn/server.conf client-to-client ifconfig-pool-persist /etc/openvpn/ipp.txt
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора)
root@ekzorchik:~# nano /etc/openvpn/ipp.txt mikrotik,10.8.0.6 honor,10.8.0.10
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора)
На заметку:
client-to-client - разрешаем клиентам видеть друг-друга в сети
ifconfig-pool-persist ipp.txt - наличие этой строки указывает, что перед тем как выдать клиенту свободный адрес из пула, сервер должен свериться с файлом ipp.txt, в котором прописывается привязка имени пользователя к ip-адресу.
после сохраняем внесенные изменения и перезапускаем OpenVPN
сервис:
root@ekzorchik:~# systemctl stop openvpn@server && systemctl start openvpn@server && systemctl status openvpn@server | head -n5 && netstat -tulpn | grep openvpn● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; indirect; vendor preset: enabled) Active: active (running) since Wed 2023-09-13 09:14:18 MSK; 16ms ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 8635/openvpn root@ekzorchik:~#
Смотрю логи и ничего еще пока не понятно.
Шаг №8:
Попробовал Создал новый сертификат honor9xa
для нового клиента, создал новый профиль ovpn
и все равно все то же самое включается/выключается подключение и логи те же самые:
вот только текущее подключение с Mikrotik
к OpenVPN
серверу работает.
значит дело не в настройках OpenVPN
сервера, а проблема кроется в настройках приложения OpenVPN
на смартфоне.
Шаг №9:
ИТОГО НАШЕЛ РЕШЕНИЕ:
(Дело было в расширенных настройках OpenVPN
клиента на смартфоне)
root@ekzorchik:~# nano /etc/openvpn/server.conf port 1194 proto tcp dev tun0 #duplicate-cn ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh2048.pem #for openvpn network server 10.8.0.0 255.255.255.0 #Access from 10.8.0.0/24 k Resource from 172.33.33.0 push "route 172.33.33.0 255.255.255.0" #Access from 10.8.0.0/24 k Resource from 172.35.35.0 push "route 172.35.35.0 255.255.255.0" push "redirect-gateway def1" #Gateway k network client route 172.33.33.0 255.255.255.0 10.8.0.1 route 172.35.35.0 255.255.255.0 10.8.0.1 #route 192.168.0.0 255.255.255.0 10.8.0.1 #Назначаем IP адрес клиентам явно ifconfig-pool-persist /etc/openvpn/ipp.txt #укажем путь к настройке сетей клиентов client-config-dir /etc/openvpn/ccd client-to-client #push "dhcp-option DNS 8.8.8.8" #push "dhcp-option DNS 8.8.4.4" keepalive 10 120 cipher AES-128-CBC auth SHA1 user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 4 #explicit-exit-notify 1 #tls-auth ta.key 0 # This file is secret #crl-verify /etc/openvpn/crl.pem tcp-queue-limit 64 root@ekzorchik:~# nano /etc/openvpn/ipp.txt mikrotik,10.8.0.6 honor9xa,10.8.0.10 root@ekzorchik:~# systemctl stop openvpn@server && systemctl start openvpn@server && systemctl status openvpn@server | head -n5 && netstat -tulpn | grep openvpn● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; indirect; vendor preset: enabled) Active: active (running) since Wed 2023-09-13 10:52:05 MSK; 23ms ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 9082/openvpn root@ekzorchik:~#
На заметку: Когда OpenVPN
сервер запущен, содержимое ipp.txt
при открытии пустое, значения сервер подгрузил себе.
Настройки honor9xa.ovpn
client remote vpn.ekzorchik.ru 1194 dev tun0 proto tcp <ca> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- </key> route 10.8.0.0 255.255.255.0 pull
На смартфоне в приложении OpenVPN
— переходим в Settings -
VPN Protocol: TCP
Connection Timeout: 1 MIN
Shortcut Minimize: Отмечено галочкой
Captive Portal Detection: Отмечено галочкой
Confirmation Dialogs: on reconnect
Theme: Light
перехожу в Advanced Settings
- было
Minimum TLS Version (Profile default)
изменил на Minimum TLS Version (TLS 1.1)
Allow Compression (insecure): No
DNS Fallback: Отмечено галочкой
и после подключение было успешно установлено, а то в логах клиент Android
посылал 'AES-256-GCM'
вместо AES-128-CBC
root@ekzorchik:~# ping 10.8.0.10 PING 10.8.0.10 (10.8.0.10) 56(84) bytes of data. 64 bytes from 10.8.0.10: icmp_seq=1 ttl=64 time=122 ms 64 bytes from 10.8.0.10: icmp_seq=2 ttl=64 time=115 ms ^C --- 10.8.0.10 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 115.842/119.381/122.921/3.556 ms root@ekzorchik:~#
Затем запускаю приложение DMSS
и успешно подключаюсь к домашнем видеорегистратору и вижу видеопоток, что мне и требовалось.
Если честно интересный опыт я приобрел.
На заметку: Клиент Android
все также пытается посылать свой внутренний адрес, в логах есть записи, на этот счет пока не беспокоюсь:
MULTI: bad source address from client [10.113.167.61], packet dropped
от 15.12.2023
Data Channel: using negotiated cipher 'AES-256-GCM'
телефон посылает AES-256-GCM
, а я использую AES-128-CBC
опять такая же ситуация, только теперь у меня OpenVPN
сервер на Ubuntu 22.04 Server
, и изменение TLS
на Android
в приложении OpenVPN
такой же версии как выше результата не дает, все равно клиент на Android
посылает cipher 'AES-256-GCM'.
Переделал по-другому в таком случае, я явно в ovpn
файле для моего подключения с Honor 9X
указал:
client remote vpn.ekzorchik.ru 1194 dev tun0 proto tcp <ca> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- </key> route 10.9.0.0 255.255.255.0 cipher AES-128-CBC pull
и после подключение Honor 9X Anroid + OpenVPN (Current Version: 3.3.4 (9290))
успешно осуществилось.
от 02.02.2024
Honor 9X
опять повторение ситуации описанной выше, когда моргает подключение ovpn
почему-то сегодня 02.02.2024
перестал работать на смартфоне Honor 9X ovpn
файл со следующим содержанием
client remote vpn.ekzorchik.ru 1194 dev tun0 proto tcp <ca> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- </key> route 10.9.0.0 255.255.255.0 cipher AES-128-CBC pull
а вчера работал и до этого
в приложении появилось что я могу обновиться до версии: 3.4.0 (9755)
, обновился
и после успешно подключился с конфигурационным файлом выше.
обратил внимание, что в приложении OpenVPN - Profiles - Settings - Advanced Settings
— раздел (Security Level)
теперь по умолчанию у меня выставлено Legacy:
где как раз используется алгоритм AES-CBC
This allows all currently acceptable cryptographic algorithms that adhere to current security standards. It allows some older (but still secure) algorithms that are still in widespread use to ensure compatibility with a wide range of servers:
Compression allowed (downlink)
AES-CBC algorythms allowed
Minimum TLS Version 1.2
Allow Unused Address Families: No
DNS Fallback: No
Итого после обновления на новую последнюю на текущий момент, т.е. 02.02.2024
с конфигурационным файлом ovpn
подключение к OpenVPN
серверу сразу же заработало, т.е. просто обновил пакет OpenVPN
на Honor 9X.
Вопрос что это было.
Но главное я зафиксировал этот момент и дополняю свою заметку.
Итого заметка работоспособна, с уважением автор блога Олло Александр aka ekzorchik.