# 17. Фильтр: настройка DPI

[← Оглавление](../README.md) · [← Раздел 16: Фильтр: ACL и пулы](16.md)

---

Модуль DPI (Deep Packet Inspection) — ключевая подсистема фильтра, отвечающая за анализ и фильтрацию трафика. Настройки DPI включают общие параметры модуля, конфигурацию работы с реестром Роскомнадзора, параметры деградации протоколов и индивидуальные настройки DPI-листов.

> **Примечание:** формат секции DPI различается между пилотным проектом (Урал) и федеральным проектом. В пилотном проекте настройки реестра Роскомнадзора находятся внутри DPI-листа 0. В федеральном проекте они вынесены в отдельную секцию, а все DPI-листы (0–15) стали абсолютно идентичными по структуре.

## 17.1. Общие настройки модуля DPI

Общие настройки расположены в корне секции `dpi` конфигурации фильтра.

### 17.1.1. Включение/выключение DPI

| Значение    | Поведение                                                 |
| ----------- | --------------------------------------------------------- |
| **enable**  | Модуль DPI активен, трафик анализируется и обрабатывается |
| **disable** | Модуль DPI выключен, весь трафик пропускается прозрачно   |

В рабочем режиме DPI должен быть **включён**. Выключение модуля DPI может использоваться для **диагностики**: если выключить DPI и убедиться, что фильтр больше не влияет на трафик — значит, проблема была именно в DPI-обработке.

### 17.1.2. Send RST off: отключение TCP Reset при блокировке протоколов

Параметр **send RST off** — важная настройка, определяющая поведение фильтра при блокировке распознанных протоколов.

| Значение | Поведение                                                |
| -------- | -------------------------------------------------------- |
| **off**  | TCP Reset при блокировке протоколов **не отправляется**  |
| **on**   | TCP Reset отправляется абоненту и серверу при блокировке |

В проекте ТСПУ параметр **всегда должен быть в режиме `off`**.

**Почему отправка TCP Reset опасна:**

Когда приложение абонента (например, Telegram) пытается установить TCP-соединение и получает в ответ TCP Reset, оно воспринимает это как временный сбой и **немедленно** пытается установить новое соединение. Этот цикл повторяется непрерывно и с высокой частотой:

1. Приложение отправляет TCP SYN;
2. Фильтр распознаёт протокол и отправляет TCP Reset;
3. Приложение мгновенно пытается установить новое соединение;
4. Цикл повторяется бесконечно.

На практике наблюдались случаи, когда мобильные устройства начинали **тормозить** из-за того, что Telegram непрерывно пытался переустановить заблокированную сессию. Количество генерируемых сессий создаёт **избыточную нагрузку** на фильтр.

При отключённой отправке Reset соединение **отбрасывается молча** — приложение пытается установить сессию, сессия «висит» и обрывается только по **тайм-ауту**. Это значительно снижает количество повторных попыток и нагрузку на фильтр.

### 17.1.3. Functionality mode: normal (не double mirror traffic)

| Значение                  | Описание                                     | Применение в ТСПУ |
| ------------------------- | -------------------------------------------- | ----------------- |
| **normal**                | Стандартный режим работы фильтра             | **Всегда**        |
| **double mirror traffic** | Режим для работы с копией (зеркалом) трафика | Не используется   |

Параметр **всегда должен быть `normal`**. Режим `double mirror traffic` предназначен для сценариев, когда фильтр получает зеркалированную копию трафика, что в проекте ТСПУ не применяется.

В секции DPI также присутствует устаревшая команда `extra analysis off` — она не используется и не требует внимания.

## 17.2. Настройка реестра РКН

Секция настройки реестра Роскомнадзора определяет параметры скачивания и обработки списков блокировки, предоставляемых Роскомнадзором.

> **Примечание:** в федеральном проекте эта секция вынесена в отдельный раздел конфигурации. В пилотном проекте (Урал) настройки находятся внутри DPI-листа 0.

### 17.2.1. Источник: RKN или ГРФЦ

| Источник | Описание                                                                |
| -------- | ----------------------------------------------------------------------- |
| **RKN**  | Оригинальный формат выгрузки с серверов Роскомнадзора                   |
| **ГРФЦ** | Новый формат выгрузки (оптимизированная база данных, уменьшенный объём) |

Роскомнадзор предложил новый источник списков — **ГРФЦ**. По сравнению с оригинальным форматом RKN, база данных ГРФЦ оптимизирована и уменьшена в объёме. Рекомендуется переключаться на выгрузку с ГРФЦ.

### 17.2.2. Логин/пароль для доступа к серверу РКН

Для скачивания реестра с сервера Роскомнадзора требуется **авторизация**. Логин и пароль задаются в секции настройки реестра. Учётные данные выдаются Роскомнадзором.

### 17.2.3. Привязка к DPI-листу (list number)

Параметр **list number** определяет, к какому DPI-листу будет привязан реестр Роскомнадзора. По умолчанию — **0**. В текущей конфигурации проекта ТСПУ фильтрация по реестру Роскомнадзора осуществляется в **DPI-листе 0**.

### 17.2.4. Proxy-сервер, dump server

| Параметр         | Описание                                                                          |
| ---------------- | --------------------------------------------------------------------------------- |
| **Proxy server** | Промежуточный сервер для доступа к реестру РКН, если прямое соединение невозможно |
| **Dump server**  | Сервер, на который фильтр выгружает скачанный реестр для внешнего анализа         |

**Proxy server** используется, когда фильтр не может напрямую подключиться к серверу Роскомнадзора.

**Dump server** полезен для диагностики: можно получить копию того же дампа, который скачал фильтр, и проанализировать его на внешнем сервере. Фильтр скачивает реестр, а затем выгружает его на указанный dump server.

### 17.2.5. Проблемы скачивания: минимальная скорость ~10 Мбит/с

Сервер Роскомнадзора настроен таким образом, что **разрывает соединение** при низкой скорости скачивания. Эмпирически установлено, что минимальная скорость загрузки для успешного скачивания реестра составляет **~10 Мбит/с**. При более низкой скорости сервер Роскомнадзора обрывает соединение через некоторое время.

**Типичные причины проблем со скачиванием:**

- Недостаточная скорость management-интерфейса;
- Ошибки на интерфейсе фильтра (в одном случае проблема решилась перезагрузкой фильтра);
- Проблемы на стороне коммутатора или промежуточного оборудования.

При диагностике проблем скачивания следует обращать внимание на скорость и ошибки на management-интерфейсе. Команда `dpi run` позволяет принудительно инициировать обновление всех DPI-листов (подробнее — в [разделе 18.13.4](18.md)).

> **Примечание:** запуск `dpi run` не гарантирует, что реестр будет скачан — сервер РКН может ответить, что обновлений нет, и в этом случае ничего скачано не будет.

## 17.3. Деградация протоколов (protocols capacity)

Механизм деградации протоколов позволяет **частично ухудшить** работу распознанного протокола вместо полной блокировки. Настройка выполняется в секции DPI для каждого протокола индивидуально.

### 17.3.1. Шкала 0–100: 0 = полная блокировка, 100 = полный пропуск

Для каждого протокола задаётся значение **capacity** в условных единицах от 0 до 100:

| Значение | Поведение                                         |
| -------- | ------------------------------------------------- |
| **0**    | Полная блокировка — ничего не пропускается        |
| **100**  | Полное пропускание — трафик не затрагивается      |
| **1–99** | Деградация — дроп пакетов с заданной вероятностью |

### 17.3.2. Дроп пакетов с заданной вероятностью

Механизм деградации работает просто: с определённой вероятностью, зависящей от параметра capacity, фильтр **дропает пакеты** в рамках сессии распознанного протокола. Чем ниже значение capacity, тем больше пакетов отбрасывается.

### 17.3.3. Эффективная деградация: 2–10% пропускания

На практике деградация становится **заметной для пользователя** только при значениях capacity в диапазоне **2–10**. Это объясняется свойствами TCP:

- TCP обладает встроенным механизмом **повторной передачи** потерянных пакетов;
- При низкой степени деградации (высоких значениях capacity) TCP успешно компенсирует потери, и пользователь практически ничего не замечает;
- Только при высокой степени деградации (capacity ~2–10) потери становятся настолько значительными, что TCP не успевает их компенсировать.

При значении capacity около **5** задержка отправки сообщений в приложениях может достигать **десятков секунд**.

### 17.3.4. Влияние на голосовые вызовы и мессенджеры

Деградация протоколов особенно эффективна для **голосовых вызовов** и **видеозвонков**, где потеря пакетов непосредственно влияет на качество:

- **Заикание** голоса и пропадание звука;
- **Рассинхронизация** аудио и видео;
- **Невозможность разговаривать** при высокой степени деградации;
- Для текстовых сообщений — значительные **задержки доставки**.

Деградация является альтернативой полной блокировке: вместо немедленного и очевидного отключения сервиса пользователь получает **постепенное ухудшение** качества связи.

## 17.4. Настройка DPI-листов (0–16)

На фильтре может быть настроено до **16 DPI-листов** (номера 0–15). В будущих прошивках это количество может быть расширено — планируется возможность генерации DPI-листов по необходимости на уровне конфигурации.

Все DPI-листы имеют **одинаковую структуру** настроек (в федеральном проекте). Каждый лист настраивается индивидуально.

### 17.4.1. Enable/disable каждого листа

Каждый DPI-лист может быть **включён или выключен** независимо от остальных:

```text
    dpi list <N>
        enable        ← включить лист
        disable       ← выключить лист
```

### 17.4.2. BitTorrent UTP detection

| Значение | Описание                                        |
| -------- | ----------------------------------------------- |
| **on**   | Включено распознавание протокола BitTorrent UTP |
| **off**  | Распознавание BitTorrent UTP выключено          |

Если требуется распознавание и блокировка BitTorrent, параметр должен быть включён (`on`).

### 17.4.3. WH List Mode: blacklist (по умолчанию) / whitelist

Параметр **WH list mode** определяет логику работы DPI-листа:

| Режим         | Поведение                                                         | Применение в ТСПУ |
| ------------- | ----------------------------------------------------------------- | ----------------- |
| **blacklist** | Всё, что совпало со списком — блокируется; остальное пропускается | **По умолчанию**  |
| **whitelist** | Пропускается только совпавший трафик; всё остальное блокируется   | Не используется   |

В проекте ТСПУ режим whitelist **не используется** из-за риска **случайной блокировки всего трафика**. Этот режим применяется в других сценариях, например, при использовании BRAS-функциональности на устройстве.

### 17.4.4. Behavior: block / ignore / color / redirect

Параметр **behavior** определяет, что происходит с трафиком, совпавшим со списком данного DPI-листа:

| Значение     | Описание                                                 | Применение в ТСПУ            |
| ------------ | -------------------------------------------------------- | ---------------------------- |
| **block**    | Трафик блокируется (дропается)                           | Основной рабочий режим       |
| **ignore**   | Совпадение фиксируется и логируется, трафик пропускается | Для распознавания протоколов |
| **color**    | Совпавший трафик «окрашивается»                          | Не используется              |
| **redirect** | Трафик перенаправляется                                  | Не используется              |

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

- Для **HTTP**: абоненту отправляется HTTP-редирект (302) на страницу-заглушку;
- Для **HTTPS**: абоненту и серверу отправляется TCP Reset, разрывающий соединение (поскольку содержимое зашифровано и подмена ответа невозможна).

**Режим ignore** — используется для **первой стадии двухстадийной блокировки**: фильтр распознаёт протоколы и отправляет логи на SPFS, но сам трафик не блокирует. Данные передаются в ЦСУ для формирования очищенных списков (подробнее — в [разделе 8](08.md)).

Также в секции DPI-листа присутствует параметр **logs on/off** — включение журналирования срабатываний данного списка. В проекте ТСПУ эта функциональность, как правило, используется.

### 17.4.5. Redirect URL — страница-заглушка для заблокированных HTTP-ресурсов

Параметр **redirect URL** задаёт адрес страницы-заглушки, на которую перенаправляется абонент при блокировке **HTTP-ресурса** по реестру Роскомнадзора.

Типичное содержимое страницы-заглушки: уведомление абонента о том, что запрошенный ресурс заблокирован в соответствии с требованиями законодательства.

> **Важно:** redirect URL работает **только для HTTP-трафика**. Для HTTPS-трафика перенаправление невозможно (содержимое зашифровано), поэтому используется TCP Reset.

Также в секции DPI-листа присутствуют параметры, связанные с redirect behavior (redirect interval и др.) — в проекте ТСПУ они **не используются**.

### 17.4.6. Download URL — источник списков, update schedule

| Параметр            | Описание                                                             |
| ------------------- | -------------------------------------------------------------------- |
| **Download URL**    | URL, откуда фильтр скачивает список фильтрации для данного DPI-листа |
| **Update schedule** | Интервал обновления списка (например, 30 минут)                      |

Download URL задаёт источник списков для DPI-листов, **не связанных** с реестром Роскомнадзора (скачивание реестра РКН настраивается отдельно — см. [раздел 17.2](#172-настройка-реестра-ркн)). Типичный источник — ресурс в **центральной системе управления** (ЦСУ), откуда загружаются очищенные протокольные списки.

**Update schedule** определяет частоту обновления:

| Значение     | Поведение                                          |
| ------------ | -------------------------------------------------- |
| Время (мин.) | Список обновляется с заданным интервалом           |
| **never**    | Список **никогда не обновляется** и не скачивается |

> **Внимание:** значение `never` — частая причина проблем. Если всё настроено корректно, но update schedule установлен в `never`, списки просто не будут скачиваться. Необходимо задать конкретный интервал обновления.

### 17.4.7. Protocols — список распознаваемых протоколов

В секции **protocols** каждого DPI-листа указываются протоколы, по которым будет осуществляться распознавание и последующее действие (блокировка, игнорирование и т.д.).

Список протоколов задаётся перечислением названий: Telegram, WhatsApp, Viber, BitTorrent и др. Набор поддерживаемых протоколов определяется версией прошивки фильтра.

### 17.4.8. No IP / IP — исключение/включение адресов для обработки

Параметры **IP** и **No IP** определяют, какой трафик подлежит обработке данным DPI-листом:

| Параметр               | Описание                                                              |
| ---------------------- | --------------------------------------------------------------------- |
| **IP**                 | Подсети и адреса, которые **должны обрабатываться** данным DPI-листом |
| **No IP**              | Локальные адреса абонентов, **исключённые** из обработки              |
| **No IP Remote**       | Удалённые адреса (серверы), **исключённые** из обработки              |
| **IPv6** / **No IPv6** | Аналогичные параметры для IPv6-трафика                                |

По умолчанию параметр **IP** должен содержать сеть `0.0.0.0/0` для всех VLAN — тогда весь трафик, попавший в DPI, будет обрабатываться данным листом.

**Использование No IP для диагностики:**

Параметр **No IP** — ключевой инструмент траблшутинга. Чтобы проверить, влияет ли данный DPI-лист на конкретного абонента:

1. Добавить локальный IP-адрес абонента в **No IP** данного DPI-листа;
2. Выполнить `apply`;
3. Проверить, изменилось ли поведение у абонента;
4. Если приложение у абонента **заработало** — данный DPI-лист действительно блокировал его трафик;
5. Если **ничего не изменилось** — проблема не в данном DPI-листе.

Параметр **No IP Remote** работает аналогично, но исключает из обработки удалённый IP-адрес (адрес сервера).

### 17.4.9. QUIC list

Параметр **QUIC list** определяет список ресурсов, для которых должен распознаваться протокол **QUIC** (Quick UDP Internet Connections) — протокол, разработанный Google для оптимизации доставки контента.

Фильтр **умеет распознавать** QUIC, но для этого необходимо внести ресурсы, которые планируется обрабатывать, в QUIC list.

## 17.5. Формат списков фильтрации

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

### 17.5.1. IP-адреса, подсети, диапазоны, URL

Поддерживаемые форматы записей в списках:

| Формат              | Пример                    | Описание               |
| ------------------- | ------------------------- | ---------------------- |
| IP-адрес            | `1.2.3.4`                 | Конкретный IP-адрес    |
| Подсеть             | `10.0.0.0/8`              | Подсеть в CIDR-нотации |
| Диапазон IP         | `1.2.3.4-1.2.3.10`        | Диапазон адресов       |
| URL                 | `http://example.com/page` | Конкретный URL (HTTP)  |
| Домен               | `example.com`             | Домен (HTTP и HTTPS)   |
| Домен с поддоменами | `*.example.com`           | Домен и все поддомены  |

Если в начале URL стоит **звёздочка** (`*`), обрабатываются **все протоколы** (HTTP и HTTPS) и **все поддомены** данного домена. Если протокол **не указан явно**, обрабатываются и HTTP, и HTTPS.

### 17.5.2. HTTP: блокировка конкретного URL

Для **HTTP**-трафика возможна блокировка **конкретного URL** — вплоть до отдельной страницы. Это обусловлено тем, что при HTTP-соединении URL передаётся **в открытом виде** в заголовке запроса, и фильтр может его проанализировать.

Пример: запись `http://example.com/specific/page.html` в списке заблокирует **только эту конкретную страницу**, остальные страницы на `example.com` останутся доступными.

### 17.5.3. HTTPS: блокировка только по домену (SNI/Client Hello)

Для **HTTPS**-трафика блокировка возможна **только на уровне домена**. Это фундаментальное ограничение, связанное с механизмом установления HTTPS-соединения:

1. При установлении HTTPS-соединения клиент отправляет **Client Hello**;
2. В Client Hello содержится поле **SNI** (Server Name Indication), указывающее доменное имя сервера;
3. Поле SNI содержит **только домен** (например, `ru.wikipedia.org`) — **без пути и URL**;
4. Всё остальное содержимое HTTPS-соединения **зашифровано** и недоступно для анализа.

**Практическое следствие:** если в списке указана строка вида `https://ru.wikipedia.org/wiki/Конкретная_статья`, фильтр заблокирует **весь домен** `ru.wikipedia.org` целиком, а не конкретную страницу. Поле SNI не содержит пути URL, поэтому фильтр видит только домен и блокирует все обращения к нему.

| Протокол  | Точность блокировки         | Причина                               |
| --------- | --------------------------- | ------------------------------------- |
| **HTTP**  | До конкретного URL/страницы | URL виден в открытом виде в заголовке |
| **HTTPS** | Только весь домен целиком   | В SNI (Client Hello) только домен     |

---

[← Оглавление](../README.md) · [← Раздел 16: Фильтр: ACL и пулы](16.md) · [Раздел 18: Фильтр: мониторинг и диагностика →](18.md)
