OpenVPN: Открытая виртуальная частная сеть.

Установка, настройка, эксплуатация.
Ответить
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

OpenVPN: Открытая виртуальная частная сеть.

Сообщение root »

Оглавление
Темы
Установка OpenVPN и EASY-RSA
Генерация Серверных и пользовательских сертификатов
Конфигурационный файл сервера
Конфигурационный файл клиента
Встраивание сертификата и ключей в конфигурационный файл
Скрипт автоматической установки OpenVpn
Импорт подключение из OVPN файла
Дополнительные материалы
WireGuard - VPN нового поколения
Wake on Lan: Удалённое включение компьютера
Синхронизация времени
BIND — DNS-сервер
ISCSI — Транспортный протокол для SCSI
FRR — Протоколы динамической маршрутизации
Dnscrypt — Проксирование dns-трафика
OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL. Скачиваем .rpm файл репозитория epel

Код: Выделить всё

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Устанавливаем репозиторий

Код: Выделить всё

dnf install epel*
Устанавливаем easy-rsa openvpn с репозитория epel

Код: Выделить всё

dnf install easy-rsa openvpn
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


[anchor=2 goto=top]Генерация серверных и пользовательских сертификатов
Теперь нужно сделать папку, в которую скопируем скрипты (в общем скрипты копировать не обязательно, но зато это удобнее):

Код: Выделить всё

mkdir ~/openvpn
cp -vR /usr/share/easy-rsa/2.0/* ~/openvpn
cd ~/openvpn
Теперь нам нужно экспортировать необходимые переменные (очень важно находиться в папке, из которой будут запускаться скрипты, у меня это ~/openvpn). Если в этом файле (./vars) подправить последние 5 строчек, то в дальнейшем в большинстве случаев вам не нужно будет вводить одно и тоже :) Вот эти строчки (дефолтовые):

Код: Выделить всё

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MO"
export KEY_CITY="MOSCOW"
export KEY_ORG="HOME"
export KEY_EMAIL="ssergey@mail.ru"
export KEY_OU="ENG"
Очистка и инициализация каталога с ключами

Код: Выделить всё

./clean-all
Выполняем назначение переменных

Код: Выделить всё

source ./vars
Создаём корневой сертификат Root Certificate Authority (CA)

Код: Выделить всё

./build-dh
Создаём сертификат сервера (aster.free-adm.ru.crt aster.free-adm.ru.key aster.free-adm.ru.csr)
Реально в данном случае .csr не нужен

Код: Выделить всё

./build-key-server aster.free-adm.ru
Создаём DIFFIE-HELLMAN PARAMETERS. Криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.

Код: Выделить всё

./build-dh
ключ для tls аутентификации

Код: Выделить всё

openvpn --genkey --secret keys/tls.key
Создаём сертификат для клиентов

Код: Выделить всё

./build-key client.free-adm.ru
...
по мере необходимости 
./build-key helpdesk.server.ru
./build-key mail.server.ru
./build-key KM.Guest
А теперь рассмотрим какие, из полученных файлов, нужны на сервере, а какие на клиенте

Код: Выделить всё

ls -l
-rw-r--r--. 1 root root 1679 апр 17  2015 ca.crt                                     SERVER, CLIENT
-rw-------. 1 root root 1704 апр 17  2015 ca.key                                     SECURITY, SERVER ONLY
-rw-r--r--. 1 root root 5264 апр 17  2015 client.free-adm.ru.crt                     CLIENT ONLY
-rw-------. 1 root root 1708 апр 17  2015 client.free-adm.ru.key                     SECURITY, CLIENT ONLY
-rw-r--r--. 1 root root  424 апр 17  2015 dh2048.pem                                 SERVER ONLY
-rw-r--r--. 1 root root 5407 апр 17  2015 server.free-adm.ru.crt                     SERVER ONLY
-rw-------. 1 root root 1708 апр 17  2015 server.free-adm.ru.key                     SECURITY, SERVER ONLY
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


e /etc/openvpn/server.conf

Код: Выделить всё

local 195.0.1.15
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 0.0.0.0 255.255.255.0"
push "dhcp-option WINS 192.168.1.254"
push "redirect-gateway"  #def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.254"
push "dhcp-option DOMAIN buch.ru"
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
mute 5
Замечу, что если у всех сетей будут одинаковые адреса (например, 3 сети и во всех адреса 192.168.0.0/24), то компы, на которых стоит OpenVPN, могут жутко глючить с передачей пакетов, а то и вовсе не будут видеть сеть (ни OpenVPN, ни реальную).

Проблема с автозапуском openvpn решается правкой файлoв запуска сервисов openvpn-server@.service openvpn@.service
e /usr/lib/systemd/system/openvpn-server@.service

Код: Выделить всё

[Unit]
...
After=rsyslog.service network-online.target
...

e /usr/lib/systemd/system/openvpn@.service

Код: Выделить всё

[Unit]
...
After=rsyslog.service
...
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


Код: Выделить всё

client
dev tun
proto udp
port 1194
remote gate.free-adm.ru 1194
ca 'C:\\Program Files\\OpenVPN\\config\\free-adm\\ca.crt'
cert 'C:\\Program Files\\OpenVPN\\config\\free-adm\\sergey-clt.crt'
key 'C:\\Program Files\\OpenVPN\\config\\free-adm\\sergey-clt.key'
; если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
resolv-retry infinite
mute-replay-warnings
; использовать динамический порт для подключения (только для клиента)
nobind
; указывает не перечитывать файлы ключей при перезапуске туннеля.
persist-key
; данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
persist-tun
comp-lzo
verb 5
cipher AES-128-CBC
redirect-gateway
route-method exe
route-delay 2
Примерная структура каталогов с конфигурациями на клиенте

Код: Выделить всё

cd "C:\Program Files\OpenVPN\config\"
C:\Program Files\OpenVPN\config
λ tree /f
Структура папок
│       cent.ovpn
│       free-adm.ovpn
│       srv01.free-adm.ovpn
│
├───cent
│               ca.crt
│               client.free-adm.ru.crt
│               client.free-adm.ru.key
│
├───free-adm
│               ca.crt
│               sergey-clt.crt
│               sergey-clt.key
│
└───srv01.free-adm
                ca.crt
                User.crt
                User.key
Теперь можно запустить OpenVPN и проверить работу (потом лучше остановить, зачем он нам
постоянно работающий на клиентах?). Например, если файл конфигурации /etc/openvpn/client/client.conf, то название сервиса будет openvpn-client@client.service:

Код: Выделить всё

systemctl enable openvpn-client@client
systemctl start openvpn-client@client
На windows все аналогично, за исключением путей.Ключи и сертификаты кладем в папку C:\Program Files\OpenVPN\config\srv01.free-adm, а конфигурацию в C:\Program Files\OpenVPN\config, только расширение я указал .ovpn, т.к. это нужно клиенту windows, т.е. имя файла конфигурации у меня будет таким - srv01.free-adm.ovpn.
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »


Для кроссплатформенной универсализаци конфигурационного файла рекомендуется изменить способ подключения сертификатов и ключей. Для этого нужно заменить соответствующие директивы

Код: Выделить всё

ca 'C:\\Program Files\\OpenVPN\\config\\free-adm\\ca.crt'
cert 'C:\\Program Files\\OpenVPN\\config\\free-adm\\sergey-clt.crt'
key 'C:\\Program Files\\OpenVPN\\config\\free-adm\\sergey-clt.key'
на следующие конструкции:

Код: Выделить всё

<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>

<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »

Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Сообщение root »

Воспользуемся консольной утилитой nmcli для быстрого импортирования подключения из OVPN файла:

Код: Выделить всё

nmcli connection import file /path/client.ovpn type openvpn
Здесь /path/client.ovpn – путь к OVPN файлу на диске.
Встроенные сертификаты и ключи будут автоматически импортированы и сохранены в каталоге ~/.cert/nm-openvpn, что не вызовет проблем с SELinux.
Ответить