Взаимодействие с MITIGATOR внутри VPN

Взаимодействие с MITIGATOR устроено через Wireguard.

Collector, как и каждый экземпляр MITIGATOR, имеет ключевую пару: приватный ключ и публичный ключ. Приватный ключ хранится только на Collector в vpn-private.conf. Публичные ключи всех узлов VPN перечислены в vpn-public.conf, который должен быть одинаков у всех узлов.

Адрес коллектора в VPN указывается как COLLECTOR_VPN_ADDRESS в .env.

За организацию VPN отвечает компонент gateway. Он настраивает VPN в соответствии с vpn-private.conf, vpn-public.conf, COLLECTOR_VPN_ADDRESS.

Информация

Если нужно поменять настройки gateway, кроме *.conf, нужно полностью перезапустить Collector (docker-compose down && docker-compose up -d).
Если меняется только состав узлов VPN, команда docker-compose exec gateway reconfigure позволяет обновить конфигурацию 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/collector.conf

Инструменты

Установить утилиту wg:

apt install -y wireguard-tools

Настройка

Все файлы создаются в каталоге /srv/collector.

Если настраивается не первый узел VPN, файл vpn-public.conf нужно взять с любого из ранее настроенных узлов.

  1. Создать приватный ключ (пример результата: yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=):

    wg genkey
  2. Записать ключ в vpn-private.conf:

    [Interface]
    ListenPort = 4567
    PrivateKey = yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=

    Указанный порт 4567 должен быть открыт для UDP-трафика.

  3. Получить из приватного ключа публичный (пример результата: acfzxE6ZsiYE4jIqsBicOt7oT8ZuKhxBvuz0+6JxiEc=):

    echo 'yDPg5doavYH7fdD86nt+cOzSBL4znVZcrcrJwjY/Xmw=' | wg pubkey
  4. Добавить в vpn-public.conf секцию с публичным ключом и адресами узлов VPN (создать файл, если это первый экземпляр):

    [Peer]
    PublicKey = acfzxE6ZsiYE4jIqsBicOt7oT8ZuKhxBvuz0+6JxiEc=
    AllowedIPs = 10.8.3.1/32
    Endpoint = 192.0.2.1:4567

    10.8.3.1 — адрес Collector внутри VPN. Должен быть уникальным среди всех узлов VPN. Все адреса должны быть внутри одной сети /24 (по умолчанию).

    192.0.2.1:4567 — внешний адрес экземпляра и настроенный выше порт. На этот адрес и порт другие экземпляры будут отправлять UDP-пакеты.

  5. Скачать docker-compose.vpn.yml:

    wget https://docs.mitigator.ru/collector/v23.12/dist/docker-compose.vpn.yml
  6. Отредактировать в .env адрес Collector внутри VPN:

    COLLECTOR_VPN_ADDRESS=X.X.X.X

    Он должен совпадать с настроенным в vpn-public.conf.

  7. Перезапустить Collector:

    docker-compose down && docker-compose up -d
  8. После добавления нового узла в файл vpn-public.conf или при изменении vpn-private.conf нужно внести изменения на всех узлах.

    На каждом узле VPN нужно обновить конфигурацию без перезапуска:

    docker-compose exec gateway reconfigure