Позавчера столкнулся с непонятным фактом, дело в том, что у меня на моем смартфоне 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

Пробую импортировать профиль ovpn тот что был у меня ранее - и получаю Failed to import profile

мой конфиг 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

Импортирую составленный профиль ovpn сделанный по-другому

после нажимаю 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-адрес

вот этот вот адрес 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

Подключение со смарфтона Honor 9X через OpenVPN успешно установлено и не моргает

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.