Сеть между экземплярами
Принцип работы
Дальнейшие шаги предполагают, что экземпляр MITIGATOR уже установлен. В противном случае предварительно выполните установку одним из следующих способов.
Взаимодействие между экземплярами устроено через Wireguard. Между экземплярами создается виртуальная сеть (VPN).
Каждый экземпляр имеет ключевую пару: приватный ключ и публичный ключ.
Приватный ключ хранится только на своем экземпляре в vpn-private.conf.
Публичные ключи всех экземпляров перечислены в vpn-public.conf,
который должен быть одинаков на всех экземплярах.
В нем же указаны адреса экземпляров и их адреса в VPN.
Адрес экземпляра в VPN также указывается как MITIGATOR_VPN_ADDRESS в .env.
За организацию VPN отвечают подсистемы gateway и gateway-dataplane.
Когда кластеризация не применяется, они не настраивают VPN.
При кластеризации они настраивают VPN в соответствии с
vpn-private.conf, vpn-public.conf и MITIGATOR_VPN_ADDRESS.
Если нужно поменять настройки gateway, кроме *.conf, нужно полностью
перезапустить экземпляр (docker-compose down && docker-compose up -d).
Специальную команду для обновления конфигурации VPN см. ниже.
Обработчик пакетов и подсистема gateway-dataplane работают без изоляции сети.
VPN с обработчиками пакетов также не будет изолирована от сети хоста,
поэтому нужно выбирать такой MITIGATOR_VPN_ADDRESS,
чтобы он не попадал в существующие сети, к которым хосту нужен доступ.
При включении VPN подсистема gateway-dataplane создает на хосте интерфейс VPN wg0.
Это имя можно задать через DATA_PLANE_VPN_DEVICE в .env.
VPN с обработчиками пакетов использует порт 4568 (UDP),
доступ к которому нужно открыть на всех экземплярах.
Этот порт можно задать через DATA_PLANE_VPN_PORT в .env.
Подготовка системы
Установить необходимые пакеты (для Debian/Ubuntu):
apt install -y wireguardВ версиях Debian старше Bullseye для установки Wireguard необходимо включить backports.
Проверить поддержку можно командной modprobe wireguard. Если ничего
не печатается в ответ, модуль доступен. В этом случае достаточно настроить
его автоматическую загрузку. Иначе требуется перезагрузка.
Для добавления Wireguard в автоматическую загрузку:
echo wireguard >> /etc/modules-load.d/mitigator.confНовые версии Debian/Ubuntu включают Wireguard в базовой поставке, добавление в автоматическую загрузку не требуется.
Настройка экземпляра
Все файлы создаются в каталоге /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:456710.8.3.1— адрес экземпляра внутри VPN. Должен быть уникальным среди всех экземпляров. Все адреса должны быть внутри одной сети /24 (по умолчанию).192.0.2.1:4567— внешний адрес экземпляра и настроенный выше порт. На этот адрес и порт другие экземпляры будут отправлять UDP-пакеты. -
Добавить в
.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-private.conf
нужно внести изменения на всех экземплярах.
На каждом экземпляре нужно обновить конфигурацию VPN без перезапуска:
docker-compose exec gateway reconfigure && \
docker-compose exec gateway-dataplane reconfigure