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 |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги