Объединение 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

Работает.

Похожие записи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS