vpn Linux

Содержание
Введение
Туннель
OpenVPN
Установка OpenVPN
easy-rsa
Настройка OpenVPN
Проверить статус
Похожие статьи

Введение

VPN (англ. Virtual Private Network «виртуальная частная сеть») — обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений поверх другой сети, например Интернет.

Несмотря на то, что для коммуникации используются сети с меньшим или неизвестным уровнем доверия (например, публичные сети), уровень доверия к построенной логической сети не зависит от уровня доверия к базовым сетям благодаря использованию средств криптографии (шифрования, аутентификации, инфраструктуры открытых ключей, средств защиты от повторов и изменений передаваемых по логической сети сообщений).

В зависимости от применяемых протоколов и назначения VPN может обеспечивать соединения трёх видов: узел-узел, узел-сеть и сеть-сеть.

Туннель

Туннелирование (от англ. tunnelling — «прокладка туннеля») в компьютерных сетях — процесс, в ходе которого создаётся логическое соединение между двумя конечными точками посредством инкапсуляции различных протоколов.

Туннелирование представляет собой метод построения сетей, при котором один сетевой протокол инкапсулируется в другой.

От обычных многоуровневых сетевых моделей (таких как OSI или TCP/IP) туннелирование отличается тем, что инкапсулируемый протокол относится к тому же или более низкому уровню, чем используемый в качестве туннеля.

Суть туннелирования состоит в том, чтобы «упаковать» передаваемую порцию данных, вместе со служебными полями, в область полезной нагрузки пакета несущего протокола.

Туннелирование может применяться на сетевом (L3) и на прикладном (L7) уровнях. Комбинация туннелирования и шифрования позволяет реализовать закрытые виртуальные частные сети (VPN).

Туннелирование обычно применяется для согласования транспортных протоколов либо для создания защищённого соединения между узлами сети.

Результатом туннелирования является туннель.

OpenVPN

OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналoв типа точка-точка или сервер-клиенты между компьютерами.

Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек.

OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GP.

https://community.openvpn.net/openvpn/wiki/HOWTO

Установка OpenVPN

sudo yum -y update
sudo yum -y install epel-release
sudo yum -y update
sudo yum -y install wget openvpn easy-rsa

После установки перейдите в директорию с конфигами

cd /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/
ls -la

total 84 drwxr-xr-x. 2 root root 4096 May 23 17:41 . drwxr-xr-x. 5 root root 77 May 23 17:41 .. -rw-r--r--. 1 root root 3585 Mar 17 13:53 client.conf -rw-r--r--. 1 root root 3562 Mar 17 13:53 firewall.sh -rw-r--r--. 1 root root 62 Mar 17 13:53 home.up -rw-r--r--. 1 root root 672 Mar 17 13:53 loopback-client -rw-r--r--. 1 root root 675 Mar 17 13:53 loopback-server -rw-r--r--. 1 root root 62 Mar 17 13:53 office.up -rw-r--r--. 1 root root 63 Mar 17 13:53 openvpn-shutdown.sh -rw-r--r--. 1 root root 776 Mar 17 13:53 openvpn-startup.sh -rw-r--r--. 1 root root 131 Mar 17 13:53 README -rw-r--r--. 1 root root 820 Mar 17 20:57 roadwarrior-client.conf -rw-r--r--. 1 root root 1498 Mar 17 20:57 roadwarrior-server.conf -rw-r--r--. 1 root root 10784 Mar 17 13:53 server.conf -rw-r--r--. 1 root root 1778 Mar 17 13:53 static-home.conf -rw-r--r--. 1 root root 1724 Mar 17 13:53 static-office.conf -rw-r--r--. 1 root root 1937 Mar 17 13:53 tls-home.conf -rw-r--r--. 1 root root 1948 Mar 17 13:53 tls-office.conf -rw-r--r--. 1 root root 199 Mar 17 13:53 xinetd-client-config -rw-r--r--. 1 root root 989 Mar 17 13:53 xinetd-server-config

sudo cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/

ls -la /etc/openvpn/

total 24 drwxr-xr-x. 4 root root 53 May 23 17:46 . drwxr-xr-x. 150 root root 8192 May 23 17:41 .. drwxr-x---. 2 root openvpn 6 Mar 17 20:57 client drwxr-x---. 2 root openvpn 6 Mar 17 20:57 server -rw-r--r--. 1 root root 10784 May 23 17:46 server.conf

easy-rsa

Создайте директорию

sudo mkdir /etc/openvpn/easy-rsa

Скопируйте файлы

sudo cp -rf /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/
ls -la /etc/openvpn/easy-rsa/

total 84 drwxr-xr-x. 3 root root 66 May 23 17:52 . drwxr-xr-x. 5 root root 69 May 23 17:50 .. -rwxr-xr-x. 1 root root 76946 May 23 17:52 easyrsa -rw-r--r--. 1 root root 4616 May 23 17:52 openssl-easyrsa.cnf drwxr-xr-x. 2 root root 122 May 23 17:52 x509-types

Можно скачать самую свежую версию EasyRSA с их GitHub репозитория

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.0/EasyRSA-3.1.0.tgz
tar zxvf EasyRSA-3.1.0.tgz
ls -la EasyRSA-3.1.0

total 184 drwxrwxr-x. 4 andrei andrei 214 May 19 04:53 . drwx------. 22 andrei andrei 4096 May 23 18:08 .. -rw-rw-r--. 1 andrei andrei 6717 May 19 04:53 ChangeLog -rw-rw-r--. 1 andrei andrei 1305 May 19 04:53 COPYING.md drwxrwxr-x. 2 andrei andrei 131 May 23 18:13 doc -rwxrwxr-x. 1 andrei andrei 118106 May 19 04:53 easyrsa -rw-rw-r--. 1 andrei andrei 18092 May 19 04:53 gpl-2.0.txt -rw-rw-r--. 1 andrei andrei 1036 May 19 04:53 mktemp.txt -rw-rw-r--. 1 andrei andrei 4935 May 19 04:53 openssl-easyrsa.cnf -rw-rw-r--. 1 andrei andrei 2269 May 19 04:53 README.md -rw-rw-r--. 1 andrei andrei 3335 May 19 04:53 README.quickstart.md -rw-rw-r--. 1 andrei andrei 9425 May 19 04:53 vars.example drwxrwxr-x. 2 andrei andrei 122 May 23 18:13 x509-types

sudo su
mv EasyRSA-3.1.0 /etc/openvpn/easy-rsa

Или

sudo mv ~/Downloads/EasyRSA-3.1.0 /etc/openvpn/easy-rsa
sudo cd /etc/openvpn/easy-rsa
sudo cp vars.example vars
sudo vi vars

set_var EASYRSA_REQ_COUNTRY "FI" set_var EASYRSA_REQ_PROVINCE "Uusimaa" set_var EASYRSA_REQ_CITY "Helsinki" set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" set_var EASYRSA_REQ_EMAIL "info@eth1.ru" set_var EASYRSA_REQ_OU "www.eth1.ru"

Изображение баннера

Настройка OpenVPN

Если вы ещё не скопировали файл с настройками - выполните

sudo su
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn

Если не можете найти файл server.conf выполните

find / -name server.conf

Или

find / -name server.conf | grep openvpn

find: ‘/run/user/1000/gvfs’: Permission denied /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf

Проверить порт по умолчанию можно выполнив

cat /etc/openvpn/server.conf | grep port | grep -v ^\#

port 1194

Открыть этот порт можно командой (Centos/Rocky Linux)

sudo firewall-cmd --zone=public --add-port=1194/tcp --permanent

success

sudo firewall-cmd --reload

success

Проверить протокол по умолчанию (рекомендуется оставить udp) но иногда нужен tcp

cat /etc/openvpn/server.conf | grep proto | grep -v ^\;

proto udp

Переключить протоколы можно командой

sudo sed -i 's@^\;proto tcp@proto tcp@ ; s@^proto udp@\;proto udp@' /etc/openvpn/server.conf

Обратите внимание на следующие строки

cat /etc/openvpn/server.conf | grep 'user\|group' | grep -v ^\#

;user nobody
;group nobody

Рекомендуется раскомментировать их для повышения безопасности. В какой-то старой версии я видел не group nobody а group nogroup.

sudo sed -i 's@^\;user nobody@user nobody@ ; s@^\;group nobody@group nobody@' /etc/openvpn/server.conf

Также можно раскомментировать лог, а именно следующие строки

cat /etc/openvpn/server.conf | grep openvpn.log | grep -v ^\#

;log openvpn.log
;log-append openvpn.log

sudo sed -i 's@^\;log@log@ ; s@^\;log-append@log-append@' /etc/openvpn/server.conf

Настройки для ключей и сертификатов

cat /etc/openvpn/server.conf | grep 'key\|crt\|dh' | grep -v ^\#

ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem ;push "redirect-gateway def1 bypass-dhcp" ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" tls-auth ta.key 0 # This file is secret persist-key

В конец файла с настройками нужно добавить

# Will work only with tcp port-share localhost 80

sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1

sysctl -p

net.ipv4.ip_forward = 1

Сгенерируйте новый tlsauth ключ

vi /etc/openvpn/server.conf

;tls-auth ta.key 0 # This file is secret tls-crypt myvpn.tlsauth

openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth

Проверить состояние сервиса

systemctl status openvpn@server.service

openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-05-25 09:48:14 EEST; 22min ago Main PID: 1236 (openvpn) Status: "Initialization Sequence Completed" CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─1236 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf May 25 09:48:13 host113.andrei.com systemd[1]: Starting OpenVPN Robust And Highly Flexible Tunneling Application On server... May 25 09:48:14 host113.andrei.com systemd[1]: Started OpenVPN Robust And Highly Flexible Tunneling Application On server.

Ошибки

systemctl status openvpn@server.service

openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Tue 2022-05-24 16:06:40 EEST; 14s ago Process: 19014 ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf (code=exited, status=1/FAILURE) Main PID: 19014 (code=exited, status=1/FAILURE) May 24 16:06:40 host113.andrei.com systemd[1]: Starting OpenVPN Robust And Highly Flexible Tunneling Application On server... May 24 16:06:40 host113.andrei.com systemd[1]: openvpn@server.service: main process exited, code=exited, status=1/FAILURE May 24 16:06:40 host113.andrei.com systemd[1]: Failed to start OpenVPN Robust And Highly Flexible Tunneling Application On server. May 24 16:06:40 host113.andrei.com systemd[1]: Unit openvpn@server.service entered failed state. May 24 16:06:40 host113.andrei.com systemd[1]: openvpn@server.service failed.

sudo tail -n 200 /etc/openvpn/openvpn.log

Options error: --explicit-exit-notify can only be used with --proto udp Use --help for more information

sudo tail -f /home/andrei/openvpn.log

Options error: --dh fails with 'dh2048.pem': No such file or directory (errno=2) Options error: --ca fails with 'ca.crt': No such file or directory (errno=2) Options error: --cert fails with 'server.crt': No such file or directory (errno=2) Tue May 24 16:13:40 2022 WARNING: cannot stat file 'server.key': No such file or directory (errno=2) Options error: --key fails with 'server.key': No such file or directory (errno=2) Tue May 24 16:13:40 2022 WARNING: cannot stat file 'ta.key': No such file or directory (errno=2) Options error: --tls-auth fails with 'ta.key': No such file or directory (errno=2) Options error: Please correct these errors. Use --help for more information.

Например, в easy-rsa 2 нужно было выполнять файл vars из директории /etc/openvpn/easy-rsa/

В easy-rsa 3 при попытке выполнить файл вы получите ошибку

. ./vars

You appear to be sourcing an Easy-RSA *vars* file. This is no longer necessary and is disallowed. See the section called *How to use this file* near the top comments for more details.

vi vars

# A little housekeeping: DO NOT EDIT THIS SECTION # # Easy-RSA 3.x does not source into the environment directly. # Complain if a user tries to do this: if [ -z "$EASYRSA_CALLER" ]; then echo "You appear to be sourcing an Easy-RSA *vars* file." >&2 echo "This is no longer necessary and is disallowed. See the section called" >&2 echo "*How to use this file* near the top comments for more details." >&2 return 1 fi

WARNING: you are using user/group/chroot/setcon without persist-tun -- this may cause restarts to fail

Можно избавится отключив user nobody group nobody или добавив в client.opvn

persist-tun

WARNING: you are using user/group/chroot/setcon without persist-key -- this may cause restarts to fail

Можно избавится отключив user nobody group nobody или добавив в client.opvn

persist-key

OpenSSL: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed TLS_ERROR: BIO read tls_read_plaintext error TLS Error: TLS object -> incoming plaintext read error TLS Error: TLS handshake failed SIGUSR1[soft,tls-error] received, process restarting TLS Error: Unroutable control packet received from [AF_INET]192.168.56.113:1194 (si=3 op=P_CONTROL_V1)

sudo yum -y update sudo yum -y install epel-release sudo yum -y update sudo yum -y install openvpn easy-rsa iptables-services

Похожие статьи
iptables
Настройка сети
Linux
Компьютерные сети
ip
SCP: обмен файлами;
SSH: удалённый доступ
Сокеты в C

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: