Взаимодействие с 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 нужно взять с любого из ранее настроенных участников VPN.

  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.08/dist/docker-compose.vpn.yml
    
  6. Отредактируйте в .env адрес экземпляра внутри 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 без перезапуска:

    docker-compose exec gateway reconfigure