Для объединения нескольких географически распределенных подсетей при помощи SoftEther используется компонент SoftEther VPN Bridge и сегодня мы в краце рассмотрим как настроить объединение несколько виртуальных сетей (LXD хост).
Подготовка сети хоста
Установка необходимых пакетов
# apt-get update && apt-get upgrade
# apt-get install net-tools bridge-utils traceroute
Настройка моста при помощи NetPlan
Добавляем в конфигурацию NetPlan сетевой мост и не ключаем в него интерфейсы, но назначаем для адреса. Первый адрес это подсеть с выходом в интернет с хоста LXD, а второй адрес это адрес виртуальной сети SoftEther.
network:
version: 2
bridges:
v-bridge:
dhcp4: no
addresses: [ "10.101.3.1/24", "10.101.5.9/24" ]
ethernets:
ens34:
addresses: [ 185.135.81.157/22 ]
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
routes:
- to: default
via: 185.135.80.1
Сервис SystemD для организации доступа в интернет для LXC-контейнеров /etc/systemd/system/lxd-nat.service.
[Unit]
Description=NAT network for LXD
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.101.3.0/24 -o ens34 -j MASQUERADE
[Install]
WantedBy=multi-user.target
Активируем и запускаем сервис.
# systemctl enable lxd-nat
# systemctl start lxd-nat
Установка и базовая настройка LXD
Выполняем инициализацию LXD и на этапе настройки указываем мост по умолчанию, но при этом не используем DHCP, так-как в нашей сети уже есть DHCP-сервер, а вся виртуальная сеть плоский мост и следовательно LXC-контейнеры получат адрес от центрального DHCP-сервера.
# lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (zfs, btrfs, ceph, cephobject, dir, lvm) [default=zfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: v-bridge
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Контейнер LXD для запуска SoftEther Bridge
Создаем контейнер для запуска SoftEther Bridge.
# lxc launch ubuntu:24.04 srv-lxc-prod-rain-07
Настраиваем сеть в контейнере при помощи NetPlan.
network:
version: 2
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses:
- 10.101.3.2/24
routes:
- to: default
via: 10.101.3.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Не забудьте разрешить Forward на хосте и проверьте доступность доступа в интернет из контейнера.
Установка SoftEther Bridge
Обратите внимание, что для SoftEther нет GUI клиента для Linux и вам придется или использовать консоль для управления или использовать отдельную машину с консолью установленной на OS Windows.
Загрузить SoftEther VPN Bridge можно по адресу https://www.softether.org/5-download. Для установки вам потребуется скачать архив, распаковать его и запустить .install из каталога с приложением. Но так-же обратите внимание, что вам необходимо установить дополнительно пакеты для сборки.
# apt-get install gcc make
Собираем и проводим тестовый запуск
# cd /opt/vpnbridge/
# ./.install.sh
# ./vpnbridge start
Останавливаем VpnBribge и делаем сервис для автозапуска при старте контейнера.
# ./vpnbridge stop
Сервис для автозапуска SoftEther (/etc/systemd/system/vpnbridge.service)
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/opt/vpnbridge/vpnbridge start
ExecStop=/opt/vpnbridge/vpnbridge stop
# Optionally, add a delay to ensure the start process fully completes
# ExecStartPost=/bin/sleep 3s
[Install]
WantedBy=multi-user.target
Настраиваем автозапуск и запускаем.
# systemctl enable vpnbridge.service
# systemctl start vpnbridge.service
# systemctl status vpnbridge.service
Проброс портов до контейнера при помощи утилиты socat
Для проброса порта управления SoftEther (порт 5555) я использую утилиту socat которую запускаю в виде сервиса.
Скрипт для запуска утилиты /usr/local/bin/socat-start.sh
#!/bin/sh
/usr/bin/socat TCP-LISTEN:`echo $1 | awk -F"-" '{ print $2 }'`,fork TCP:`echo $1 | awk -F"-" '{ print $1 }'`:`echo $1 | awk -F"-" '{ print $2 }'`
Сервис запуска /etc/systemd/system/socat@.service
[Unit]
Description=Socat port forward for port %i
[Service]
ExecStart=/usr/local/bin/socat-start.sh %i
Type=simple
[Install]
WantedBy=multi-user.target
Пример запуска.
# systemctl start socat@10.101.2.3-5555.service
# systemctl enable socat@10.101.2.3-5555.service
# systemctl status socat@10.101.2.3-5555.service
Настройка подключения SoftEther VPN Bridge к SoftEther VPN Server
Настройка пользователя на сервере
Выбираем виртуальный хаб

Переходим в управление пользователями

Задаем имя пользователя и пароль для пользователя от имени которого будет происходить подключение сетевого моста

Настройка подключения сетевого моста к серверу
Создаем подключение утилитой правления к сетевому мосту

Обратите внимание, что порт 5555 и пароль не указываем так-как его надо будет указать при первом подключении

Настраиваем соединение с использованием мастера настройки. Режим работы site-to-site.

Задаем параметры подключения от имени созданного сервисного пользователя.

Указываем центральный хост, имя пользователя и пароль.

Проверяем, что соединение установлено.

Выбираем устройство к которому будем строить мост.

Вот собственно и все настройки.
Теперь можно проверить, что LXD получет параметры IP с центрального DHCP-сервера и другие устройства в сети доступны.
root@srv-prod-rain-04:~# lxc launch ubuntu:24.04
Creating the instance
Instance name is: legible-krill
Starting legible-krill
root@srv-prod-rain-04:~# lxc ls
+----------------------+---------+--------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+----------------------+---------+--------------------+------+-----------+-----------+
| legible-krill | RUNNING | 10.101.5.93 (eth0) | | CONTAINER | 0 |
+----------------------+---------+--------------------+------+-----------+-----------+
| srv-lxc-prod-rain-07 | RUNNING | 10.101.3.2 (eth0) | | CONTAINER | 0 |
+----------------------+---------+--------------------+------+-----------+-----------+




