OpenVPN Debian install + configuring Linux, Android, iOs, MacOs client

OpenVPN Debian install + configuring Linux, Android, iOs, MacOs client

OpenVPN Debian install + configuring Linux, Android, iOs, MacOs client

Мы решили написать довольно объемный туториал по очень важной, объемной и самое главное в современных условиях – важный туториал. Мы напишем не только о том, как грамотно сконфигурировать VPN сервер под управлением ОС Debian Linux, но и не менее важной теме – конфигурирования клиентов под ОС Linux, Android, iOs, MacOS и Windows. Этакая мультиплатформенная статья:-)

Оглавление

  1. Установка OpenVPN в debian Linux
  2. Установка и конфигурирование клиента в MacOS
  3. Установка и конфигурирование клиента в Linux
  4. Установка и конфигурирование клиента в Windows
  5. Установка и конфигурирование клиента в Android
  6. Установка и конфигурирование клиента в iOs
  1. Установка OpenVPN в debian Linux

Почему мы выбрали вариацию OpenVPN? Никаких секретов нет – простота, доступность, мультиплатформенность и конечно же открытость исходных кодов. OpenVPN это TLS/SSL VPN архитектура. Если мы собираемся использовать нами сгенерированный ключ/сертификат, необходимо установить пакет EasyRSA. Причем желательно именно последнюю версию. EasyRSA – это будет наш простой центр доверенных сертификатов. В оффициальной документации настоятельно рекомендуется устанавливать пакеты OpenVPN и EasyRSA на разные серверы. Если будет успешная атака на сервер с VPN сервисом, атакующий сможет получить доступ к приватному ключу и следовательно иметь возможность перехватить весь Ваш трафик. Так как мы делаем все скорее в целях ознакомления, ничто Вам не помешает заменить localhost в конфигах на ip Вашего EASYRSA сервера.

Установка OpenVPN и EasyRSA


Для начала необходимо обновить систему пакетов apt и дальше устанавливаем самую свежую версию OpenVPN.

sudo apt update

apt install openvpn

 

Установка EasyRSA тоже не представляет каких либо сложностей.

wget -c https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

tar xvf EasyRSA-3.0.8.tgz

 

На этом установка закончена EasyRSA. Теперь самое время занять конфигами.

cd ~/EasyRSA3.0.8/

cp vars.example vars

vim vars

 

Хотя лично я привык пользоваться редактором mc. Дело принципа. Ищем следующие закомментированные строки

#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"

 

Меняем на наши значения. В моем случае получилось это:

set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "Illinois"
set_var EASYRSA_REQ_CITY "Chicago"
set_var EASYRSA_REQ_ORG "FutureApp"
set_var EASYRSA_REQ_EMAIL "vpnapp@it-notepad.com"
set_var EASYRSA_REQ_OU "It-notepad"

 

Выполняем иницилизацию:

./easyrsa init-pki

 

Получим следующий вывод:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /src/EasyRSA-3.0.8/pki

 

Раз просят(см.выше) – значит генерируем наш корневой сертификат.

./easyrsa build-ca nopass

Enter

 

OpenVPN Debian install + configuring Linux, Android, iOs, MacOs client

Что же в итоге мы получили?

ca.crt  – публичный корневой сертификат нашего центра аутентификации. Нашему OpenVPN серверу он понадобится.

ca.key  – приватный ключ корневого сертификата. В отличии от утери публичного ключа, потеря приватного ключа сотрет все наши попытки построить защищенный туннель.

./easyrsa gen-crl

 

Создание серверного сертификата и ключа

./easyrsa gen-req server nopass
sudo cp ~/EasyRSA-3.0.8/pki/private/server.key /etc/openvpn/
sudo cp ~/EasyRSA-3.0.8/pki/ca.crt /etc/openvpn/
./easyrsa sign-req server server
sudo cp ~/src/EasyRSA-3.0.8/pki/issued/server.crt /etc/openvpn/
./easyrsa gen-dh
sudo openvpn --genkey --secret ta.key
cp /src/EasyRSA-3.0.8/ta.key /etc/openvpn
cp /src/EasyRSA-3.0.8/pki/dh.pem /etc/openvpn/

 

Много команд. Что же все это значит? Сначала gen-req server nopass – генерируем наш основной сертификат. И конечно копируем сгенерированные сертификаты в конфиг папку OpenVPN – /etc/openvpn/. Далее генерируем файлы ta.key и dh.pem. Последний – это ключ Диффи – Хельмана, используется он при обмене ключами. Кстати его генерация может занять продолжительное время для старых машин(серверов). ta.key – подпись HMAC. Нужна она для усиления шифрования TLS. Хотя и так при 512 битном шифровании, ваш трафик расшифровать под силу только сверхдержавам с предельно высокими вычислительными нагрузками.

Создание клиентских сертификатов

mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs

 

Создадим папку для нашего клиентского сертификата. И сгенерируем наш клиентский сертификат. Ниже я привел вывод своего сервера.

cd /src/EasyRSA-3.0.8/

./easyrsa gen-req client1 nopass

Note: using Easy-RSA configuration from: /src/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1g 21 Apr 2020
Generating a RSA private key
......+++++
....................+++++
writing new private key to '/src/EasyRSA-3.0.8/pki/easy-rsa-25118.yHrzMN/tmp.r9cxzB'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client1]:

Keypair and certificate request completed. Your files are:
req: /src/EasyRSA-3.0.8/pki/reqs/client1.req
key: /src/EasyRSA-3.0.8/pki/private/client1.key

 

./easyrsa sign-req client client1

cp pki/private/client1.key ~/client-configs/keys/

 

И скопируем наш сгенерированный ключ в папку с ключами.

конфигурирование OpenVPN сервера

Настало время сконфигурировать наш OpenVPN сервер.

sudo nano /etc/openvpn/server.conf

 

port 1194
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
cipher AES-256-CBC
user nobody
#dhcp test
push "dhcp-option DNS 8.8.8.8"
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
log-append /var/log/openvpn/openvpn.log

 

Нас интересует на самом деле всего пару записей – порт. Это 1194, протокол – udp. если вы планируете пускать “тяжелый” трафик, не стоит указывать tcp. Наша внутрення сеть – 10.8.0.0. user nobody  и nogroup обязательно к указанию. Чтобы понизить приоритет в системе при удачном подключении. Лучше ставить SHA512, чем 256 битное шифрование.

Настраиваем конфигурацию сети

sudo nano /etc/sysctl.conf

 

Настраиваем проброс трафика.

net.ipv4.ip_forward=1

 

Далее проверяем

sudo sysctl -p

net.ipv4.ip_forward = 1

 

Все отлично.

ip route |grep default

default via XXX.XXX.XXX.XXX dev eth0 onlink

 

Если Ваш вывод команды route похож на наш – значит вся сетевая настройка у нас завершена. Остался файреволл.

sudo nano /etc/ufw/before.rules

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter

 

И непосредственно разрешение 1194 пора и udp. OpenSSH нужен на случай если Вы планируете работать через терминал. И кстати в этом случае необходимо поменять протокол на tcp.

sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

 

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

sudo ufw disable
sudo ufw enable

 

Запускаем наш OpenVPN сервер и проверяем его состояние.

sudo systemctl start openvpn@server
sudo systemctl status openvpn@server

● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2019-07-21 13:59:57 UTC; 1 years 7 months ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 774 (openvpn)
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─774 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
addr show tun0

4: tun0: &;lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::b2ba:8751:fa5c:d9dd/64 scope link flags 800
valid_lft forever preferred_lft forever

 

Если Вы планируете автозапуск OpenVPN при загрузке – выполните команду

sudo systemctl enable openvpn@server

 

Создание клиентского конфигурационного файла

~/client-configs/base.conf

 

клиентский конфиг файл еще короче и еще проще – указывается my_server – ip адрес. Порт и конечно протокол. В моем случае это udp из за необходимости пересылки потокового видео.

client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote my_server 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
setenv opt block-outside-dns
key-direction 1
verb 3

 

И напишем наш небольшой скрипт на генерирование клиентского ovpn файла конфигурации.

nano ~/client-configs/make_config.sh

 

Скрипт довольно простой –  указываем пути к выходному файлу, сертификатам и клиентскому конфигу.

#!/bin/bash
# First argument: Client identifier
KEY_DIR=/home/timur/client-configs/keys
OUTPUT_DIR=/home/timur/client-configs/files
BASE_CONFIG=/home/timur/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '') \
${KEY_DIR}/ca.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.key \
<(echo -e '\n') \
${KEY_DIR}/ta.key \
<(echo -e '') \
>${OUTPUT_DIR}/${1}.ovpn

 

Далее устанавливаем права на наш скрипт, выполняем и смотрим на результаты нашей работы. После полученный сгенерированный файл переносим на клиентскую машину.

chmod 700 ~/client-configs/make_config.sh

cd ~/client-configs

sudo ./make_config.sh client1

ls ~/client-configs/files

 

Клиент OpenVPN под macOS

Скачиваем оффициальный пакет OpenVPN Connect под macOS. Устанавливаем. При запуске выбираем наш сгенерированный клиентский файл. Нажимаем подключить после импорта и наслаждаемся туннелем.

OpenVPN Debian install + configuring Linux, Android, iOs, MacOs clientOpenVPN Debian install + configuring Linux, Android, iOs, MacOs client

Установка и конфигурирование клиента в Linux

Мы рассмотрим установку и настройку клиента OpenVPN в Debian 10 Linux. Так уж сложилось, что опыт работы с ним у меня более 10 лет и я в основном с ним работаю. К сожалению процесс установки OpenVPN клиента в Linux сложнее. Если у Вас возникнут сложности с установкой в другом дистрибутиве, пишите в комментариях – мы обязательно напишем. Общий алгоритм будет похож.

Для начала надо убедиться что система установки пакетов apt поддерживает протокол https.
apt install apt-transport-https

Далее устанавливаем ключ репозитория OpenVPN

Linux install and run OpenVPN client

wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub
apt-key add openvpn-repo-pkg-key.pub
wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-buster.list
apt update
apt install openvpn3

 

Запускаем и проверяем

openvpn3 session-start --config ${MY_CONFIGURATION_FILE}

 

должно появиться следующее информационное сообщение

Using configuration profile from file: client1.ovpn
Session path: /net/openvpn/v3/sessions/239f2f21sfcc7s42ccs87b4sc2776c6dc0fe
Connected

 

Чтобы убедиться наверняка, выполните команду

openvpn3 sessions-list

 

Разъеденить канал тоже несложно –

openvpn3 session-manage --session-path /net/openvpn/v3/sessions/239f2f21sfcc7s42ccs87b4sc2776c6dc0fe --disconnect

Initiated session shutdown.

Connection statistics:
BYTES_IN.................2221331
BYTES_OUT.................874718
PACKETS_IN..................3310
PACKETS_OUT.................3362
TUN_BYTES_IN..............790371
TUN_BYTES_OUT............2148341
TUN_PACKETS_IN..............3352
TUN_PACKETS_OUT.............3299

 

Установка и конфигурирование клиента в Windows

Скачиваем клиент OpenVPN под Windows. Алгоритм действий полностью идентичен. Сначала устанавливаем приложение. Потом открываем приложение. Импортируем наш ovpn файл, подключаемся и наслаждаемся подсоединением.

импорт ovpn файл

OpenVPN клиент под Android

Leave a Reply

Please disable your adblocker or whitelist this site!