Устанавливаем необходимые пакеты
# apt-get install openvpn easy-rsa bridge-utils
Настраиваем конфигурацию пакета easy-rsa
На хосте который будет выступать сервером пакет для генерации сертификатов скопируем из /usr/share/easy-rsa/ в /opt/easy-rsa/. Копируем файл vars.example в vars и настраиваем параметры которые будут подставляться при генерации сертификатов:
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "NSK"
set_var EASYRSA_REQ_CITY "Novosibirsk"
set_var EASYRSA_REQ_ORG "Interlan"
set_var EASYRSA_REQ_EMAIL "chernousov@interlan.xyz"
set_var EASYRSA_REQ_OU "VPN"
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_CRL_DAYS 3650
Генерируем сертификаты и ключи сервера
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
# ./easyrsa gen-dh
# ./easyrsa gen-req vpn-server nopass
# ./easyrsa sign-req server vpn-server
# openvpn --genkey --secret pki/ta.key
Генерируем сертификаты и ключи клиентов
# ./easyrsa gen-req client-1 nopass
# ./easyrsa sign-req client client-1
или
# ./easyrsa build-client-full client-2 nopass
Конфигурация OpenVPN сервера
Конфиг сервера с интерфейсом без назначения сетевого адреса (инициализация моста при старте сервера):
local 0.0.0.0
port 1194
proto tcp-server
dev tap-bridge
ca /opt/easy-rsa/pki/ca.crt
cert /opt/easy-rsa/pki/issued/vpn-server.crt
key /opt/easy-rsa/pki/private/vpn-server.key
dh /opt/easy-rsa/pki/dh.pem
mode server
tls-server
client-to-client
keepalive 10 120
tls-auth /opt/easy-rsa/pki/ta.key 0 # This file is secret
cipher AES-256-CBC
data-ciphers-fallback AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
script-security 2
up /etc/openvpn/server/up-bridge.sh
Скрипт инициализации сетевого моста vmbr1 (Мост для Proxmox):
#!/bin/sh
ifconfig tap-bridge up
brctl addif vmbr1 tap-bridge
exit 0
Активируем и запускаем сервис сервера:
# systemctl start openvpn-server@server
# systemctl status openvpn-server@server
# systemctl enable openvpn-server@server
Конфигурация OpenVPN клиента
Копируем ключи клиента на клиентский сервер, после чего создаем конфигурацию клиента:
client
dev tap-bridge
proto tcp
remote 109.248.250.74 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client-1.crt
key client-1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
script-security 2
up /etc/openvpn/client/up-bridge.sh
Скрипт инициализации сетевого моста vmbr1:
#!/bin/sh
ifconfig tap-bridge up
brctl addbr vmbr1
ifconfig vmbr1 up
brctl addif vmbr1 tap-bridge
ifconfig vmbr1 10.240.250.250/24
exit 0
Активируем и запускаем сервис клиента:
# systemctl start openvpn-client@client
# systemctl status openvpn-client@client
# systemctl enable openvpn-client@client
На клиенте при подключении к разным версиям OpenVPN может вылезти ошибка вида.
2025-03-10 10:11:14 Compression is not allowed since allow-compression is set to 'stub-only'
2025-03-10 10:11:14 OPTIONS ERROR: server pushed compression settings that are not allowed and will result in a non-working connection. See also allow-compression in the manual.
2025-03-10 10:11:14 ERROR: Failed to apply push options
Собственно в конфиг добавляем опцию указанную в ошибке и пробуем.
allow-compression yes
Работает.