Объединение bare-metal и vps серверов в коммутируемую сеть при помощи OpenVPN

Устанавливаем необходимые пакеты

# 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

Работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *