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



1. Подготовка к установке OpenVPN-клиента на Linux
2. Установка OpenVPN-клиента без поддержки эллиптической криптографии (ECC)
3. Установка OpenVPN-клиента с поддержкой эллиптической криптографии (ECC)
3.1. Установка OpenSSL
3.2. Установка 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 gcc "autoconf*" "libtool*" "snappy*" "openssl-dev*" "lzo*" "libreadline-gplv2*" git libpam0g-dev

В Linux на основе RedHat (RHEL, CentOS, Fedora и т.д.) устранение зависимостей производится иначе.
# yum install gcc* autoconf* libtool* snappy* openssl-dev* lzo* libpam* pam-devel* -y

Конфигурации 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 команда выглядит по-другому.
# yum install openvpn


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


Перед установкой OpenVPN-клиента с поддержкой эллиптической криптографии также, как и перед установкой из репозитариев, следует устранить зависимости.

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


Чтобы в завершающей стадии установки OpenSSL убедиться в корректности установки из тарбола, запомните текущую версию OpenSSL.
# openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015

Далее необходимо скачать последний исходник OpenSSL с официального сайта.
В примере ниже рассматриваться будет архив с исходником openssl-1.0.1p.tar.gz, при этом стоит понимать, что эта версия OpenSSL может быть уже устаревшей к моменту вашей установки.

Скачать, распаковать и зайти в директорию распакованного тарбола можно используя следующие команды.
$ wget https://www.openssl.org/source/openssl-1.0.1p.tar.gz
$ tar -xvzf openssl-1.0.1p.tar.gz
$ cd openssl-1.0.1p

Теперь, находясь в директории куда был извлечен архив, следует выполнить следующее.
$ ./config --prefix=/usr --openssldir=/usr/ssl
$ make
$ make test
# make install
$ ./config shared --prefix=/usr --openssldir=/usr/ssl
$ make clean
$ make
# make install

Версия OpenSSL должна измениться.
# openssl version
OpenSSL 1.0.1p 9 Jul 2015


3.2. Установка 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. <[email protected]>
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 или отсутствует вовсе, следует скачать последнюю версию исходного кода клиента, после чего зайти в директории исходника.
$ git clone https://github.com/OpenVPN/openvpn.git
$ cd openvpn

Находясь в директории с исходным кодом, необходимо выполнить следующее.
$ autoreconf -i -v -f
$ ./configure
$ make
# make install

На последнем шаге убедитесь, что OpenVPN-клиент обновлен/установлен корректно.
$ openvpn --version
OpenVPN 2.3_git [git:master/7546cba4761b24f2] x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH] [IPv6] built on Nov 17 2015
library versions: OpenSSL 1.0.1p 9 Jul 2015, LZO 2.08


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


Убедитесь, что в ОС существует директория /etc/openvpn, если таковая отсутствует создайте ее командой ниже.
# mkdir /etc/openvpn

После следует скачать и распаковать архив с OpenVPN-конфигами в /etc/openvpn.
# wget https://cabinet.deepwebvpn.net/downloads/openvpn/all.zip
# unzip all.zip -d /etc/openvpn

Не обязательно скачивать архив со всеми конфигурациями OpenVPN, возможно также выбрать и скачать конкретные конфиги (Single-цепи и Double-цепи).

Чтобы скачать конфиги через Tor используйте torsocks.
# torsocks wget http://deepwebvpnvvotmw.onion/downloads/openvpn/all.zip

Для установки torsocks в Debian-based Linux (Debian, Ubuntu, Linux Mint и т.д.) используйте следующую команду.
# apt-get install torsocks
В RedHat-based Linux (RHEL, Fedora, CentOS и т.д.) команда выглядит иначе.
# yum install torsocks

Убедитесь, что конфигурационные файлы имеются в нужной директории.
# 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-соединением.