Установка и подключение к OpenVPN на Linux

1. Подготовка к установке OpenVPN-клиента на Linux
2. Установка OpenVPN-клиента без поддержки эллиптической криптографии (ECC)
3. Установка OpenVPN-клиента с поддержкой эллиптической криптографии (ECC)
3.1. Установка OpenSSL
3.2. Установка Mbed TLS
3.3. Установка OpenVPN
4. Импорт конфигураций OpenVPN в клиент на Linux
5. Подключение к OpenVPN на Linux
Все действия описанные ниже производятся только в терминале (консоли) Linux.
Команды начинающиеся с приглашения # выполняются от root-пользователя, приглашение $ означает выполнение от обычного пользователя.
Для получения root-прав воспользуйтесь командами sudo или su. Например, в десктопных Debian-based дистрибутивах (Ubuntu, Linux Mint и т.д.) для входа под root введите sudo su. В RedHat-based дистрибутивах (RHEL, Fedora, CentOS и т.д.), а также серверных версиях ветки Debian используйте команду su.

1. Предварительная подготовка

Перед началом установки следует устранить все зависимости необходимых для корректной установки OpenSSL и OpenVPN-клиента. Для этого в Debian-based Linux (Ubuntu, Debian, Linux Mint и т.д.) воспользуйтесь следующими командами.
$ sudo apt-get update
$ sudo apt-get install make gcc g++ liblzo2-dev libpam0g-dev curl
В Linux на основе RedHat (RHEL, CentOS, Fedora и т.д.) устранение зависимостей производится иначе.
# dnf install lzo lzo-devel pam-devel gcc gcc-c++ libcurl curl perl
Конфигурации RSA это файлы конфигурации OpenVPN с префиксом "RSA" в названии файла. Конфигурации ECC (Elliptic Curve Cryptography) это файлы конфигурации OpenVPN с префиксом "ECC" в названии файла. Например: SingleRSA_RU1.ovpn - RSA-конфиг, DoubleECC_GB2_US2.ovpn - ECC-конфиг.

2. Установка OpenVPN-клиента без поддержки ECC

OpenVPN-клиент без поддержки ECC совместим только с RSA-конфигурациями DeepWebVPN. Если необходим OpenVPN-клиент поддерживающий как RSA, так и ECC-конфигурации DeepWebVPN, пропустите этот шаг и перейдите к шагу Установка OpenVPN-клиента с поддержкой эллиптической криптографии.
Для установки OpenVPN-клиента без поддержки эллиптической криптографии (ECC) достаточно установить пакет openvpn из репозиториев. В Debian-based Linux воспользуйтесь следующей командой.
$ sudo apt-get install openvpn
В RedHat-based Linux команда выглядит по-другому.
# dnf install openvpn

3. Установка OpenVPN-клиента с поддержкой ECC

Приведенные ниже инструкции были опробованны на ОС Debian 11 x64 (Debian-based) и ОС Fedora 37 x64 (RedHat-based). DeepWebVPN не может гарантировать корректность выполнения этой инструкции на других версиях и дистрибутивах Linux.
Перед установкой OpenVPN-клиента с поддержкой эллиптической криптографии также, как и перед установкой из репозитариев, следует устранить зависимости.

3.1. Установка OpenSSL

Чтобы в завершающей стадии установки OpenSSL убедиться в корректности установки из тарбола, запомните текущую версию OpenSSL.
# openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
Далее необходимо скачать исходный код OpenSSL с сайта DeepWebVPN.
В примере ниже рассматриваться будет архив с исходником openssl-3.0.7.tar.gz, при этом стоит понимать, что к моменту вашей установки на официальном сайте OpenSSL может быть доступна версия новее.
Скачать, распаковать и зайти в директорию распакованного тарбола можно используя следующие команды.
$ wget https://data.dwv.one/client/openvpn-linux-ecc/x64/openssl-3.0.7.tar.gz
$ tar -zxvf openssl-3.0.7.tar.gz
$ cd openssl-3.0.7
Теперь, находясь в директории куда был извлечен архив, следует установить OpenSSL.
$ chmod a+x config
# ./Configure && make && make install
# ldconfig /usr/local/lib64/
Версия библиотеки должна измениться.
# openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)

3.2. Установка Mbed TLS

Прежде всего следует скачать с сайта DeepWebVPN архив с версией Mbed TLS, которая поддерживает ECC и совместима с OpenVPN. Загрузить, распаковать, зайти в директорию распакованного архива и установить Mbed TLS можно используя следующие команды.
$ wget https://data.dwv.one/client/openvpn-linux-ecc/x64/mbedtls-2.28.0.tar.gz
$ tar -zxvf mbedtls-2.28.0.tar.gz
# cd mbedtls-2.28.0 && make && make install

3.3. Установка OpenVPN

В примере ниже рассматриваться будет архив с исходником openvpn-2.5.8.tar.gz, при этом стоит понимать, что к моменту вашей установки на официальном сайте OpenVPN может быть доступна версия новее.
Запомните предустановленную версию OpenVPN-клиента, если таковая была установлена. Насколько бы последний номер версии предустановленный клиент не имел, он все равно не будет совместим с эллиптической криптографией, поскольку был скомпилирован на основе предустановленной библиотеки OpenSSL.
$ openvpn --version
OpenVPN 2.3.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Aug 4 2015
library versions: OpenSSL 1.0.1k-fips 8 Jan 2015, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_pthread=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
Убедившись, что OpenVPN-клиент основан на неподходящей библиотеки OpenSSL или отсутствует вовсе, следует скачать с сайта DeepWebVPN архив исходного кода клиента, после чего распаковать его, зайти в директорию исходника и установить.
$ wget https://data.dwv.one/client/openvpn-linux-ecc/x64/openvpn-2.5.8.tar.gz
$ tar -zxvf openvpn-2.5.8.tar.gz
# cd openvpn-2.5.8 && ./configure --with-crypto-library=mbedtls && make && make install
На последнем шаге убедитесь, что OpenVPN-клиент установлен корректно.
$ openvpn --version
OpenVPN 2.5.8 x86_64-pc-linux-gnu [SSL (mbed TLS)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Dec 19 2022
library versions: mbed TLS 2.28.0, LZO 2.10
Originally developed by James Yonan
Copyright (C) 2002-2022 OpenVPN Inc <sales@openvpn.net>
Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_iproute2=no enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_management=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_werror=no enable_win32_dll=yes enable_x509_alt_username=no with_aix_soname=aix with_crypto_library=mbedtls with_gnu_ld=yes with_mem_check=no with_openssl_engine=auto with_sysroot=no

4. Импорт конфигураций OpenVPN в клиент на Linux

Убедитесь, что в ОС существует директория /etc/openvpn, если таковая отсутствует создайте ее командой ниже.
# mkdir /etc/openvpn
После следует скачать и распаковать архив с OpenVPN-конфигами в /etc/openvpn и переместить конфиги из папок single и double в /etc/openvpn.
# unzip all.zip -d /etc/openvpn && cp single/* /etc/openvpn/ && cp double/* /etc/openvpn/
Не обязательно скачивать архив со всеми конфигурациями OpenVPN, возможно также выбрать и скачать конкретные конфиги (Single-цепи и Double-цепи).
Убедитесь, что конфигурационные файлы имеются в нужной директории.
# ls /etc/openvpn
all.zip DoubleECC_GB1_FR1.ovpn DoubleRSA_FR1_GB1.ovpn SingleECC_DE1.ovpn SingleECC_NL1.ovpn SingleRSA_FR1.ovpn SingleRSA_RU2.ovpn
DoubleECC_DE1_NL1.ovpn DoubleECC_NL1_DE1.ovpn DoubleRSA_GB1_FR1.ovpn SingleECC_FR1.ovpn SingleECC_RU2.ovpn SingleRSA_GB1.ovpn
DoubleECC_FR1_GB1.ovpn DoubleRSA_DE1_NL1.ovpn DoubleRSA_NL1_DE1.ovpn SingleECC_GB1.ovpn SingleRSA_DE1.ovpn SingleRSA_NL1.ovpn
...

5. Подключение

Подключение к OpenVPN-цепи ВСЕГДА необходимо производить из под root-пользователя.
Для подключения к выбранной цепи достаточно задать OpenVPN-клиенту в качестве аргумента путь до конфигурационного файла VPN-цепи. В процессе подключения OpenVPN-клиент попросит ввести имя пользователя и пароль.
Имя пользователя и пароль полностью совпадают с именем пользователя и паролем от Кабинета DeepWebVPN.
Например, для подключения к цепи SingleRSA_DE1 процедура подключения будет иметь следующий вид.
# openvpn /etc/openvpn/SingleRSA_DE1.ovpn
Mon Jan 8 01:29:25 2018 OpenVPN 2.3.14 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec 7 2016
Mon Jan 8 01:29:25 2018 library versions: OpenSSL 1.0.2k-fips 26 Jan 2017, LZO 2.08
Enter Auth Username: ********
Enter Auth Password: ********
Mon Jan 8 01:29:32 2018 Control Channel Authentication: tls-auth using INLINE static key file
Mon Jan 8 01:29:32 2018 Outgoing Control Channel Authentication: Using 512 bit message hash 'SHA512' for HMAC authentication
Mon Jan 8 01:29:32 2018 Incoming Control Channel Authentication: Using 512 bit message hash 'SHA512' for HMAC authentication
Mon Jan 8 01:29:32 2018 Socket Buffers: R=[87380->87380] S=[16384->16384]
Mon Jan 8 01:29:47 2018 Attempting to establish TCP connection with [AF_INET]104.238.177.127:255 [nonblock]
Mon Jan 8 01:29:48 2018 TCP connection established with [AF_INET]104.238.177.127:255
Mon Jan 8 01:29:48 2018 TCPv4_CLIENT link local: [undef]
Mon Jan 8 01:29:48 2018 TCPv4_CLIENT link remote: [AF_INET]104.238.177.127:255
Mon Jan 8 01:29:48 2018 TLS: Initial packet from [AF_INET]104.238.177.127:255, sid=445a6902 d3ec551d
Mon Jan 8 01:29:48 2018 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Mon Jan 8 01:29:49 2018 VERIFY OK: depth=1, CN=de1-rsa
Mon Jan 8 01:29:49 2018 Validating certificate key usage
Mon Jan 8 01:29:49 2018 ++ Certificate has key usage 00a0, expects 00a0
Mon Jan 8 01:29:49 2018 VERIFY KU OK
Mon Jan 8 01:29:49 2018 Validating certificate extended key usage
Mon Jan 8 01:29:49 2018 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Mon Jan 8 01:29:49 2018 VERIFY EKU OK
Mon Jan 8 01:29:49 2018 VERIFY OK: depth=0, CN=de1-ecc-server
Mon Jan 8 01:29:59 2018 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Mon Jan 8 01:29:59 2018 Data Channel Encrypt: Using 512 bit message hash 'SHA512' for HMAC authentication
Mon Jan 8 01:29:59 2018 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Mon Jan 8 01:29:59 2018 Data Channel Decrypt: Using 512 bit message hash 'SHA512' for HMAC authentication
Mon Jan 8 01:29:59 2018 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-ECDSA-AES256-GCM-SHA384
Mon Jan 8 01:29:59 2018 [de1-rsa-server] Peer Connection Initiated with [AF_INET]104.238.177.127:255
Mon Jan 8 01:30:01 2018 SENT CONTROL [de1-rsa-server]: 'PUSH_REQUEST' (status=1)
Mon Jan 8 01:30:02 2018 PUSH: Received control message: 'PUSH_REPLY,dhcp-option DNS 10.101.0.1,redirect-gateway def1,route-gateway 10.111.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.111.0.2 255.255.255.0,peer-id 0'
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: timers and/or timeouts modified
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: --ifconfig/up options modified
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: route options modified
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: route-related options modified
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: peer-id set
Mon Jan 8 01:30:02 2018 OPTIONS IMPORT: adjusting link_mtu to 1607
Mon Jan 8 01:30:02 2018 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 IFACE=wlp3s0 HWADDR=44:6d:57:b7:8e:7e
Mon Jan 8 01:30:02 2018 TUN/TAP device tun0 opened
Mon Jan 8 01:30:02 2018 TUN/TAP TX queue length set to 100
Mon Jan 8 01:30:02 2018 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Mon Jan 8 01:30:02 2018 /usr/sbin/ip link set dev tun0 up mtu 1500
Mon Jan 8 01:30:02 2018 /usr/sbin/ip addr add dev tun0 10.111.0.2/24 broadcast 10.111.0.255
Mon Jan 8 01:30:02 2018 /usr/sbin/ip route add 104.238.177.127/32 via 192.168.0.1
Mon Jan 8 01:30:02 2018 /usr/sbin/ip route add 0.0.0.0/1 via 10.111.0.1
Mon Jan 8 01:30:02 2018 /usr/sbin/ip route add 128.0.0.0/1 via 10.111.0.1
Mon Jan 8 01:30:02 2018 Initialization Sequence Completed
Если, несмотря на успешное подключение, сайты в браузере не открываются и интернет, в целом (за исключением адресации по IP-адресу), не работает, то в большинстве случаев проблема решается настройкой DNS.
Для отключения от VPN-цепи следует нажать комбинацию Ctrl+C в окне терминала с OpenVPN-соединением.