Дальнейшие шаги предполагают, что экземпляр MITIGATOR уже установлен. В противном случае предварительно выполните установку одним из следующих способов.
Взаимодействие между экземплярами устроено через Wireguard. Между экземплярами создается виртуальная сеть (VPN).
Каждый экземпляр имеет ключевую пару: приватный ключ и публичный ключ.
Приватный ключ хранится только на своем экземпляре в vpn-private.conf
.
Публичные ключи всех экземпляров перечислены в vpn-public.conf
,
который должен быть одинаков на всех экземплярах.
В нем же указаны адреса экземпляров и их адреса в VPN.
Адрес экземпляра в VPN также указывается как MITIGATOR_VPN_ADDRESS
в .env
.
За организацию VPN отвечает компонент gateway
. Когда кластеризация
не применяется, он не создает VPN. При кластеризации он настраивает VPN
в соответствии с vpn-private.conf
, vpn-public.conf
, MITIGATOR_VPN_ADDRESS
.
Если нужно поменять настройки gateway
, кроме *.conf
, нужно полностью
перезапустить экземпляр (docker-compose down && docker-compose up -d
).
Специальную команду для обновления конфигурации VPN
см. ниже.
Ubuntu 20.04 LTS включает Wireguard в базовой поставке. Дополнительные действия не нужны.
В Debian 10 требуется установить портированный пакет:
echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/buster-backports.list
apt update
apt install -y linux-headers-amd64 wireguard-dkms
Проверить поддержку можно командной modprobe wireguard
. Если ничего
не печатается в ответ, модуль доступен. В этом случае достаточно настроить
его автоматическую загрузку. Иначе требуется перезагрузка.
Для добавления wireguard в автоматическую загрузку:
echo wireguard >> /etc/modules-load.d/mitigator.conf
Установить утилиту wg
:
apt install -y wireguard-tools
Все файлы создаются в каталоге /srv/mitigator
.
Если настраивается не первый экземпляр, файл vpn-public.conf
нужно взять
с любого из настроенных экземпляров, чтобы дополнять его.
Создать приватный ключ
(пример результата: yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=
):
wg genkey
Записать ключ в vpn-private.conf
:
[Interface]
ListenPort = 4567
PrivateKey = yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=
Указанный порт 4567 должен быть открыт для UDP-трафика.
Получить из приватного ключа публичный
(пример результата: acfzxE6ZsiYE4jIqsBicOt7oT8ZuKhxBvuz0+6JxiEc=
):
echo 'yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=' | wg pubkey
Добавить в vpn-public.conf
секцию с публичным ключом и адресами экземпляра
(создать файл, если это первый экземпляр):
[Peer]
PublicKey = acfzxE6ZsiYE4jIqsBicOt7oT8ZuKhxBvuz0+6JxiEc=
AllowedIPs = 10.8.3.1/32
Endpoint = 192.0.2.1:4567
10.8.3.1
— адрес экземпляра внутри VPN.
Должен быть уникальным среди всех экземпляров.
Все адреса должны быть внутри одной сети /24 (по умолчанию).
192.0.2.1:4567
— внешний адрес экземпляра и настроенный выше порт.
На этот адрес и порт другие экземпляры будут отправлять UDP-пакеты.
Создать файл docker-compose.vpn.yml
в точности такого содержания:
version: "2.2"
services:
gateway:
environment:
GATEWAY_ADDRESS: "${MITIGATOR_VPN_ADDRESS:-10.8.3.1}/${MITIGATOR_VPN_PREFIX:-24}"
volumes:
- ./vpn-public.conf:/srv/public.conf:ro
- ./vpn-private.conf:/srv/private.conf:ro
Добавить docker-compose.vpn.yml
в список конфигураций Docker Compose
в файле .env
:
COMPOSE_FILE=docker-compose.yml:docker-compose.vpn.yml
Если используется больше файлов, например, docker-compose.override.yml
,
их все нужно перечислить через двоеточия.
Добавить в .env
адрес экземпляра внутри VPN:
MITIGATOR_VPN_ADDRESS=10.8.3.1
Он должен совпадать с настроенным в vpn-public.conf
.
Также этот адрес должен быть указан в настройках экземпляра в
web-интерфейсе MITIGATOR.
Перезапустить MITIGATOR:
docker-compose down && docker-compose up -d
После добавления нового экземпляра в файл vpn-public.conf
нужно
внести изменения на всех экземплярах.
На каждом экземпляре нужно обновить конфигурацию VPN без перезапуска:
docker-compose exec gateway reconfigure