Автоматическая установка DG на Ubuntu 22.04: локальная инсталляция

1. Подготовка операционной системы

Актуальные версии элементов ПАК
DosGate (ядро): 3.8.6-1
DosGate-UH: 1.5.2-1
Библиотека libdt1: 1.2.7-3
Библиотека libaevent1: 0.2.1-4
Библиотека libxskexp: 0.0.2-1
SP-Spider (веб-интерфейс): 4.5-1
SP-Spider-Broker (брокер сообщений): 1.0.20

1.1 Настройка сетевых интерфейсов

Внести необходимые изменения в сетевые интерфейсы в соответствии с текущей сетевой архитектурой компании. При Outline-инсталляции обязательно настроить VLAN'ы.

Для Inline-инсталляции необходимо использовать минимум два физических порта для передачи данных и один порт для управления (mgmt).

Для Outline-инсталляции требуется минимум один физический порт для передачи данных и один порт для управления.

При настройке интерфейсов ifupdown учесть следующее:

  • Удалить конфигурации линейных интерфейсов из профиля netplan, отредактировав файл /etc/netplan/00-installer-config.yaml. Конфигурации, относящиеся к mgmt-интерфейсам, допускается оставить без изменений.

  • Добавить DNS-сервер в настройку systemd-resolved, отредактировав файл /etc/systemd/resolved.conf.

В случае недоступности NTP-серверов в связи с политиками безопасности возможно добавить собственный NTP-сервер отредактировав файл /etc/systemd/timesyncd.conf.

Примечание:

  • При использовании сетевых карт Intel с драйвером ixgbe рекомендуется ограничить кол-во потоков до 24:

  • При использовании сетевых карт Mellanox, в настройках аппаратных интерфейсов, на которых будет работать DosGate, рекомендуется указать настройку tune_xdp = 1. Необходимо открыть для редактирования файл /etc/network/interfaces. Вставить следующую строку:

tune_xdp = 1 

1.2 Перезагрузка сервера

Перезагрузить сервер, выполнив команду:

sudo reboot

2. Установка DosGate с помощью скрипта

2.1 Выполнение скрипта установки DosGate

Скрипт выполняет подключение репозитория Servicepipe, установку DosGate в выбранной конфигурации и первоначальное конфигурирование системы.

Для запуска необходимо выполнить команду:

curl -o "./setup-dg.sh" "https://public-repo.svcp.io/setup_script/setup-dg.sh" && \
    sudo chmod +x "./setup-dg.sh" && \
    ./setup-dg.sh

Перед началом установки выполняется автоматическая проверка системных требований. При обнаружении несоответствия минимально необходимым параметрам отобразится предупреждение:


2.2 Подключение репозитория

После запуска скрипта выполняется проверка наличия репозитория Servicepipe:

Для подключения требуется ввести учетные данные (логин и пароль) к репозиторию. Эти учетные данные предоставляются индивидуально для каждого заказчика. Получить их возможно запросив у вендора (Servicepipe или партнёра).


2.3 Выбор конфигурации DosGate для установки

После подключения репозитория скрипт предложит выбрать конфигурацию DosGate.

Установка DosGate включает четыре метапакета:

Метапакет Компоненты
dosgate
Основные компоненты DosGate
• collectd
• nginx
• sp-spider-broker
• libdt1
• libaevent1
• dosgate
dosgate-uh
Модуль DosGate-UH
(Сессионный модуль)
• libxskexp
• dosgate-uh
spider
Компоненты веб-интерфейса
• nodejs (= 18.18.2-1nodesource1)
• libpq-dev
• postgresql (= 14+238)
• rabbitmq-server (= 3.13.6-1)
• sp-spider-broker
• sp-spider
dosgate-monitoring
Компоненты мониторинга
• clickhouse-server (= 23.10.5.20-servicepipe-20250331.151941.UTC)
• clickhouse-client (= 23.10.5.20)
• carbon-clickhouse
• graphite-clickhouse
• carbonapi

Укажите необходимый вариант и подтвердите установку.

Внимание:
В процессе установки, в зависимости от выбранной конфигурации, может потребоваться указать учетные данные (логины и пароли) для доступа к базам данных и брокерам сообщений. Эти данные необходимо сохранить, так как они используются при последующем конфигурировании системы.


2.4 Первичная настройка системы

В зависимости от выбранной конфигурации выполняется начальная настройка установленных компонентов.

Так, при установке пакета Spider и пакета Monitoring скрипт предложит инициализировать ClickHouse с созданием базы данных, задать параметры в конфигурационных файлах .env для SP-Spider и SP-Spider-Broker.

Затем, выполняется создание базы данных и пользователя PostgreSQL, а также настройка учётной записи RabbitMQ с назначением пароля и прав доступа.

Затем выполняется создание системного пользователя для веб-интерфейса.


3. Первый вход в систему

Для входа в Веб-интерфейс DosGate следует ввести в адресной строке браузера IP-адрес сервера и порт по шаблону: ip:3333.

Появится окно авторизации (см. рисунок ниже). В окне авторизации следует указать следующие логин и пароль по умолчанию: superadmin/superadmin Окно авторизации при входе в систему

После авторизации появится уведомление Работа с интерфейсом невозможна. Это связано с тем, что в данный момент нет настроенной ноды.

Нажать кнопнку Настройки. Откроется окно настроек.

В меню Ноды нажать на зелёную иконку с плюсом. В открывшемся окне указать:

  • Collectd host — значение должно соответствовать параметру hostname, указанному в конфигурационном файле dosgate.conf в блоке collectd. По умолчанию используется dosgate-srv1.
  • Collectd UH — укажите имя узла, по умолчанию — dosgate-uh-srv1.

Перейти в настройки ClickHouse и указать параметры подключения. Пример настроек для подключения к ClickHouse, установленному на локальной ноде:

Нажать на кнопку Применить. Перейти в раздел Подключение.

В открывшемся окне указать SSH-данные для подключения к установленной ноде Dosgate (IP-адрес, логин, пароль). Нажать на кнопку Проверить, чтобы проверить подключение. Если данные введены правильно и нода доступна, статус изменится на Доступна. После этого нажать кнопку Применить. Пример заполненных настроек приведён ниже:

В открывшемся окне нажать Добавить ноду.

Для отображения графиков и статистики необходимо указать ссылку на Graphite. Перейдите в раздел Окружение. В разделе DosGate указать "Graphite URL" и "Арена по-умолчанию". Название арены должно соответствовать значению, указанному в конфигурационном файле dosgate.conf для всех нод кластера.

Пример настроек:

Нажать на свой профиль в левом верхнем углу экрана, чтобы открыть настройки профиля. Установить новый пароль.

Выполнить обновление страницы. Веб-интерфейс готов к использованию.


4. Настройка конфигурации DosGate

Все параметры работы Dosgate задаются в едином конфигурационном файле dosgate.conf. Конфигурационный файл находится по пути /etc/dosgate.conf. Его настройка обязательна перед первым запуском программного обеспечения. Для доступа к командам управления производится аутентификация по SSH.

Конфигурационный файл написан в формате YAML и содержит следующие блоки:

  • socket_conf
  • arena_conf
  • collectd

Подробнее о каждом блоке описано в следующих разделах.

При конфигурировании файла dosgate.conf следует использовать только пробелы; табуляция недопустима.
Для валидации корректности синтаксиса YAML, допустимо использовать сайт https://www.yamllint.com.

4.1 Блок socket_conf

Блок socket_conf сразу после установки имеет значения по умолчанию. Он настроен для использования и работы с CLI.

Пример конфигурации:

sockets:
  - url: /run/dosgate/api.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: SCGI

  - url: /run/dosgate/fapi.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: FCGI
    timeout:
      send: 10
      idle: 10

  - url: /run/dosgate/crlf.socket
    user: nginx:nginx
    mode: 0660
    acl: any
    type: CRLF
    timeout:
      idle: 10
      send: 10

  - url: /run/dosgate/cli.socket
    user: root:dosgate
    mode: 0660
    acl: any
    type: CLI
    timeout:
      idle: 10
      send: 10

Описание блока

URL

URL для сокетов имеет формат family://address, где:

family — тип сокета, который может принимать следующие значения:

  • unix — UNIX-сокет, используемый на файловой системе сервера. В качестве адреса указывается полный путь к сокету.

  • tcp — TCP-сокет. Адрес указывается в формате host:port или :port. Если указан только порт (:port), сокет будет прослушивать все доступные адреса (0.0.0.0 или ::).

Определение типа сокета по строке адреса

Если family не указано в URL, тип сокета определяется автоматически по формату строки адреса:

  • Если строка начинается с /, предполагается, что это UNIX-сокет (family = unix).
  • Если строка содержит символ :, предполагается, что это TCP-сокет (family = tcp).

User

Имя пользователя для UNIX-сокетов. Если указанный пользователь отсутствует, сокет будет использовать учетную запись пользователя, от имени которого выполняется процесс (по умолчанию root).

Group

Группа для UNIX-сокетов. Если указанная группа отсутствует, используется первичная группа пользователя, под которым выполняется процесс (по умолчанию root).

Mode

Режим доступа для UNIX-сокетов, задается в формате, аналогичном команде chmod.

ACL

Список контроля доступа (Access Control List). Перечисляются через запятую разрешенные target (например: profile, router, arena, mark, pset), значение any - разрешает доступ ко всем частям системы.

Type

Тип протокола/диалекта для сокета:

  • FCGI - FastCGI протокол, полный диалект
  • SCGI - SCGI протокол, полный диалект
  • CRLF - raw протокол, полный диалект
  • CLI - raw протокол, диалект CLI

RAW - протокол, при котором запрос заканчивается либо последовательностью CRLF, либо закрытием сокета в сторону сервера. Ответ также завершается CRLF или окончательным закрытием сокета.

Особенность для CLI:

Для отправки запросов через CLI должен быть настроен хотя бы один сокет с типом CLI, с family UNIX и адресом /run/dosgate/cli.socket

Timeout

Общий лимит времени, в течение которого сокет ожидает завершения операции. Указывается в секундах. При отсутствии установленного таймаута сокет продолжает ожидание завершения операций или остается в состоянии бездействия без ограничения по времени.

  • idle - время, в течение которого сокет может оставаться бездействующим (неактивным) перед тем, как будет разорвано соединение или предприняты другие действия.

  • send - время, отведенное на отправку данных через сокет. Если данные не удается отправить в течение указанного времени, операция будет прервана.

4.2 Блок arena_conf

Основной блок конфигурации DosGate. Данный блок не имеет значений по умолчанию и требует обязательной настройки.

Пример конфигурации:

arenas:
  - name: first
    id: 1
    nets:
      - rx:
          name: ens1f0
          mode: vlan
          vid: 50
        tx:
          name: ens1f0
          mac: 00:cc:34:47:a8:44
          mode: swap
          vid: 51
      - rx:
          name: ens1f0
          mode: vlan
          vid: 62
        tx:
          name: ens1f0
          mac: 00:cc:34:4a:88:30
          mode: swap
          vid: 63
      - rx:
          name: ens3f0
          mode: vlan
          vid: 54
        tx:
          name: ens3f0
          mac: 00:cc:34:4a:88:30
          mode: swap
          vid: 55
      - rx:
          name: ens3f0
          mode: vlan
          vid: 58
        tx:
          name: ens3f0
          mac: 00:cc:34:47:a8:44
          mode: swap
          vid: 59

Описание блока:

Arenas - Набор сетевых интерфейсов и настроек обработки и возврата трафика.

Name - Уникальное имя арены.

Id - Уникальный Id арены (обязателен с 3.2.2-5).

Name (nets) - Имя сетевого интерфейса, как показывает ip link. Обязательное поле.

MAC - MAC-адрес. Может быть записан в одном из следующих форматов:

XX:XX:XX:XX:XX:XX или XX-XX-XX-XX-XX-XX или XXXX.XXXX.XXXX

Где X - шестнадцатеричная цифра.

VID - VLAN id. Число от 0 до 4095, где 0 означает отсутствие тега.

Protocol - Протокол VLAN. Либо hex-число в формате 0x0000, либо мнемоническое значение:

Тэг Значение
802.1q, 8021q, q 0x8100
802.1ad, 8021ad, ad 0x88A8
802.1ah, 8021ah, ah 0x88E7
q-in-q, qq, qinq 0x9100
q-in-q1, qq2, qinq2 0x9200
q-in-q3, qq3, qinq3 0x9300

RX block - Описывает способ обработки входящего трафика. Должен присутствовать всегда.

      - rx:
          name: ens5
          inline: true
          mode: transparent
          tx-policy: lacp

Если в блоке указан MAC-адрес, то обрабатывается только трафик с этим destination address.

inline - Интерфейс работает в inline-режиме, то есть он невидим для других хостов в сети. ARP-запросы, широковещательные запросы, STP/GVRP/etc не передаются в ОС. Если опция не указана, то интерфейс пересылает этот трафик в ОС.


mode - Режим обработки входящего трафика:

  • vlan - обрабатывается только трафик в указанном VLAN, остальной пропускается в ОС. Если VID = 0 или не указан, обрабатывается только нетегированный трафик.
  • transparent - обрабатывается трафик во всех VLAN + нетегированный. Используется по умолчанию.

swap - Указывает, нужно ли менять MAC-адреса во фрейме при отправке.

Если указано false или 0, то адреса не меняются. Если указано true,1 или значение не указано , то адреса меняются.


tx-policy - управляет обработкой следующих классов трафика:

  • lacp — медленный протокол LACP.
  • llm — IEEE802.1 Link-local multicast, предназначенная для 01:80:C2:00:00:x.
  • multicast - Любой L2 multicast, кроме link-local.
  • unknown - unhandled ethertypes.

Например, если параметр LACP отсутствует, то LACP будет передан в ОС DosGate, а не в TX-интерфейс.


TX block - Описывает политику обработки трафика, который должен быть переслан в соответствии с окончанием обработки правилами или срабатывании действия ACCEPT. Если не указан, то копируется из блока RX, а отсутствующие в нём параметры принимают значения по умолчанию.

      - tx:
          name: ens4
          mac: fa:16:3e:56:32:6a
          swap: false

Если в блоке указан MAC-адрес, то трафик пересылается на него. В противном случае он отправляется на тот адрес, с которого был получен

Mode - Режим обработки исходящего трафика:

  • swap - меняется последний в стеке тег VLAN, или добавляется если трафик нетегированный. Если VID отсутствует, то пакет не меняется, если равен 0, то верхний тег снимается при наличии. Используется по умолчанию.
  • push - новый тег добавляется безусловно, даже если последний был точно таким же. Если VID = 0 или отсутствует, то ничего не добавляется.

cos - Класс сервиса в тегированных пакетах. Число от 0 до 7.

Reply block - Описывает политику обработки трафика, который должен быть переслан в соответствии с правилами, которые генерируют собственный трафик в ответ на входящий пакет.

        tx:
          name: ens5
          swap: false
        reply:
          name: ens4
          swap: true
  • Если reply не указан, то автоматически копируется из TX block. Формат полностью соответствует формату TX block.

4.3 Блок collectd

collectd:
  hostname: dosgate-srv1
  period: 10
  • hostname - имя хоста, который будет использоваться для именования метрик. Если вы устанавливаете DosGate в кластере, название должно быть уникально для каждой платформы. Именно под этим именем будут отображаться графики по серверам в общей статистике. Также с этим именем записываются метрики относительно сервера.
  • period - частота записи метрик в collectd.

4.4 Примеры конфигурационного файла dosgate.conf

Ниже приведены примеры конфигурационных файлов dosgate.conf:

Пример outline инсталяции с VLAN swap и возвратом трафика в том-же интерфейсе
sockets:
  - url: /run/dosgate/api.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: SCGI

  - url: /run/dosgate/fapi.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: FCGI
    timeout:
      send: 10
      idle: 10

  - url: /run/dosgate/crlf.socket
    user: nginx:nginx
    mode: 0660
    acl: any
    type: CRLF
    timeout:
      idle: 10
      send: 10

  - url: /run/dosgate/cli.socket
    user: root:dosgate
    mode: 0660
    acl: any
    type: CLI
    timeout:
      idle: 10
      send: 10

arenas:
  - name: first
    id: 1
    nets:
      - rx:
          name: ens1f0
          mode: vlan
          vid: 50
        tx:
          name: ens1f0
          mac: 00:cc:34:47:a8:44
          mode: swap
          vid: 51
      - rx:
          name: ens1f0
          mode: vlan
          vid: 62
        tx:
          name: ens1f0
          mac: 00:aa:12:45:87:99
          mode: swap
          vid: 63

collectd:
  hostname: dosgate-srv1
  period: 10
Пример inline инсталляции с возвратом трафика в другом интерфейсе, и обратным трафиком через DosGate
sockets:
  - url: /run/dosgate/api.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: SCGI

  - url: /run/dosgate/fapi.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: FCGI
    timeout:
      send: 120
      idle: 120

  - url: /run/dosgate/crlf.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: CRLF
    timeout:
      idle: 10
      send: 10

  - url: /run/dosgate/cli.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: CLI
    timeout:
      idle: 10
      send: 10

arenas:
  - name: first
    id: 1
    nets:
      - rx:
          name: enp4s0f0np0
          inline: true
          mode: transparent
        tx:
          name: enp4s0f1np1
          swap: false
        reply:
          name: enp4s0f0np0
          swap: true
  - name: output
    id: 2
    nets:
      - rx:
          name: enp4s0f1np1
          inline: true
          mode: transparent
        tx:
          name: enp4s0f0np0
          swap: false

collectd:
  hostname: dosgate-srv1
  period: 10
Пример inline инсталляции с возвратом трафика в другом интерфейсе, и обратным трафиком через DoSGate с LACP
sockets:
  - url: /run/dosgate/api.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: SCGI

  - url: /run/dosgate/fapi.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: FCGI
    timeout:
      send: 120
      idle: 120

  - url: /run/dosgate/crlf.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: CRLF
    timeout:
      idle: 10
      send: 10

  - url: /run/dosgate/cli.socket
    user: nginx
    group: nginx
    mode: 0660
    acl: any
    type: CLI
    timeout:
      idle: 10
      send: 10

arenas:
  - name: first
    id: 1
    nets:
      - rx:
          name: enp136s0f0
          mode: transparent
          inline: true
          tx-policy: lacp
        tx:
          name: enp136s0f1
          swap: false
        reply:
          name: enp136s0f0
          swap: true
      - rx:
          name: enp138s0f0
          mode: transparent
          inline: true
          tx-policy: lacp
        tx:
          name: enp138s0f1
          swap: false
        reply:
          name: enp138s0f0
          swap: true
  - name: output
    id: 2
    nets:
      - rx:
          name: enp136s0f1
          mode: transparent
          inline: true
          tx-policy: lacp
        tx:
          name: enp136s0f0
          swap: false
      - rx:
          name: enp138s0f1
          mode: transparent
          inline: true
          tx-policy: lacp
        tx:
          name: enp138s0f0
          swap: false

collectd:
  hostname: dosgate-srv1
  period: 10

5. Настройка конфигурации сессионного модуля

Все параметры работы cессионного модуля задаются в едином конфигурационном файле dosgate-uh.conf.

Для редактирования конфигурационного файла выполнить команду:

sudo nano /etc/dosgate-uh.conf

5.1 Глобальная конфигурация

Глобальные параметры определяют политику обработки сетевого трафика:

global:
  traffic-policy:  
    good: accept   # Разрешение корректного трафика
    bad: drop      # Отклонение подозрительного трафика
    violate: drop  # Отклонение нарушающего трафика

5.2 Конфигурация сетевых устройств

Для эффективного управления очередями приема и передачи пакетов необходимо настроить параметры сетевых интерфейсов:

net:
  ens224:
    rx:
      queues:
        count: 8  # Количество очередей приема
        len: 512  # Длина каждой очереди
  ens256:
    tx:
      queues:
        count: 8  # Количество очередей приема
        len: 512  # Длина каждой очереди

5.3 Настройки захвата трафика

Функция захвата трафика позволяет записывать сетевые пакеты в файлы для последующего анализа:

capture:
  path: /var/cache/dosgate-uh/capture      # Директория для сохранения
  filename: cap_${DEV}_${ID}_${NUM}.pcap   # Шаблон имен файлов
  age: 3600                                # Максимальное время хранения файла (в секундах)
  count: 10                                # Максимальное количество файлов
  size: 10M                                # Максимальный размер файла

5.4 Конфигурация сбора и экспорта статистики

Статистика помогает отслеживать состояние системы в реальном времени и экспортировать данные в систему мониторинга:

stats:
  period: 10                             # Период сбора статистики (в секундах)
  push:
    type: collectd                       # Метод передачи данных
    plugin: unixsock                     # Используемый плагин
    target: /var/run/collectd-unixsock   # Целевой сокет
    stats: all                           # Объем передаваемых данных
    hostname: dosgate-uh-srv1               # Идентификатор хоста
    queue-len: 0                         # Длина очереди отправки
    period:
      collect: 5                         # Интервал сбора данных (в секундах)
      send: 10                           # Интервал отправки данных (в секундах)

5.5 Настройка отслеживания подключений

Параметры контроля соединений позволяют задавать ограничения и определять политику обработки трафика:

conntrack:
  limit: 10000000       # Максимальное количество отслеживаемых соединений
  reclaim:
    soft: 80            # Порог мягкого освобождения соединений (в % от лимита)
    hard: 95            # Порог жесткого освобождения соединений (в % от лимита)

5.6 Путь к каталогу с реестром профиля приложения

По умолчанию: /var/lib/dosgate-uh/profiles

application:
  registry: /var/lib/dosgate-uh/profiles
  monitor-fs: true

5.7 Настройка экспорта фреймов

Обеспечение работы функции экспорта фреймов, которая выполняется в рамках действия dosgate action -j EXPORT:

frame-export:
  enabled: true         # Включение функции экспорта фреймов
  export-objects: all   # Экспорт всех объектов 

5.8 Пример конфигурационного файла dosgate-uh.conf

Ниже приведен пример конфигурационного файла dosgate-uh.conf:

global:
  threads: 8
  thread-policy: pooled
  cpus:
    irq: 0-7
    thread: 0-7
  traffic-policy:
    good: accept
    bad: drop
    violate: drop
  trace: exp

net:
  eth0:
    rx:
      queues:
        count: 8
        len: 512
    tx:
      queues:
        count: 8
        len: 512
  eth1:
    rx:
      queues:
        count: 8
        len: 512
    tx:
      queues:
        count: 8
        len: 512

capture:
  path: /var/cache/dosgate-uh/capture
  filename: cap_${DEV}_${ID}_${NUM}.pcap
  age: 10
  count: 1
  size: 100M

stats:
  period: 10
  push:
    type: collectd
    plugin: unixsock
    target: /var/run/collectd-unixsock
    stats: all
    hostname: dosgate-uh-srv1
    queue-len: 0
    period:
      collect: 5
      send: 10

conntrack:
  limit: 100000
  reclaim:
    soft: 80
    hard: 95

application:
  registry: /var/lib/dosgate-uh/profiles
  monitor-fs: true