Добавлены новые разделы:

- Раздел 22: Балансировщик: мониторинг и диагностика
- Раздел 23: Распознавание протоколов (DPI Engine)
- Раздел 24: Траблшутинг

Каждый раздел включает команды, описания и практические примеры для диагностики и мониторинга работы балансировщика и системы фильтрации.
This commit is contained in:
Daniel Lavrushin
2026-02-20 13:59:30 +01:00
parent f1d391ccf3
commit 10fb7f4e18
25 changed files with 801 additions and 68 deletions

130
chapters/01.md Normal file
View File

@@ -0,0 +1,130 @@
# 1. Введение и общая архитектура АСБИ
[← Оглавление](../README.md)
---
## 1.1. Что такое АСБИ
**АСБИ** (Автоматизированная система обеспечения безопасности интернета) — это государственная система, создаваемая в рамках реализации закона о суверенном интернете. Её основная задача — обеспечить возможность анализа, фильтрации и управления интернет-трафиком на уровне операторов связи на всей территории Российской Федерации.
АСБИ представляет собой распределённую иерархическую систему, состоящую из:
- **ТСПУ** (технические средства противодействия угрозам) — комплексы оборудования, устанавливаемые непосредственно у операторов связи;
- **Центральная система управления (ЦСУ)** — централизованная платформа для управления всеми ТСПУ, развёрнутая на двух физически независимых площадках с резервированием.
Все ТСПУ связаны с ЦСУ и управляются через неё. Именно через центральную систему управления выполняются основные операции по конфигурированию, мониторингу и обновлению оборудования ТСПУ.
## 1.2. Закон о суверенном интернете и участники проекта
Проект АСБИ реализуется в рамках **закона о суверенном интернете** (Федеральный закон № 90-ФЗ). В реализации проекта участвуют несколько ключевых организаций:
| Роль | Организация | Описание |
| -------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Заказчик** | ГУП ГРЧЦ (Главный радиочастотный центр) | Представляет интересы государства |
| **Генеральный подрядчик** | АО «ДЦА» | Осуществляет общее руководство проектом |
| **Поставщик оборудования** | RDP.ru | Поставляет два типа устройств: **балансировщики** и **фильтры**, а также разрабатывает часть системы управления |
Проект развивался поэтапно:
- **Пилотный проект** — развёрнут на Урале, включает ограниченное количество площадок. Использует байпасы GL Sun и раннюю версию ЦСУ;
- **Федеральный проект** — масштабное развёртывание по всей стране. Включает байпасы Silicom, новое оборудование фильтров (модели 2020 года), новую версию ЦСУ и эшелонированную систему фильтрации. На данном этапе предполагается порядка **350 площадок** и суммарно около **5 000 устройств**.
## 1.3. Что такое ТСПУ — комплекс оборудования у операторов связи
**ТСПУ** (Технические средства противодействия угрозам) — это комплекс оборудования, который устанавливается **в разрыв каналов связи оператора**. ТСПУ перехватывает проходящий трафик, анализирует его и при необходимости выполняет блокировку или деградацию определённых типов соединений.
Ключевой принцип работы ТСПУ — **прозрачность для оператора**. С точки зрения сетевой топологии оператора, ТСПУ представляет собой «прозрачный провод»: трафик, вошедший через определённый канал связи, обязательно возвращается в тот же канал. Оператор не должен вносить изменения в свою маршрутизацию при установке ТСПУ.
ТСПУ может устанавливаться в нескольких различных местах сети оператора (подробнее — в [разделе 6](06.md)), и на одной площадке оператора может быть развёрнуто различное количество оборудования в зависимости от объёма трафика и количества каналов связи.
Существует два типа ТСПУ:
- **ТСПУ тип А** (первый эшелон) — основной тип, устанавливается у большинства операторов. Когда говорят просто «ТСПУ» без уточнения, подразумевают именно тип А;
- **ТСПУ тип Б** (второй эшелон, эшелонированная система) — устанавливается на уровне ядра сети крупных операторов для обработки трафика, который не прошёл через ТСПУ тип А (подробнее — в [разделе 7](07.md)).
## 1.4. Общая схема: байпасы, балансировщики, фильтры, сегмент управления
ТСПУ состоит из следующих подсистем (устройств):
```text
Оборудование оператора
┌───────┴───────┐
│ Байпасы │ ← защита каналов оператора
└───────┬───────┘
┌───────┴───────┐
│Балансировщики │ ← распределение трафика
└───────┬───────┘
┌─────────────┼─────────────┐
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
│Фильтр │ │Фильтр │ │Фильтр │ ← анализ и фильтрация
└───────┘ └───────┘ └───────┘
──────────────────────────────────────────
Сегмент управления (VPN → ЦСУ)
```
### Байпасы
Байпасы — это устройства, обеспечивающие **физическую защиту каналов связи оператора**. Каналы связи оператора разрываются и заворачиваются на байпас. Количество байпасов на площадке определяется количеством линков оператора, в разрыв которых устанавливается ТСПУ.
Байпасы работают на скоростях **10100 Гбит/с** (в отдельных случаях — 1 Гбит/с). В случае аварии (например, обесточивания) байпас замыкает каналы напрямую, минуя остальное оборудование ТСПУ, чтобы не нарушить связность сети оператора.
### Балансировщики
Балансировщики — это **высокопроизводительные программируемые коммутаторы**, принимающие трафик от байпасов и распределяющие его по подключенным фильтрам.
Основные характеристики:
- 32-портовые, одноюнитовые (1U);
- пропускная способность — **3,2 Тбит/с** (на полной скорости при размере пакета более 160 байт);
- количество балансировщиков зависит от количества каналов связи и объёма трафика оператора.
Все порты балансировщика разделяются на две группы:
- **LAN-порты** — в сторону оборудования оператора (через байпасы), где находятся абоненты;
- **WAN-порты** — в сторону интернета.
Эта идеология LAN/WAN прослеживается через всё оборудование ТСПУ — от байпасов до фильтров.
### Фильтры
Фильтры — это **основные устройства ТСПУ**, занимающиеся непосредственно анализом и обработкой трафика (DPI — Deep Packet Inspection). Именно на фильтрах выполняется распознавание протоколов, фильтрация по реестру Роскомнадзора, блокировка и деградация трафика.
Количество фильтров зависит **исключительно от объёма трафика**, который необходимо обрабатывать:
- У оператора с большим количеством каналов, но небольшим объёмом трафика — может быть мало фильтров;
- У оператора с малым количеством высокоскоростных каналов и большим трафиком — потребуется много фильтров.
Фильтры подключаются к балансировщикам преимущественно интерфейсами **10 Гбит/с Ethernet** (в отдельных случаях — 1 Гбит/с). Количество интерфейсов между балансировщиком и фильтрами может значительно превышать количество каналов в сторону оператора.
### Сегмент управления
Сегмент управления — это набор коммутаторов, VPN-шлюзов и вспомогательных серверов, обеспечивающих связь оборудования ТСПУ с центральной системой управления. Через VPN-канал все устройства площадки подключаются к ЦСУ, что позволяет удалённо управлять каждым компонентом ТСПУ.
В состав сегмента управления также входят:
- **SPFS** (сервер предварительного формирования списков) — собирает протокольные логи с фильтров и передаёт их в ЦСУ для формирования списков блокировки;
- **СПХД** (сервер предварительного хранения данных) — используется для хранения системных логов с устройств площадки.
### Простейший вариант ТСПУ
В минимальной конфигурации ТСПУ может состоять из:
- **1 байпас** — для одного-двух каналов связи;
- **1 фильтр** — для обработки всего трафика оператора;
- **Сегмент управления** — SPFS, СПХД, коммутатор, VPN-шлюз.
В таком варианте балансировщик не требуется, так как весь трафик обрабатывается одним фильтром. Однако могут быть подключены только каналы 1 или 10 Гбит/с Ethernet, поскольку фильтры текущего проекта не поддерживают интерфейсы 100 Гбит/с — только 1G и 10G в зависимости от модели.
### Типовая схема ТСПУ
В типовой конфигурации присутствуют все компоненты: несколько байпасов (по количеству каналов оператора), один или несколько балансировщиков и множество фильтров. Балансировщик принимает трафик от всех байпасов, распределяет его по фильтрам для обработки, после чего обработанный трафик возвращается через балансировщик и байпас обратно в сеть оператора.
---
[← Оглавление](../README.md) · [Раздел 2: Прохождение трафика через ТСПУ →](02.md)

248
chapters/02.md Normal file
View File

@@ -0,0 +1,248 @@
# 2. Прохождение трафика через ТСПУ
[← Оглавление](../README.md) · [← Раздел 1: Введение и общая архитектура АСБИ](01.md)
---
## 2.1. Стык оператора связи: типы инкапсуляции
ТСПУ устанавливается в разрыв канала связи внутри сети оператора. На стыке, в который врезается ТСПУ, трафик представляет собой поток пакетов между оборудованием оператора — с одной стороны абоненты, с другой стороны интернет.
Рассмотрим прохождение пакета с точки зрения абонента. У абонента есть **локальный IP-адрес** и **локальный порт** (local IP, local port). У интернет-ресурса, к которому обращается абонент, есть **удалённый IP-адрес** и **удалённый порт** (remote IP, remote port).
```text
Абонент → Интернет:
┌─────────────────────────────────────────────┐
│ Source: local IP : local port │
│ Destination: remote IP : remote port │
└─────────────────────────────────────────────┘
Интернет → Абонент:
┌─────────────────────────────────────────────┐
│ Source: remote IP : remote port │
│ Destination: local IP : local port │
└─────────────────────────────────────────────┘
```
При обратном пакете (от ресурса к абоненту) source и destination меняются местами.
### Инкапсуляция на стыке оператора
На стыке оператора связи пакет может иметь различную дополнительную инкапсуляцию. Это зависит от технологий, применяемых конкретным оператором, и от места в сети, куда устанавливается ТСПУ.
Общая структура кадра Ethernet с учётом возможных дополнительных заголовков:
```text
┌──────────┬─────────────────┬──────────────┬─────────┬──────┐
│ Ethernet │ Доп. заголовки │ IP-заголовок│ TCP/UDP │ Data │
│ заголовок│ (??? ) │ │ │ │
└──────────┴─────────────────┴──────────────┴─────────┴──────┘
```
В поле дополнительных заголовков могут встречаться:
| Тип инкапсуляции | Описание |
| -------------------- | ------------------------------------------------- |
| **Без инкапсуляции** | Чистый IP-пакет, дополнительных заголовков нет |
| **VLAN (802.1Q)** | Один VLAN-тег (тегированный пакет) |
| **QinQ (802.1ad)** | Два VLAN-тега (дважды тегированный пакет) |
| **MPLS** | Одна или несколько MPLS-меток |
| **MPLS + VLAN** | Комбинация MPLS-меток и VLAN-тегов |
| **PPPoE** | PPP-инкапсуляция (характерна для участка до BRAS) |
| **PPPoE + MPLS** | PPP внутри MPLS-туннеля |
Вариантов инкапсуляции в операторских сетях очень много, и все они не могут быть перечислены исчерпывающим образом. Ключевой момент: **ТСПУ должен уметь разбираться со всеми этими заголовками**, чтобы добраться до IP-пакета и выполнить его анализ и обработку. Всё, что находится «поверх» IP-заголовка, прозрачно пропускается — никакие метки и теги ТСПУ не снимает и не модифицирует.
## 2.2. Разделение на LAN-порты и WAN-порты
Фундаментальный принцип организации портов на всех устройствах ТСПУ — разделение на **LAN** и **WAN**:
- **LAN-порты** — порты, смотрящие в сторону **абонентов** (внутренняя сторона сети оператора);
- **WAN-порты** — порты, смотрящие в сторону **интернета** (внешняя сторона).
```text
Абоненты Интернет
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ LAN-порт │ ◄── ТСПУ ──► │ WAN-порт │
└──────────┘ └──────────┘
```
Эта идеология **прослеживается через всё оборудование ТСПУ** — от байпасов до балансировщиков и фильтров. Все порты на любом устройстве ТСПУ можно разделить на две группы: порты в сторону абонентов (LAN) и порты в сторону интернета (WAN).
На **фильтрах** разделение реализовано жёстко: все **чётные** порты — LAN, все **нечётные** — WAN. На **балансировщиках** аналогичное разделение принято по договорённости при проектировании схем: чётные порты назначаются LAN-портами, нечётные — WAN-портами.
Этот принцип является основой для корректной обработки трафика: пакет, вошедший через определённый LAN-порт, после обработки обязательно выходит через парный ему WAN-порт (и наоборот), что обеспечивает прозрачность ТСПУ для сети оператора.
## 2.3. Простейший вариант ТСПУ (один байпас, один фильтр)
В минимальной конфигурации ТСПУ может состоять всего из трёх компонентов:
- **один байпас** — для одного-двух каналов связи оператора;
- **один фильтр** — для обработки всего проходящего трафика;
- **сегмент управления** — SPFS, СПХД, коммутатор, VPN-шлюз.
```text
Оборудование Оборудование
оператора оператора
(LAN) (WAN)
│ │
│ ┌───────────┐ │
└────┤ Байпас ├────┘
└─────┬─────┘
┌─────┴─────┐
│ Фильтр │
└───────────┘
─────────────────────────────
Сегмент управления
(SPFS, СПХД, VPN)
```
В таком варианте **балансировщик не нужен**, поскольку весь трафик обрабатывается одним фильтром и распределение по нескольким фильтрам не требуется. Каналы от байпаса подключаются непосредственно к портам фильтра.
Ограничение: могут быть подключены только каналы **1 Гбит/с** или **10 Гбит/с** Ethernet, поскольку фильтры текущего проекта не поддерживают интерфейсы 100 Гбит/с — только 1G и 10G в зависимости от конкретной модели.
## 2.4. Типовая схема ТСПУ
В типовой конфигурации присутствуют все компоненты системы: байпасы, балансировщики и фильтры. Рассмотрим полный путь пакета через ТСПУ.
### Общая схема прохождения трафика
```text
Оборудование оператора Оборудование оператора
(сторона абонентов, LAN) (сторона интернета, WAN)
│ │ │ │
│ Канал 1 │ │ Канал 1 │
┌────┴───────────┴───┐ ┌────┴───────────┴───┐
│ Байпас 1 │ │ Байпас 1 │
│ Net0 Net1│ │ Mon0 Mon1 │
└────┬───────────┬───┘ └────┬───────────┬───┘
│ │ │ │
┌────┴───────────┴───────────────────┴───────────┴───┐
│ Балансировщик │
│ │
│ ┌─────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Фильтры │ │ Группа │ │ Программный │ │
│ │ (Flow │──►│ балансировки │──►│ заголовок │ │
│ │ rules) │ │ (хэш) │ │ (+4 байта) │ │
│ └─────────┘ └──────────────┘ └─────────────┘ │
└───┬────┬────┬──────────────────────┬────┬────┬─────┘
│ │ │ │ │ │
┌──┴──┐ │ ┌──┴──┐ ┌──┴──┐ │ ┌──┴──┐
│Ф-р 1│ │ │Ф-р 2│ │Ф-р 1│ │ │Ф-р 2│
│ LAN │ │ │ LAN │ ... │ WAN │ │ │ WAN │
└─────┘ │ └─────┘ └─────┘ │ └─────┘
│ │
┌──┴──┐ ┌──┴──┐
│Ф-р N│ │Ф-р N│
│ LAN │ │ WAN │
└─────┘ └─────┘
```
### Этап 1: Байпас
Канал связи оператора физически разрывается и заводится на байпас. Байпас обеспечивает защиту канала: в случае аварии он замыкает линки напрямую, минуя остальное оборудование ТСПУ. В штатном режиме (Inline) байпас прозрачно пропускает трафик дальше — в сторону балансировщика.
Подробнее о режимах работы байпаса — в [разделе 3](03.md).
### Этап 2: Балансировщик — фильтрация служебного трафика
На входе в балансировщик порты объединяются в **линки** — логические пары LAN + WAN. Трафик, пришедший через конкретный LAN-порт, **обязательно возвращается** через парный ему WAN-порт (и наоборот). Это гарантирует, что ТСПУ не нарушает маршрутизацию оператора.
Первым делом трафик проходит через **правила фильтрации** (flow rules) балансировщика. Здесь определяется, какой трафик следует отправить на анализ фильтрами, а какой — сразу вернуть обратно оператору (забайпасить). Байпасятся, как правило:
- служебные протоколы (например, BGP — TCP-порт 179);
- мультикаст-трафик;
- протоколы маршрутизации;
- прочий трафик, который не нужно и нежелательно анализировать.
В принципе, с таким трафиком на фильтрах ничего плохого не произойдёт, но лучше его не трогать — это снижает нагрузку и исключает потенциальное влияние на служебные протоколы оператора.
### Этап 3: Балансировщик — распределение по фильтрам
Трафик, не попавший под правила байпаса, отправляется в **группу балансировки**. В этой группе подключены все фильтры площадки. Балансировщик распределяет пакеты по фильтрам на основе **хэш-суммы**, вычисляемой по трём параметрам:
1. **Source IP** (адрес источника)
2. **Destination IP** (адрес назначения)
3. **IP-протокол** (TCP, UDP и т.д.)
К хэшу также добавляется **количество ядер фильтров**, чтобы пакет не просто попал на конкретный фильтр, но и был распределён на конкретное ядро для обработки.
Для передачи информации о балансировке к пакету добавляется **дополнительный 4-байтовый заголовок** (по структуре похож на VLAN-тег, но таковым не является). Этот заголовок сообщает фильтру, на какое ядро направить пакет. После обработки фильтр возвращает пакет с тем же 4-байтовым заголовком, по которому балансировщик определяет, в какой именно операторский линк нужно вернуть пакет.
**Симметричность хэша** — ключевое свойство балансировки. При вычислении хэша для обратного пакета (от интернета к абоненту) source и destination меняются местами, но итоговая хэш-сумма совпадает. Благодаря этому:
- оба направления одной сессии **всегда попадают на один и тот же фильтр**;
- более того — на одно и то же **ядро** этого фильтра;
- сессия никогда не распределяется по разным фильтрам, что позволяет корректно собирать и анализировать её на одном устройстве.
### Этап 4: Обработка на фильтре
Пакет, попавший на фильтр, проходит через цепочку проверок:
```text
Пакет
┌──────────────────┐ Нет
│ IP-пакет? │──────────► Прозрачный пропуск
└────────┬─────────┘
│ Да
┌──────────────────┐ Нет
│ Попал в ACL? │──────────► Прозрачный пропуск
│ (привязка к │
│ пулу) │
└────────┬─────────┘
│ Да
┌──────────────────┐ Нет
│ Попал в │──────────► Прозрачный пропуск
│ DPI-лист? │
│ (IP-подсети) │
└────────┬─────────┘
│ Да
┌──────────────────┐
│ Движок DPI │
│ (анализ и │
│ решение) │
└────────┬─────────┘
┌────┴────┐
▼ ▼
Пропустить Заблокировать
(drop)
```
1. **Проверка: IP-пакет или нет.** Если пакет не является IP-пакетом (например, служебный keep-alive от балансировщика), он прозрачно пропускается через парный порт обратно в сеть оператора.
2. **Проверка по ACL.** На фильтре настроены списки контроля доступа (ACL), привязанные к пулам. Если пакет не попадает ни в один ACL — он прозрачно пропускается.
3. **Проверка по DPI-листу.** В DPI-листе указаны IP-подсети и адреса, подлежащие проверке. Если IP-адреса пакета не попадают в обработку DPI-листа — пакет прозрачно пропускается.
4. **Обработка движком DPI.** Только пакеты, прошедшие все предыдущие проверки, попадают на анализ DPI-движком. По результатам анализа принимается решение: пропустить пакет или заблокировать (drop).
Фильтр работает на уровне **L2** — он не изменяет Ethernet-кадр и не участвует в маршрутизации. С точки зрения сети оператора, фильтр представляет собой **«прозрачный провод»**: все заголовки инкапсуляции (VLAN-теги, MPLS-метки и т.д.) проходят через фильтр без изменений. Фильтр разбирает стек заголовков только для того, чтобы добраться до IP-пакета и выполнить анализ, после чего пакет (в случае пропуска) передаётся дальше в неизменном виде.
### Особенность: HTTP-редирект и TCP Reset при наличии MPLS
Особый случай возникает, когда фильтру нужно отправить абоненту **HTTP-редирект** (код 302, перенаправление на страницу-заглушку) или **TCP Reset** при блокировке HTTPS-ресурса.
Фильтр не может просто сгенерировать ответный пакет, поскольку канал между балансировщиком и фильтром **однонаправленный** с точки зрения сессии — пакет от абонента приходит через LAN-порт, и ответ должен уйти абоненту с корректными заголовками инкапсуляции (в том числе MPLS-метками), которые фильтр сам сгенерировать не может.
Поэтому используется следующая логика:
1. Пакет от абонента в сторону интернет-ресурса **пропускается** как есть;
2. Фильтр **ожидает обратный пакет** от интернет-ресурса в рамках той же сессии;
3. Когда обратный пакет приходит (уже с корректными заголовками, включая нужные MPLS-метки), фильтр **подменяет** содержимое этого пакета на HTTP-редирект или TCP Reset;
4. Модифицированный пакет отправляется абоненту с сохранением всей инкапсуляции.
Таким образом, пакет доставляется абоненту с корректными сетевыми заголовками, и HTTP-редирект или разрыв соединения срабатывает штатно.
---
[← Оглавление](../README.md) · [← Раздел 1: Введение и общая архитектура АСБИ](01.md) · [Раздел 3: Байпас →](03.md)

216
chapters/03.md Normal file
View File

@@ -0,0 +1,216 @@
# 3. Байпас (Bypass)
[← Оглавление](../README.md) · [← Раздел 2: Прохождение трафика через ТСПУ](02.md)
---
## 3.1. Назначение и роль байпаса в ТСПУ
Байпас — это устройство, обеспечивающее **физическую защиту каналов связи оператора** при установке ТСПУ. Каналы связи оператора физически разрываются и заводятся на байпас, который в штатном режиме прозрачно пропускает трафик дальше — в сторону балансировщика и фильтров.
Основная задача байпаса — гарантировать, что **при любой аварии оборудования ТСПУ** (отказ фильтров, балансировщиков, обесточивание) связность сети оператора не будет нарушена. В аварийной ситуации байпас замыкает каналы оператора напрямую, минуя остальное оборудование ТСПУ.
Количество байпасов на площадке определяется **количеством линков оператора**, в разрыв которых устанавливается ТСПУ. Байпасы работают на скоростях **10100 Гбит/с** (в отдельных случаях — 1 Гбит/с).
В проекте АСБИ используются два типа байпасов:
| Проект | Производитель | Особенности |
| ------------------- | ------------- | ----------------------------------------------------- |
| **Федеральный** | Silicom | Полный набор режимов, безфлаповое переключение |
| **Пилотный (Урал)** | GL Sun | Только Power-off Bypass, флап линков при переключении |
## 3.2. Байпасы Silicom (федеральный проект)
Байпасы Silicom устанавливаются в рамках федерального проекта и обладают полным набором режимов работы, обеспечивающих гибкое управление прохождением трафика.
### 3.2.1. Порты: Net0/Net1 (оператор) и Mon0/Mon1 (балансировщик)
Для каждого канала связи байпас Silicom имеет **четыре порта**:
- **Net0** и **Net1** — порты, подключаемые к оборудованию оператора (две стороны разорванного канала);
- **Mon0** и **Mon1** — порты, подключаемые к балансировщику (или напрямую к фильтру в простейшей конфигурации).
```text
Оборудование Оборудование
оператора оператора
(сторона A) (сторона B)
│ │
▼ ▼
┌──────────────────────────┐
│ Байпас Silicom │
│ │
│ Net0 Net1 │
│ │ │ │
│ │ (логика │ │
│ │ режимов) │ │
│ │ │ │
│ Mon0 Mon1 │
└────┬──────────────────┬──┘
│ │
▼ ▼
В сторону балансировщика
```
### 3.2.2. Режим Inline — основной рабочий режим
**Inline** — основной рабочий режим байпаса. В этом режиме трафик прозрачно пропускается насквозь от оборудования оператора к балансировщику и обратно:
- Net0 → Mon0 (трафик от оператора к балансировщику)
- Mon1 → Net1 (обратный трафик)
- И симметрично для другого направления.
```text
Net0 ─────────────► Mon0
──► к балансировщику
Net1 ◄───────────── Mon1
```
Весь трафик оператора проходит через ТСПУ и подвергается анализу и фильтрации. Это штатный режим работы при нормальном функционировании всего оборудования.
### 3.2.3. Режим TAP — копирование трафика без влияния на оператора
**TAP** — режим зеркалирования (копирования) трафика. В этом режиме:
1. Каналы оператора **замыкаются напрямую** между собой (Net0 ↔ Net1);
2. **Копия трафика** отправляется в сторону балансировщика через порты Mon0/Mon1;
3. Обратный трафик от балансировщика **не принимается**.
```text
Net0 ◄────────────► Net1 ← канал оператора замкнут
│ │
└──► Mon0 Mon1 ◄──┘ ← копия трафика
(только отправка)
```
В режиме TAP система фильтрации получает **полную копию** всего трафика оператора, но **никаким образом не может на него повлиять** — ни заблокировать, ни модифицировать. Это делает TAP идеальным **режимом отладки**: можно настраивать систему фильтрации, выявлять проблемы, проверять работу DPI — при полной гарантии, что операторский трафик не пострадает.
### 3.2.4. Режим Active Bypass — замыкание без копирования
**Active Bypass** — режим чистого обхода. Практически идентичен режиму TAP, за исключением того, что **копия трафика в сторону балансировщика не отправляется**:
```text
Net0 ◄────────────► Net1 ← канал оператора замкнут
← трафик к балансировщику НЕ идёт
Mon0 Mon1
(неактивен) (неактивен)
```
Каналы оператора замыкаются напрямую. ТСПУ полностью исключено из пути прохождения трафика. Этот режим используется, когда необходимо полностью отключить ТСПУ от обработки трафика, например, при проведении технических работ на оборудовании фильтрации.
### 3.2.5. Режим Power-off Bypass — аварийное замыкание при обесточивании
**Power-off Bypass** — аварийный режим, в который байпас переходит автоматически при **отключении электропитания**. На физическом уровне (вероятно, оптический переключатель внутри оборудования) каналы замыкаются напрямую:
```text
Net0 ◄═══════════► Net1 ← физическое замыкание
← оптический переключатель
Mon0 Mon1
(обесточены) (обесточены)
```
Это **последнее средство** защиты трафика оператора. При переключении в этот режим:
- у оператора **возможны флапы линков** (оптика «моргает»);
- перерыв в трафике более существенный, чем при переключении между другими режимами;
- оператор почувствует переключение — может начать перестраиваться маршрутизация;
- последствия более негативные, но это **аварийный** случай.
### 3.2.6. Переключение между режимами и влияние на оператора
Ключевое преимущество байпасов Silicom — переключение между режимами **Inline**, **TAP** и **Active Bypass** происходит **безболезненно для оператора связи**:
- порты оператора **не флапают** (не падают);
- возможна лишь **кратковременная потеря единичных пакетов** — тех, которые уже ушли в сторону балансировщика, но не успели вернуться в момент переключения;
- такая потеря, как правило, **незаметна** ни для оператора, ни для абонентов — пропадание трафика на доли секунды восстанавливается протоколами верхних уровней модели OSI.
Сводная таблица режимов:
| Режим | Трафик оператора | Копия на ТСПУ | Влияние на оператора при переключении |
| ----------------- | ---------------- | ------------- | ------------------------------------- |
| **Inline** | Через ТСПУ | Да (полная) | — |
| **TAP** | Замкнут напрямую | Да (копия) | Безболезненно |
| **Active Bypass** | Замкнут напрямую | Нет | Безболезненно |
| **Power-off** | Замкнут напрямую | Нет | Флапы линков, перерыв трафика |
## 3.3. Байпасы GL Sun (пилотный проект, Урал)
Байпасы GL Sun используются в рамках **пилотного проекта на Урале**. По сравнению с Silicom, они значительно проще и имеют ряд существенных ограничений.
### 3.3.1. Отличие от Silicom: только режим Power-off Bypass
Байпасы GL Sun поддерживают **только один механизм переключения** — эквивалент режима Power-off Bypass у Silicom. У них нет промежуточных режимов TAP или Active Bypass с безболезненным переключением.
Фактически GL Sun умеет только:
- **пропускать трафик** через себя (аналог Inline);
- **замыкать каналы** физически (аналог Power-off Bypass).
При этом, в отличие от Silicom, байпасы GL Sun не генерируют heartbeat-пакеты самостоятельно. Вместо этого heartbeat-пакеты отправляются **балансировщиком** (или фильтром, если балансировщик отсутствует) в сторону GL Sun. На балансировщике или фильтре настраивается IP-адрес байпаса, интервал отправки heartbeat-пакетов и список линков байпаса, для которых выполняется проверка.
В федеральном проекте эта схема **не актуальна**, поскольку байпасы Silicom самостоятельно отправляют heartbeat-пакеты и самостоятельно проверяют доступность каналов.
### 3.3.2. Флап линков при каждом переключении
Каждое переключение режима работы байпаса GL Sun — это **флап линков оператора**. Оптика «моргает», оператор связи видит падение и восстановление интерфейсов, что может приводить к:
- перестройке маршрутизации на стороне оператора;
- заметному перерыву в прохождении трафика;
- срабатыванию мониторинга и генерации инцидентов у оператора.
Это значительное неудобство по сравнению с байпасами Silicom, у которых переключение между режимами Inline, TAP и Active Bypass происходит прозрачно для оператора.
## 3.4. Мониторинг каналов: Heartbeat-пакеты байпаса
Байпас осуществляет **постоянный мониторинг доступности каналов** в сторону балансировщика с помощью специальных **heartbeat-пакетов**.
Принцип работы (для байпасов Silicom):
1. Байпас отправляет heartbeat-пакет из порта **Mon0**;
2. Пакет проходит через балансировщик (балансировщик пропускает heartbeat-пакеты прозрачно между своими портами);
3. Пакет должен дойти до порта **Mon1** (и аналогично в обратном направлении);
4. Если пакет проходит — байпас считает канал исправным и продолжает работу в текущем режиме.
```text
Байпас Балансировщик
┌─────────┐ ┌──────────────────┐
│ │ heartbeat │ │
│ Mon0 ─┼─────────────► прозрачный │
│ │ │ пропуск │
│ Mon1 ◄┼──────────────┤ │
│ │ heartbeat │ │
└─────────┘ └──────────────────┘
```
Heartbeat-пакеты байпаса Silicom — это **не IP-пакеты**, а специальные служебные кадры (по умолчанию формат IPX). По запросу RDP.ru формат пакета был изменён на согласованный вариант, который прозрачно проходит через балансировщик и, при необходимости, через фильтр, не вызывая проблем с обработкой (фильтр пропускает не-IP-пакеты прозрачно).
Важно: heartbeat-пакеты байпаса **не доходят до фильтров** при наличии балансировщика — они заворачиваются обратно на уровне балансировщика. Таким образом, существуют **две независимые стадии** проверки отказоустойчивости:
1. **Байпас → Балансировщик** — heartbeat-пакеты байпаса проверяют доступность каналов до балансировщика;
2. **Балансировщик → Фильтр** — keep-alive пакеты балансировщика проверяют доступность фильтров (подробнее — в [разделе 4](04.md)).
## 3.5. Автоматическое переключение в TAP/Active Bypass при потере канала
Если heartbeat-пакеты, отправленные через Mon0, не доходят до Mon1 в течение определённого времени (настраиваемый порог), байпас считает, что **канал связи до балансировщика неисправен**.
В этом случае байпас **автоматически переключает** данный канал в безопасный режим:
- **TAP** — если требуется сохранить копирование трафика для диагностики;
- **Active Bypass** — если требуется полностью исключить ТСПУ из пути трафика.
Выбор режима зависит от **настроек** конкретного байпаса.
```text
Штатная работа (Inline):
Net0 ──► Mon0 ──► Балансировщик ──► Mon1 ──► Net1
heartbeat ✓
Потеря канала → автоматическое переключение:
Net0 ◄────────────► Net1 ← замыкание
(± копия на Mon0/Mon1, в зависимости от настроек)
```
Такое автоматическое переключение обеспечивает **защиту трафика оператора** без ручного вмешательства: если что-то случится с балансировщиком или фильтрами, каналы оператора будут замкнуты напрямую, и связность сети сохранится.
---
[← Оглавление](../README.md) · [← Раздел 2: Прохождение трафика через ТСПУ](02.md) · [Раздел 4: Балансировщик →](04.md)

248
chapters/04.md Normal file
View File

@@ -0,0 +1,248 @@
# 4. Балансировщик (EcoFilter Balancer)
[← Оглавление](../README.md) · [← Раздел 3: Байпас](03.md)
---
## 4.1. Назначение: распределение трафика по фильтрам
Балансировщик (EcoFilter Balancer) — это **высокопроизводительный программируемый коммутатор**, основная задача которого — принимать трафик от байпасов и **равномерно распределять** его по подключённым фильтрам для анализа и обработки.
Помимо балансировки, балансировщик выполняет следующие функции:
- **фильтрация служебного трафика** — байпас (прозрачный пропуск) трафика, который не нужно отправлять на фильтры;
- **программный байпас** — возможность заворачивать трафик обратно к оператору, минуя фильтры;
- **контроль доступности фильтров** — отправка keep-alive пакетов и автоматическое отключение неисправных фильтров;
- **прозрачный пропуск heartbeat-пакетов** байпаса Silicom между своими портами.
Количество балансировщиков на площадке определяется количеством каналов связи оператора и объёмом трафика. По умолчанию балансировщик поставляется **без конфигурации** — все порты, линки и правила необходимо создавать вручную при проектировании конкретного узла.
## 4.2. Аппаратная платформа: 32-портовый, 1U, пропускная способность 3.2 Тбит/с
Балансировщик представляет собой компактное одноюнитовое (1U) устройство:
| Параметр | Значение |
| -------------------------- | --------------------------------------- |
| **Форм-фактор** | 1U (одноюнитовый) |
| **Количество портов** | 32 порта QSFP28 |
| **Пропускная способность** | 3.2 Тбит/с (на пакетах > 160 байт) |
| **Скорости портов** | 10G / 25G / 100G |
| **Питание** | 2 блока питания, горячее резервирование |
| **Передняя панель** | Консоль, Management Ethernet (1G), USB |
Существуют также двухюнитовые балансировщики (65 портов), но в проекте АСБИ используются **только одноюнитовые** модели.
Для подключения 10-гигабитных интерфейсов используются **гидры** (breakout-кабели): один порт QSFP28 разветвляется на четыре порта SFP+ (10G) с помощью оптических или DAC-кабелей. Таким образом, один физический QSFP28-порт может предоставить до четырёх 10G-портов.
При работе на скорости 100G все четыре линии (lane) физического порта объединяются и работают совместно.
## 4.3. Организация портов: пары LAN/WAN, линки
Все порты балансировщика логически делятся на две группы:
- **Порты в сторону оператора** (через байпасы) — подключены к каналам связи оператора;
- **Порты в сторону фильтров** — подключены к фильтрам для передачи трафика на обработку.
Порты внутри каждой группы объединяются в **пары** LAN + WAN и далее — в логические сущности, называемые **линками**.
```text
Оборудование оператора (через байпасы)
│ │ │ │
P42(L) P41(W) P10(L) P9(W)
└─────┬─────┘ └─────┬─────┘
Линк 1 Линк 2
(10G) (100G)
│ │
┌───────────┴─────────────────────┴──────────┐
│ Балансировщик │
│ │
│ Flow rules → Balance Group │
└───┬─────┬─────┬──────────┬─────┬─────┬─────┘
P21(L) P22(W) P31(L) P32(W) P41(L) P42(W)
└──┬──┘ └──┬──┘ └──┬──┘
Filter Group 1 Filter Group 2 Filter Group 3
│ │ │
Фильтр 1 Фильтр 2 Фильтр N
```
### 4.3.1. Принцип чётных/нечётных портов
По договорённости, принятой при проектировании, на балансировщике соблюдается тот же принцип, что и на фильтрах:
- **Чётные** порты — **LAN** (в сторону абонентов);
- **Нечётные** порты — **WAN** (в сторону интернета).
Например: порт P42 (чётный) — LAN-порт, парный ему P41 (нечётный) — WAN-порт. Для 100-гигабитных портов, у которых нет второй цифры (номера линии), определяющей является единственная цифра: P10 (чётный) — LAN, P9 (нечётный) — WAN.
Этот принцип распространяется как на порты в сторону операторского оборудования, так и на порты в сторону фильтров.
### 4.3.2. Жёсткая привязка: трафик возвращается в тот же линк
Трафик, пришедший через конкретный порт оператора, **обязательно возвращается** через парный порт того же линка. Пакет, вошедший через P42 (LAN), после обработки выйдет только через P41 (WAN) — и никуда больше. Аналогично, пакет из P41 вернётся только в P42.
Это фундаментальное правило обеспечивает **прозрачность ТСПУ** для сети оператора: если оператор отправил пакет в конкретный канал, ТСПУ вернёт его обратно в тот же канал, независимо от того, каким фильтром пакет был обработан.
Механизм реализации: при балансировке к пакету добавляется 4-байтовый заголовок, который, помимо информации о ядре фильтра, содержит идентификатор исходного линка. Когда фильтр возвращает обработанный пакет с этим заголовком, балансировщик по нему определяет, в какой операторский линк вернуть пакет.
## 4.4. Фильтры на балансировщике (Flow rules)
Перед отправкой трафика на фильтры балансировщик пропускает каждый пакет через **правила фильтрации** (flow rules). Каждое правило состоит из двух частей:
- **Match** — условие совпадения (по каким критериям определять трафик);
- **Action** — действие (что делать с совпавшим трафиком).
Правила привязываются к **линкам** в сторону оператора и обрабатываются в порядке **приоритетов**.
### 4.4.1. Байпас служебного трафика (BGP, мультикаст, маршрутизация)
Действие `action bypass` позволяет указать, что совпавший трафик должен быть **немедленно возвращён** в сторону оператора, минуя фильтры. Это используется для служебного трафика:
- **BGP** (TCP-порт 179) — протоколы маршрутизации;
- **Мультикаст-трафик** — групповые рассылки;
- **Другие служебные протоколы**, которые нежелательно пропускать через DPI.
С таким трафиком на фильтрах ничего плохого не произойдёт (он будет прозрачно пропущен), но лучше его не трогать — это снижает нагрузку на фильтры и исключает потенциальное влияние.
Типичная конфигурация: все правила для конкретного трафика задаются с высоким приоритетом и действием `bypass`, а в самом конце ставится правило-«заглушка» с самым низким приоритетом, без условий совпадения и с действием `bypass`. Таким образом, **всё, что не попало** под явные правила отправки на фильтры, **байпасится**.
### 4.4.2. Отправка трафика на группу балансировки
Действие `action balancing s_mac` отправляет совпавший трафик в указанную **группу балансировки** (balance group) для распределения по фильтрам. Параметр `s_mac` означает балансировку по source IP, destination IP и протоколу.
Пример правила: «все пакеты с VLAN ID = 1 отправить на группу балансировки `group_filter`». Трафик конкретного VLAN будет обработан фильтрами, а весь остальной трафик, не попавший под это правило, — байпасится.
Условия совпадения (match) могут включать:
| Критерий | Описание |
| ----------------- | -------------------------------------- |
| **VLAN ID** | Номер VLAN-тега (один или несколько) |
| **IPv4 src/dst** | Адрес или подсеть источника/назначения |
| **L4 port** | Порт TCP/UDP |
| **MAC-адрес** | Source или destination MAC |
| **MPLS** | Количество MPLS-меток |
| **Глубина тегов** | Количество VLAN-тегов в пакете |
В одном правиле можно комбинировать несколько условий (например, VLAN + IPv4-подсеть). Матчить можно как для включения трафика в обработку, так и наоборот — для исключения.
## 4.5. Балансировка трафика
### 4.5.1. Хэш-сумма: source IP + destination IP + протокол
Балансировка трафика по фильтрам выполняется на основе **хэш-суммы**, вычисляемой по трём параметрам IP-пакета:
1. **Source IP** — адрес источника;
2. **Destination IP** — адрес назначения;
3. **IP-протокол** — номер протокола (TCP, UDP и т.д.).
Для вычисления хэша балансировщик разбирает стек заголовков инкапсуляции (VLAN-теги, MPLS-метки) и добирается до IP-заголовка. Если IP-пакет не обнаружен, трафик **прозрачно пропускается** (байпасится), не отправляясь на фильтры.
Балансировка работает эффективно за счёт **огромного количества сессий** в реальном операторском трафике. Произведение количества source IP × destination IP × протоколов даёт число, достаточное для равномерного распределения по всем фильтрам и ядрам. Однако одну единственную сессию (один source IP, один destination IP, один протокол) **разбалансировать невозможно** — весь её трафик попадёт на один фильтр и одно ядро.
### 4.5.2. Учёт количества ядер фильтров
Параметр **N_UNIT_QA** на балансировщике задаёт количество ядер на подключённых фильтрах, которые занимаются обработкой трафика. Это значение **всегда равно общему количеству ядер процессора фильтра минус один**, поскольку одно ядро является сервисным — на нём работает ОС Linux, системные логи, управление. Все остальные ядра отданы процессу EcoNAT для обработки трафика.
Параметр N_UNIT_QA **напрямую влияет** на балансировку: он учитывается при вычислении хэша, чтобы трафик равномерно распределялся не только между фильтрами, но и между **ядрами** каждого фильтра.
### 4.5.3. Дополнительный 4-байтный заголовок для фильтров
В точке балансировки к пакету добавляется **дополнительный 4-байтовый заголовок**. По структуре он похож на VLAN-тег, но VLAN-тегом не является. Этот заголовок выполняет две функции:
1. **Для фильтра** — сообщает, на какое ядро направить данный пакет для обработки;
2. **Для балансировщика** — при возврате обработанного пакета от фильтра определяет, в какой операторский линк вернуть пакет.
Фильтр после обработки возвращает пакет **с тем же 4-байтовым заголовком**. Балансировщик считывает заголовок, определяет исходный линк, удаляет заголовок и отправляет пакет обратно оператору.
### 4.5.4. Симметричность хэша: одна сессия — один фильтр, одно ядро
Хэш-функция балансировщика **симметрична**: при вычислении хэша для обратного пакета (от интернета к абоненту) source и destination IP меняются местами, но итоговая хэш-сумма совпадает с прямым пакетом.
Это гарантирует:
- оба направления одной сессии **всегда попадают на один и тот же фильтр**;
- более того — на одно и то же **ядро** этого фильтра;
- сессия **никогда не распределяется** по разным фильтрам.
Благодаря этому фильтр всегда видит полную картину сессии (и запрос, и ответ), что критически важно для корректной работы DPI-анализа. Сессию любого абонента можно найти на одном конкретном фильтре.
Важно: балансировщик **не ведёт логов** о том, куда отправил конкретный пакет — вся обработка происходит на аппаратном уровне. Чтобы найти, на каком фильтре «приземлилась» конкретная сессия, необходимо **обойти все фильтры** площадки. При 23 фильтрах это делается вручную; при большем количестве (до 15) — автоматизируется скриптом.
## 4.6. Отказоустойчивость
### 4.6.1. Keep-alive пакеты к фильтрам
Балансировщик непрерывно контролирует доступность фильтров, отправляя **keep-alive пакеты** через каждую пару портов (filter group) в сторону фильтров.
Принцип работы:
1. Балансировщик отправляет keep-alive через **LAN-порт** filter group;
2. Пакет проходит через фильтр (заворачивается на первой проверке, т.к. не является IP-пакетом);
3. Пакет возвращается через парный **WAN-порт**;
4. Балансировщик фиксирует **время прохождения** (time of pass) — в штатном режиме порядка 27 микросекунд.
Параметры keep-alive настраиваются в **профиле проверки доступности** (availability profile):
| Параметр | Описание |
| -------------------------------- | -------------------------------------------------------------------- |
| **Начальная задержка** | Время ожидания после старта перед началом отправки |
| **Интервал** | Периодичность отправки (типично ~100 мс) |
| **Порог потерь** | Число потерянных пакетов для признания группы неактивной (типично 5) |
| **Порог восстановления** | Число успешных пакетов для восстановления активности |
| **Мин. количество активных пар** | Порог, ниже которого вся balance group считается неактивной |
Keep-alive пакеты проверяют не только физическую доступность канала, но и **работоспособность фильтра** в целом: если «мозг» фильтра завис или перегружен настолько, что не может обрабатывать даже не-IP-пакеты, keep-alive не вернётся, и балансировщик это обнаружит.
### 4.6.2. Программный байпас при потере группы портов
При потере keep-alive пакетов для конкретной filter group балансировщик переводит эту группу в состояние **программного байпаса**: трафик, предназначенный для данной пары портов, **не отправляется на фильтр**, а заворачивается обратно с LAN-порта на WAN-порт (и наоборот) непосредственно на балансировщике.
Ключевые особенности:
- Программный байпас применяется **индивидуально** к каждой filter group — остальные группы продолжают работать;
- Переключение **не вызывает флапов** линков оператора — оператор ничего не заметит;
- Единственное последствие — часть трафика временно перестаёт фильтроваться;
- При восстановлении доступности фильтра группа **автоматически возвращается** в активное состояние.
Это значительное улучшение по сравнению с пилотным проектом на Урале, где потеря хотя бы одного интерфейса приводила к переключению **всей площадки** на байпас с флапами линков у оператора.
Программный байпас можно также включить **вручную** — для диагностики или при проведении технических работ. Существует возможность перевести все фильтры в режим программного байпаса одной командой, полностью исключив ТСПУ из обработки трафика без влияния на оператора.
### 4.6.3. Перебалансировка трафика (опционально)
Альтернативой программному байпасу является **перебалансировка** трафика на оставшиеся рабочие filter group. Эта возможность настраивается в профиле проверки доступности, но, как правило, **отключена** по следующим причинам:
- Перебалансировка **занимает время** и вычислительные ресурсы;
- Происходит **пересчёт хэша** для всех сессий — сессии могут попасть на другие фильтры;
- Существующие сессии на «старых» фильтрах **разрываются** (фильтр теряет контекст сессии);
- В общем случае это может быть **нежелательно**.
Рекомендуемый подход для федерального проекта: программный байпас на уровне отдельной filter group без перебалансировки. Часть трафика временно не фильтруется — это меньшее зло, чем перерыв в работе всей площадки или разрыв всех сессий.
## 4.7. Работа с различными инкапсуляциями (VLAN, MPLS)
Балансировщик **не снимает и не модифицирует** никакие теги, метки и заголовки инкапсуляции. Вся обработка ограничивается **чтением** заголовков:
- **VLAN-теги** — могут использоваться в условиях match для правил фильтрации (например, байпас служебного VLAN);
- **MPLS-метки** — балансировщик может определить их наличие и количество, но матчить по конкретным значениям MPLS-меток не имеет практического смысла;
- **QinQ** (двойные VLAN-теги) — поддерживается чтение с учётом глубины тегов.
Для вычисления хэша балансировщик **разбирает весь стек** инкапсуляции и добирается до IP-заголовка. Это облегчает работу фильтра, у которого ограничения на типы инкапсуляции несколько строже.
Пакет передаётся на фильтр **в неизменном виде** (с добавлением только 4-байтового заголовка балансировки). Все VLAN-теги, MPLS-метки и прочие заголовки сохраняются.
## 4.8. Обработка HTTP-редиректов и TCP Reset через фильтры
При блокировке ресурсов фильтру необходимо отправить абоненту **HTTP-редирект** (код 302, перенаправление на страницу-заглушку) или **TCP Reset** (для HTTPS-трафика). Особенность связана с тем, что канал между балансировщиком и фильтром фактически **однонаправленный** с точки зрения конкретного порта.
Если трафик содержит MPLS-метки или другую инкапсуляцию, фильтр не может самостоятельно сгенерировать ответный пакет с правильными заголовками. Поэтому используется следующая логика:
1. Пакет от абонента в сторону интернет-ресурса **пропускается** как есть;
2. Фильтр **ожидает обратный пакет** от интернет-ресурса в рамках той же сессии;
3. Когда обратный пакет приходит (уже с корректными MPLS-метками и заголовками), фильтр **подменяет** его содержимое на HTTP-редирект или TCP Reset;
4. Модифицированный пакет отправляется абоненту с сохранением всей инкапсуляции.
Для **HTTP** — подставляется редирект на страницу-заглушку. Для **HTTPS** — отправляется TCP Reset (так как содержимое зашифровано и подмена невозможна). В обоих случаях механизм одинаков: дождаться ответа сервера и подменить пакет.
---
[← Оглавление](../README.md) · [← Раздел 3: Байпас](03.md) · [Раздел 5: Фильтр →](05.md)

180
chapters/05.md Normal file
View File

@@ -0,0 +1,180 @@
# 5. Фильтр (EcoFilter)
[← Оглавление](../README.md) · [← Раздел 4: Балансировщик](04.md)
---
## 5.1. Путь пакета через фильтр
Фильтр (EcoFilter) — это основное устройство ТСПУ, непосредственно выполняющее анализ и обработку трафика. Каждый пакет, поступающий на фильтр от балансировщика (или напрямую от байпаса в простейшей конфигурации), проходит через **последовательную цепочку проверок**. На каждом этапе пакет может быть либо пропущен дальше по цепочке, либо прозрачно возвращён обратно оператору без какой-либо обработки.
Общая схема пути пакета:
```text
Пакет от балансировщика
┌─────────────────────┐
│ 1. IP-пакет или нет │
└────────┬────────────┘
Не IP → прозрачный пропуск ──►
┌─────────────────────┐
│ 2. Проверка по ACL │
│ (привязка к пулу) │
└────────┬────────────┘
Не попал в ACL → прозрачный пропуск ──►
┌─────────────────────┐
│ 3. Проверка по │
│ DPI-листу (IP/сети) │
└────────┬────────────┘
Не попал в DPI-лист → прозрачный пропуск ──►
┌─────────────────────┐
│ 4. Обработка │
│ движком DPI │
└────────┬────────────┘
┌────┴────┐
▼ ▼
Пропустить Заблокировать
(pass) (drop)
```
На каждом этапе, если пакет не удовлетворяет условиям для дальнейшей обработки, он **прозрачно возвращается** через парный интерфейс обратно в сеть оператора — как будто фильтра в тракте нет.
Важно понимать, что даже самая первая проверка (является ли пакет IP-пакетом) выполняется **программным ядром фильтра** — процессом EcoNAT. Если «мозг» фильтра не работает (процесс завис или перегружен), даже эта простейшая проверка не будет пройдена, и keep-alive пакеты от балансировщика не вернутся. Именно поэтому keep-alive пакеты балансировщика проверяют не только физическую связность канала, но и работоспособность процесса обработки на фильтре (подробнее — в [разделе 4.6.1](04.md)).
### 5.1.1. Проверка: IP-пакет или нет
Первый этап — определение того, содержит ли входящий кадр (Ethernet-фрейм) IP-пакет. Фильтр разбирает стек заголовков инкапсуляции и ищет IP-заголовок.
В операторских сетях трафик может приходить в самых различных инкапсуляциях:
- чистый IP-пакет (нетегированный);
- пакет с одним VLAN-тегом;
- пакет с двумя VLAN-тегами (QinQ);
- пакет с MPLS-метками;
- пакет с MPLS-метками и VLAN-тегами;
- PPPoE-пакет, дополнительно инкапсулированный в MPLS;
- и другие комбинации.
Глубина поиска IP-заголовка определяется параметром **VLAN Mode** (подробнее — в [разделе 15.2.1](15.md)):
| Значение VLAN Mode | Поведение |
| ------------------ | ------------------------------------------------------------ |
| **untag** | IP-заголовок ищется только в нетегированных фреймах |
| **vlan** | Поиск в нетегированных фреймах и фреймах с одним VLAN-тегом |
| **QinQ** | Поиск во фреймах с любым количеством VLAN-тегов (0, 1 или 2) |
В проекте АСБИ параметр VLAN Mode **всегда должен быть установлен в QinQ**. Если установлено другое значение, часть трафика может проходить через фильтр прозрачно, без обработки — что приведёт к неработоспособности фильтрации.
Если IP-заголовок не обнаружен (например, пакет содержит только ARP, служебный протокол или keep-alive балансировщика), пакет **немедленно возвращается** через парный интерфейс. Именно по этому пути проходят keep-alive пакеты балансировщика — они не являются IP-пакетами и заворачиваются на первой же проверке, что позволяет измерить время прохождения через фильтр.
### 5.1.2. Проверка по ACL (привязка к пулу)
Если пакет содержит IP-заголовок, следующий этап — проверка по **ACL** (Access Control List), привязанному к **пулу**.
Пул — это логическая сущность на фильтре, в которую попадает трафик для дальнейшей обработки. В проекте АСБИ используются пулы типа **fake** — это означает, что реальная трансляция адресов (NAT) не выполняется: что пришло, то и ушло. Тем не менее пул должен быть создан и включён, поскольку без пула трафик не может попасть на обработку DPI.
К каждому пулу привязывается ACL — список правил, определяющих, какой трафик должен обрабатываться. Правила ACL могут матчить пакеты по:
- **протоколу** — IP, TCP, UDP, ICMP и др.;
- **source/destination** — хост, подсеть или ключевое слово `any` (любой адрес);
- **номеру VLAN** — если не указан, подразумеваются все VLAN (04095).
Каждое правило содержит действие **allow** (permit) или **deny**. Правила обрабатываются по порядку номеров, рекомендуется задавать номера с зазором (например, 10, 20, 30) для удобства последующего редактирования.
Если пакет **попал** (замэтчился) в ACL привязанного пула — он переходит на следующий этап проверки. Если **не попал** ни в один ACL ни одного пула — пакет прозрачно пропускается обратно в сеть оператора.
При наличии нескольких пулов трафик попадает в пул с **наивысшим приоритетом**, ACL которого совпал первым.
> **Важно:** при заводской (дефолтной) конфигурации фильтра пулы и ACL **отсутствуют**. Их необходимо создать при первоначальной настройке. Без созданного пула и привязанного ACL фильтр будет прозрачно пропускать весь трафик — какие бы настройки DPI-листов ни были заданы, обработка не произойдёт.
### 5.1.3. Проверка по DPI-листу (IP-подсети)
После прохождения ACL и попадания в пул пакет проверяется на уровне **DPI-листа**. DPI-лист — это набор правил фильтрации, содержащий списки IP-адресов, подсетей и URL для обработки. На фильтре может быть настроено **до 16 DPI-листов** (номера 015), каждый из которых может быть включён или выключен независимо.
В рамках DPI-листа определены **параметры IP**, которые задают, какой именно трафик подлежит обработке данным листом:
| Параметр | Описание |
| ---------------------- | ----------------------------------------------------------------- |
| **IP** | Подсети и адреса, которые должны обрабатываться данным DPI-листом |
| **No IP** | Локальные адреса абонентов, исключённые из обработки |
| **No IP Remote** | Удалённые адреса (серверы), исключённые из обработки |
| **IPv6** / **No IPv6** | Аналогичные параметры для IPv6-трафика |
По умолчанию параметр IP должен содержать сеть `0.0.0.0/0` для всех VLAN — тогда весь трафик, попавший в DPI, будет обрабатываться данным листом. Параметр **No IP** используется, в частности, для диагностики: можно исключить конкретного абонента из обработки DPI-листом, чтобы проверить, влияет ли данный лист на его трафик.
Если пакет **не попал** в обработку ни одного активного DPI-листа (его адреса не совпали с заданными подсетями, или он исключён через No IP), он **прозрачно пропускается** дальше без какого-либо анализа.
Нулевой DPI-лист (`dpi list 0`) в проекте АСБИ всегда используется для **фильтрации по реестру Роскомнадзора**. Остальные листы (115) могут использоваться для других задач — например, для блокировки по очищенным протокольным спискам, загружаемым из ЦСУ (подробнее — в [разделе 8](08.md)).
### 5.1.4. Обработка движком DPI
Если пакет прошёл все предварительные проверки (IP → ACL/пул → DPI-лист), он передаётся на **движок DPI** (Deep Packet Inspection) для анализа. На платформе EcoFilter используется движок **ecDPI**, обеспечивающий фильтрацию по спискам и распознавание приложений вплоть до седьмого уровня модели OSI.
Движок DPI выполняет **многофакторный анализ сессий** по целому ряду параметров:
- **адреса и порты** — source IP, destination IP, source/destination port;
- **размеры пакетов** и их вариации в рамках сессии;
- **частота прохождения** пакетов;
- **ключевые слова и паттерны** внутри пакетов;
- **косвенные признаки** для шифрованного трафика (где очевидные поля протокола недоступны).
Анализ выполняется не над отдельным пакетом, а над **сессией** в целом — движок накапливает информацию о нескольких пакетах в рамках одного соединения и на основе совокупности признаков определяет тип трафика. Для шифрованного трафика (например, VPN-протоколы, мессенджеры) прямое определение по заголовкам невозможно, поэтому используются косвенные признаки: характерные размеры пакетов, частотные паттерны, статистические аномалии.
Результатом работы движка DPI является **определение протокола/приложения** и проверка по спискам фильтрации (URL, домены, IP-адреса). Дальнейшая судьба пакета определяется параметром **behavior** DPI-листа.
### 5.1.5. Решение: пропустить или заблокировать (drop)
По результатам анализа движком DPI фильтр принимает решение о судьбе пакета. Поведение задаётся параметром **behavior** в настройках каждого DPI-листа:
| Значение behavior | Описание |
| ----------------- | ------------------------------------------------------------------------------ |
| **block** | Трафик, совпавший со списком, блокируется (дропается) |
| **ignore** | Совпадение регистрируется и логируется, но никаких действий не предпринимается |
| **color** | Совпавший трафик «окрашивается» (в проекте АСБИ не используется) |
| **redirect** | Трафик перенаправляется (в проекте АСБИ не используется) |
В рамках проекта АСБИ используются преимущественно два режима:
**Режим block** — основной рабочий режим для блокировки по реестру Роскомнадзора и по очищенным протокольным спискам. При срабатывании блокировки:
- Для **HTTP**-трафика абоненту отправляется **HTTP-редирект** (код 302) на страницу-заглушку оператора, информирующую о блокировке ресурса. URL страницы-заглушки задаётся параметром **redirect URL** в настройках DPI-листа.
- Для **HTTPS**-трафика содержимое зашифровано, поэтому подмена ответа невозможна. Вместо этого абоненту и серверу отправляется **TCP Reset**, разрывающий соединение.
- При наличии MPLS-меток или сложной инкапсуляции фильтр не может самостоятельно сгенерировать ответный пакет с корректными заголовками. Поэтому используется особая логика: пакет от абонента пропускается к серверу, фильтр **дожидается ответного пакета** в той же сессии, а затем **подменяет** его содержимое на редирект или TCP Reset, сохраняя оригинальные заголовки инкапсуляции (подробнее — в [разделе 4.8](04.md)).
**Режим ignore** — используется для **распознавания протоколов** без блокировки. Фильтр определяет тип трафика и отправляет логи на SPFS, но сам трафик пропускает. Это первая стадия двухступенчатой блокировки: на этом этапе собираются данные для ЦСУ, которая формирует очищенные от ложных срабатываний списки и загружает их в другой DPI-лист, уже работающий в режиме block (подробнее — в [разделе 8](08.md)).
Каждый DPI-лист также поддерживает переключение режима **blacklist / whitelist** (параметр **WH list mode**):
- **Blacklist** (по умолчанию) — всё, что совпало со списком, блокируется; всё остальное пропускается;
- **Whitelist** — пропускается только совпавший трафик; всё остальное блокируется.
Режим whitelist в проекте АСБИ **не используется** из-за риска случайной блокировки всего трафика.
Отдельная проблема — **отправка TCP Reset при блокировке протоколов**. Если приложение абонента (например, мессенджер) получает TCP Reset при попытке установить соединение, оно немедленно пытается установить новое соединение — и делает это непрерывно с высокой частотой. Количество генерируемых сессий может быть огромным, создавая избыточную нагрузку на фильтр. Для решения этой проблемы предусмотрен параметр **send RST off**, отключающий отправку TCP Reset при блокировке протоколов (подробнее — в [разделе 17.1.2](17.md)).
## 5.2. Работа на уровне L2: фильтр как «прозрачный провод»
Несмотря на то, что фильтр анализирует IP-трафик вплоть до седьмого уровня модели OSI, с точки зрения **сетевой топологии** он работает на **уровне L2** (канальном уровне). Для внешнего наблюдателя — оператора связи, маршрутизаторов, коммутаторов — фильтр представляет собой **прозрачный провод**: пакет входит через один интерфейс и выходит через парный, без каких-либо видимых изменений на сетевом уровне.
Ключевые характеристики L2-работы фильтра:
**Отсутствие L3-интерфейсов в тракте данных.** На пути прохождения трафика у фильтра нет IP-интерфейсов. Если посмотреть на интерфейсы ОС Linux, на которой основано устройство, там виден только **management-интерфейс** (используемый для удалённого управления). Все остальные интерфейсы отданы под управление **DPDK** (Data Plane Development Kit) и процессу EcoNAT, который обрабатывает трафик напрямую, минуя сетевой стек операционной системы.
**Невозможность генерации трафика.** Фильтр — это L2-устройство, у которого нет IP-интерфейсов для инициирования трафика. Нельзя, например, выполнить ping с фильтра в сторону оператора через LAN/WAN-интерфейсы. Ping и traceroute возможны только через management-интерфейс (подробнее — в [разделе 18.14](18.md)).
**Сохранение всех заголовков инкапсуляции.** Фильтр не снимает и не модифицирует VLAN-теги, MPLS-метки и любые другие заголовки инкапсуляции. Все манипуляции выполняются **только с IP-пакетом** внутри стека заголовков. Пакет выходит из фильтра с теми же тегами и метками, с которыми он вошёл.
**Отключение LLDP.** Протокол LLDP (Link Layer Discovery Protocol) на фильтрах **выключен** по требованию операторов связи. Операторы не хотят видеть устройства ТСПУ в своей сетевой топологии — оборудование должно быть полностью прозрачным и невидимым. Если LLDP включён, устройство «появляется» на схемах сети оператора, что нежелательно.
**Максимальный L2 MTU.** Для обеспечения прозрачности параметр L2 MTU на фильтрах устанавливается в **максимально возможное значение — 9216 байт** (по RFC). Аналогичные значения (около 9000) выставляются на интерфейсах балансировщиков. Это позволяет полностью закрыть проблему с MTU и не возвращаться к ней в процессе эксплуатации.
**Параметр permit invalid flow.** В проекте АСБИ этот параметр должен быть **всегда включён**. Он разрешает заведение TCP-сессий без наличия начального TCP SYN-пакета. Это критически важно при переключении ТСПУ из режима TAP в рабочий режим (Inline): в момент переключения на фильтры хлынет трафик множества уже установленных TCP-сессий, для которых SYN-пакет был отправлен ранее. Без параметра permit invalid flow фильтр будет **дропать** все такие сессии, что приведёт к массовому разрыву соединений абонентов. С включённым параметром фильтр принимает пакеты «с середины» сессии и заводит для них сессионные записи (подробнее — в [разделе 15.2.6](15.md)).
---
[← Оглавление](../README.md) · [← Раздел 4: Балансировщик](04.md) · [Раздел 6: Места установки ТСПУ →](06.md)

161
chapters/06.md Normal file
View File

@@ -0,0 +1,161 @@
# 6. Места установки ТСПУ в сети оператора
[← Оглавление](../README.md) · [← Раздел 5: Фильтр](05.md)
---
ТСПУ устанавливается **в разрыв каналов связи** оператора и может располагаться в нескольких различных точках его сети. Выбор точки установки влияет на тип трафика, который проходит через ТСПУ, на возможности диагностики и на общую нагрузку на оборудование.
Если рассматривать сеть оператора связи от абонентов в сторону выхода в интернет, можно выделить три основных места установки, а также особый режим подключения — on-a-stick.
```text
Абоненты
│ ← (1) До BRAS: PPPoE-трафик
┌───┴───┐
│ BRAS │ (BPE / BNG / GGSN / PGW)
└───┬───┘
│ ← (2) До CGNAT: серые IP, наиболее удобная точка
┌───┴───┐
│ CGNAT │
└───┬───┘
│ ← (3) После CGNAT: только белые IP
Интернет
```
Каждая точка имеет свои особенности с точки зрения инкапсуляции трафика и возможностей траблшутинга. Некоторые точки более предпочтительны, другие — менее, но все они допустимы для установки ТСПУ.
Инкапсуляция на стыке оператора, в разрыв которого встаёт ТСПУ, зависит от технологий конкретного оператора и от места установки в его сети. Это могут быть чистые IP-пакеты, пакеты с VLAN-тегами (одним или двумя — QinQ), пакеты с MPLS-метками, PPPoE-пакеты и различные комбинации. ТСПУ должно уметь разбираться со всеми этими заголовками, чтобы добраться до IP-трафика и выполнить его обработку.
## 6.1. До BRAS/BPE/BNG (между абонентами и терминацией сессий)
Первая возможная точка установки — **между абонентами и устройствами терминации абонентских сессий**. Такими устройствами могут быть:
| Тип сети | Устройства терминации сессий |
| -------------------- | ------------------------------------ |
| **Широкополосный доступ** | BRAS, BPE, BNG |
| **Мобильные сети** | GGSN, PGW |
Все эти устройства выполняют одну функцию — **терминируют абонентские сессии**. В дальнейшем они обобщённо именуются «BRAS» (условный BRAS).
При установке в этой точке ТСПУ располагается максимально близко к абонентам — до того, как трафик пройдёт через какую-либо обработку на стороне оператора.
### 6.1.1. Особенность: PPPoE-трафик
Основная особенность установки **до BRAS** — наличие **PPPoE-трафика**. Широкополосные абоненты подключаются к BRAS по протоколу PPPoE, и этот трафик представляет собой дополнительный уровень инкапсуляции, который необходимо обрабатывать.
Важно: PPPoE-трафик существует **только на участке до BRAS**. Выше BRAS (то есть ближе к интернету) PPPoE-трафика в нормально функционирующих сетях не бывает — BRAS терминирует PPPoE-сессии и дальше передаёт обычные IP-пакеты.
Наличие PPPoE не является критической проблемой — фильтры умеют работать с этой инкапсуляцией. Однако это дополнительная сложность, которую необходимо учитывать при настройке. Параметр **VLAN Mode** на фильтрах должен быть установлен в **QinQ**, чтобы обеспечить корректный поиск IP-заголовка внутри PPPoE-инкапсуляции (подробнее — в [разделе 5.1.1](05.md)).
## 6.2. До CGNAT (после BRAS) — наиболее удобная точка
Вторая точка установки — **между BRAS и CGNAT**. На этом участке BRAS уже терминировал абонентские сессии, но трафик ещё не прошёл трансляцию адресов (NAT).
Это, вероятно, **наиболее удобная точка** для установки ТСПУ по двум причинам:
1. **Отсутствие PPPoE** — трафик PPPoE уже терминирован на BRAS, что означает меньшее количество заголовков инкапсуляции для обработки;
2. **Видимость абонентских адресов** — серые (частные) IP-адреса абонентов ещё не прошли через NAT-трансляцию и доступны для анализа.
### 6.2.1. Видимость серых абонентских IP-адресов
На участке до CGNAT фильтры ТСПУ видят **серые** (частные) IP-адреса абонентов — те самые адреса, которые непосредственно назначены абонентским устройствам. Это даёт существенные преимущества при диагностике:
- Можно найти сессию **конкретного абонента** на фильтрах по его IP-адресу;
- Можно определить, что именно происходит с трафиком данного абонента;
- Можно исключить конкретного абонента из обработки DPI-листом (через параметр **No IP**) для диагностики проблем.
Эта возможность особенно ценна при траблшутинге — прямая связь между физическим абонентом и его сессиями на ТСПУ значительно ускоряет поиск и устранение проблем.
## 6.3. После CGNAT (ближе к выходу в интернет)
Третья точка установки — **после CGNAT**, ближе к выходу в общую сеть интернет. На этом участке трафик уже прошёл трансляцию адресов.
### 6.3.1. Только белые адреса, сложности траблшутинга
После CGNAT серых абонентских адресов **больше не видно** — на фильтрах ТСПУ будут присутствовать только **белые** (публичные) IP-адреса из NAT-пула оператора.
Это создаёт существенное неудобство при траблшутинге:
- **Невозможно напрямую связать** конкретного физического абонента с его сессией на ТСПУ — адрес источника в пакете является транслированным (белым), а не оригинальным (серым) адресом абонента;
- Для идентификации абонента необходимо **взаимодействовать с оператором** — запрашивать у него информацию о том, в какие порты и IP-адреса был транслирован конкретный абонент на CGNAT;
- Процесс диагностики становится **значительно более длительным** и требует координации между командой ТСПУ и оператором связи.
С точки зрения самой фильтрации (блокировки, распознавания протоколов) размещение после CGNAT не вносит каких-либо ограничений — функциональность ТСПУ остаётся полной. Неудобство касается исключительно диагностики и траблшутинга.
> **Примечание:** в ряде случаев подсистемы BRAS и CGNAT могут быть **совмещены в одном устройстве**. В этом случае участок «между BRAS и CGNAT» (наиболее удобная точка установки) попросту отсутствует — ТСПУ может быть установлено либо до этого комбинированного устройства, либо после него.
## 6.4. Режим On-a-stick (BRAS/CGNAT подключены петлёй)
Помимо трёх линейных точек установки, существует особый вариант размещения ТСПУ — когда сервисное оборудование оператора (BRAS и/или CGNAT) подключено **в режиме on-a-stick** (петлёй).
В режиме on-a-stick BRAS или CGNAT подключается к оператору **одним агрегированным каналом**, через который трафик уходит к устройству и возвращается обратно. Если ТСПУ установлено на этом участке, трафик **проходит через него дважды**.
```text
Абоненты Интернет
│ │
│ ┌────────────┐ │
└─────────┤ ТСПУ ├──────────────────────┘
└──────┬─────┘
│ ↕ (трафик проходит дважды)
┌──────┴─────┐
│BRAS / CGNAT│
│(on-a-stick)│
└────────────┘
```
Возможны три варианта подключения on-a-stick:
| Вариант | Что проходит через ТСПУ дважды |
| -------------------------- | ----------------------------------------------------------- |
| **BRAS on-a-stick** | Трафик до BRAS + трафик после BRAS (сегменты 1 + 2) |
| **CGNAT on-a-stick** | Трафик до CGNAT + трафик после CGNAT (сегменты 2 + 3) |
| **BRAS + CGNAT on-a-stick**| Трафик до обоих устройств + трафик после обоих (сегменты 1 + 3) |
### 6.4.1. Двойное прохождение трафика через ТСПУ
При подключении on-a-stick трафик проходит через ТСПУ **дважды**:
1. **Первый проход** — трафик от абонентов идёт через ТСПУ к BRAS/CGNAT;
2. **Второй проход** — после обработки на BRAS/CGNAT трафик возвращается через ТСПУ в сторону интернета (или обратно к абонентам — в зависимости от направления).
Это означает, что каждая абонентская сессия потенциально **видна фильтрам дважды**, причём на втором проходе адреса могут быть уже другими (после NAT-трансляции на CGNAT). Без дополнительных мер это приводит к удвоению количества сессий и удвоению нагрузки на ТСПУ.
### 6.4.2. Разделение по VLAN для обработки трафика одного направления
**Наиболее удобная конфигурация** при подключении on-a-stick — когда оператор чётко разделяет трафик по VLAN:
- **Один VLAN** несёт трафик **до** BRAS/CGNAT (от абонентов к сервисному оборудованию);
- **Другой VLAN** несёт трафик **после** BRAS/CGNAT (от сервисного оборудования в сторону интернета).
В этом случае на ТСПУ можно настроить обработку **только нужного VLAN** (например, трафика до CGNAT, где видны серые абонентские адреса), а второй VLAN — **прозрачно пропустить** на уровне балансировщика, даже не отправляя его на фильтры.
Это достигается через **flow rules** балансировщика (подробнее — в [разделе 4.4](04.md)):
- Правило с действием `balancing` — для VLAN, который нужно обрабатывать (трафик отправляется на фильтры);
- Правило с действием `bypass` — для VLAN, который нужно пропустить (трафик прозрачно проходит через балансировщик).
В результате фильтры обрабатывают трафик **только один раз**, каждый абонент виден единожды, путаницы с сессиями не возникает.
### 6.4.3. Проблемы двойной обработки и best practice
Если оператор **не может** чётко отделить трафик до и после BRAS/CGNAT (например, оба направления идут в одном VLAN), возникает ситуация **двойной обработки**. Её последствия:
- **Удвоение количества сессий** — одна и та же абонентская сессия видна фильтру дважды, причём с разными IP-адресами (до и после NAT-трансляции);
- **Путаница при траблшутинге** — сложно определить, какая из двух записей сессии соответствует реальному состоянию;
- **Двойная нагрузка на ТСПУ** — запас производительности должен быть рассчитан исходя из удвоенного объёма трафика.
Эта ситуация **нежелательна** и её следует избегать при проектировании. В лучшем варианте необходимо добиться от оператора информации о разделении трафика по VLAN и выбрать для обработки только нужное направление.
> **Пример из практики:** на пилотном проекте (Урал) один из операторов подключён по принципу on-a-stick к CGNAT (сегменты 2 + 3 на схеме). Оператор предоставил информацию о том, какие VLAN несут трафик до CGNAT, а какие — после. На балансировщике были отобраны только нужные VLAN и отправлены на фильтры. В результате фильтры видят нормальные абонентские сессии до CGNAT (с серыми адресами) и не обрабатывают транслированный трафик после CGNAT. Это — **best practice** подключения on-a-stick.
Возможен и **обратный подход**: вместо явного указания обрабатываемых VLAN можно исключить ненужные VLAN из обработки, а всё остальное — обрабатывать. Выбор подхода — вопрос удобства настройки для конкретной площадки.
---
[← Оглавление](../README.md) · [← Раздел 5: Фильтр](05.md) · [Раздел 7: Эшелонированная система →](07.md)

215
chapters/07.md Normal file
View File

@@ -0,0 +1,215 @@
# 7. Эшелонированная система (ТСПУ тип Б)
[← Оглавление](../README.md) · [← Раздел 6: Места установки ТСПУ](06.md)
---
## 7.1. Назначение: обработка трафика, не прошедшего через ТСПУ тип А
Эшелонированная система (ТСПУ тип Б, второй эшелон) предназначена для **обработки трафика, который не прошёл через стандартные ТСПУ** (тип А, первый эшелон).
Когда в тексте упоминается просто «ТСПУ» без уточнения типа, подразумевается **ТСПУ тип А** — именно этот тип рассматривался во всех предыдущих разделах. ТСПУ тип А устанавливается у большинства операторов и покрывает основную массу трафика. Однако у крупных операторов связи существуют ситуации, когда часть трафика не может быть обработана стандартными средствами — для таких случаев создана эшелонированная система.
Идея эшелонирования возникла как способ **сократить общее количество ТСПУ**, развёртываемых по стране. Вместо установки ТСПУ тип А у каждого мелкого оператора на уровне доступа, можно у нескольких крупных операторов в ключевых точках установить двухстадийную систему фильтрации, что позволяет снизить затраты на реализацию проекта.
## 7.2. Проблема асимметричного трафика у крупных операторов
Сеть крупного оператора связи, если идти от абонентов к выходу в интернет, делится на несколько сегментов:
```text
┌─────────────────────────────────────────────────────────┐
│ Сегмент доступа и распределения │
│ • Абоненты │
│ • Небольшие операторы (single-home) │
│ • Корпоративные заказчики с одним подключением │
│ │
│ → Обрабатывается ТСПУ тип А (без проблем) │
└────────────────────────┬────────────────────────────────┘
┌────────────────────────┴────────────────────────────────┐
│ Уровень ядра и пиринга │
│ • Крупные операторы связи │
│ • Крупные корпоративные заказчики │
│ • Несколько выходов в интернет │
│ │
│ → Возможен асимметричный трафик │
│ → Требуется ТСПУ тип Б (эшелон) │
└─────────────────────────────────────────────────────────┘
```
На уровне доступа и распределения подключены абоненты и небольшие операторы с единственным каналом связи (single-home). У них нет собственной автономной системы и собственной IP-адресации — адреса выделяет крупный оператор. Весь их трафик проходит через одну точку и обрабатывается стандартным **ТСПУ тип А** без каких-либо проблем.
На уровне ядра и пиринга подключаются **крупные операторы** и заказчики, которые могут иметь **несколько выходов в интернет** — через разных провайдеров. Их трафик может:
- выходить через одного оператора, а **возвращаться через другого**;
- проходить через ТСПУ только в одном направлении.
В таких случаях традиционная схема фильтрации **не работает**: на фильтре ТСПУ тип А сессия «не соберётся», потому что одна сторона сессии проходит через ТСПУ, а ответная — возвращается иным путём, минуя его. Для обработки такого **асимметричного трафика** и предназначен ТСПУ тип Б.
## 7.3. Балансировщик Eco Highway
Эшелонированная система, как и ТСПУ тип А, состоит из балансировщика и фильтров, но с существенными отличиями. Балансировщик эшелона называется **Eco Highway** (в отличие от **EcoFilter Balancer** в ТСПУ тип А). Аппаратная платформа **одинакова** — это тот же одноюнитовый 32-портовый коммутатор на базе чипа **Barefoot Tofino**. Различается только **программное обеспечение**.
Ключевое отличие Eco Highway: он **сам выполняет фильтрацию трафика** на основе заголовков L3/L4 (IP-адреса, порты), а не просто распределяет трафик по фильтрам.
### 7.3.1. BGP-загрузка списков фильтрации из ЦСУ
В отличие от EcoFilter Balancer, где правила фильтрации (flow rules) задаются вручную и исчисляются единицами, на Eco Highway списки фильтрации:
- загружаются автоматически по протоколу **BGP** из центральной системы управления;
- содержат **десятки и сотни тысяч правил**;
- **не могут быть заданы вручную** — это не предусмотрено конструкцией.
Списки организованы в виде нескольких таблиц, каждая из которых фильтрует по-своему:
| Тип таблицы | Критерий фильтрации |
| --------------------- | ----------------------------------------- |
| IPv4 адрес + порт | IP-адрес, маска и порт TCP/UDP |
| IPv4 адрес | Только IP-адрес (без порта) |
| IPv6 | Аналогичные таблицы для IPv6-трафика |
| Белый список | Ресурсы, исключённые из фильтрации |
| Port redirect | Трафик, подлежащий отправке на фильтры |
### 7.3.2. Блокировка по IP-адресам на уровне балансировщика (Telegram, реестр РКН)
Eco Highway самостоятельно блокирует трафик, который можно идентифицировать по IP-адресам и портам — **без отправки на фильтры**:
- **Реестр Роскомнадзора** (в части IP-адресов) — все правила блокировки по IP загружаются на балансировщик, что снижает нагрузку на фильтры;
- **Блокировка протоколов** (например, Telegram) — очищенные списки IP-адресов и портов загружаются из ЦСУ по BGP.
Принципиальное отличие от ТСПУ тип А: на первом эшелоне блокировка протоколов (Telegram и др.) выполняется **на фильтрах** с помощью DPI. На втором эшелоне эта блокировка выполняется **на самом балансировщике** по IP-спискам. Более того, в прошивке фильтров, предназначенных для эшелонированной системы, возможности блокировки протоколов (например, Telegram) **отсутствуют** — они просто не нужны, поскольку этим занимается Eco Highway.
### 7.3.3. Фильтры в режиме On-a-stick, VLAN-разделение LAN/WAN
Фильтры в эшелонированной системе подключены **иначе**, чем в ТСПУ тип А:
| Параметр | ТСПУ тип А (EcoFilter Balancer) | ТСПУ тип Б (Eco Highway) |
| ------------------- | ------------------------------- | -------------------------------------- |
| **Подключение** | Пары портов LAN + WAN | Режим on-a-stick (все порты равноправны) |
| **Разделение LAN/WAN** | На уровне физических портов | На уровне VLAN-тегов |
| **Чётность портов** | Чётные = LAN, нечётные = WAN | Не соблюдается |
В режиме on-a-stick каждый физический порт фильтра **равноправен**. Разделение между LAN и WAN происходит на уровне специального VLAN-заголовка:
1. Eco Highway при отправке пакета на фильтр добавляет **VLAN-тег**, обозначающий направление (LAN);
2. Фильтр после обработки **меняет** этот VLAN-тег на другой (WAN);
3. Eco Highway по VLAN-тегу определяет направление и отправляет пакет дальше.
Таким образом, логическое разделение LAN/WAN сохраняется, но на уровне физики все интерфейсы фильтра однотипные.
### 7.3.4. Фильтры занимаются только URL-фильтрацией по реестру РКН
Поскольку блокировка по IP-адресам и протоколам выполняется самим Eco Highway, фильтры в эшелонированной системе занимаются **исключительно URL-фильтрацией** по реестру Роскомнадзора — той частью блокировки, которая требует глубокого анализа содержимого пакетов (DPI) и не может быть выполнена на уровне балансировщика.
Это означает, что на фильтры отправляется **минимально возможный** объём трафика — только тот, который требует проверки по URL. Всё остальное обрабатывается или пропускается балансировщиком.
Благодаря упрощённому функционалу (нет распознавания протоколов, нет логирования соединений) производительность фильтров на эшелоне **несколько выше**, чем на ТСПУ тип А — примерно на 15%. Однако разница невелика, и при проектировании рекомендуется использовать те же расчётные цифры производительности, что и для ТСПУ тип А.
## 7.4. Два конвейера (Pipeline) в Eco Highway
Внутри чипа Barefoot Tofino, на котором построен балансировщик, существуют **два независимых конвейера** (Pipeline 1 и Pipeline 2) — логические структуры, обрабатывающие входящий трафик на высокой скорости. Каждый конвейер обладает собственным **независимым набором ресурсов**: памятью и вычислительной мощностью.
На обычном балансировщике (EcoFilter Balancer) оба конвейера **настроены идентично** — в какой бы конвейер ни попал пакет, обработка будет одинаковой. На Eco Highway конвейеры **настраиваются по-разному** — это позволяет в два раза увеличить доступное количество правил фильтрации.
### 7.4.1. Разделение портов между конвейерами
Все физические порты балансировщика **жёстко привязаны** к одному из двух конвейеров на заводском уровне — примерно половина портов обслуживается Pipeline 1, половина — Pipeline 2.
На Eco Highway это разделение используется целенаправленно:
- **LAN-порты** (в сторону оператора связи) прикрепляются к **одному конвейеру**;
- **WAN-порты** (в сторону интернета) прикрепляются к **другому конвейеру**.
Принцип чётных/нечётных портов, используемый на EcoFilter Balancer, на эшелоне **не соблюдается** и не имеет значения.
### 7.4.2. Физическая перемычка между конвейерами
Поскольку конвейеры **логически изолированы** друг от друга внутри чипа (прямой связи между ними нет), для передачи пакета из одного конвейера в другой используется **физическая перемычка** (jumper) — кабель, соединяющий порт одного конвейера с портом другого.
```text
┌──────────────────────────────────────────────────┐
│ Eco Highway │
│ │
│ Pipeline 1 Pipeline 2 │
│ ┌────────────┐ ┌────────────┐ │
│ │ Таблицы │ │ Таблицы │ │
│ │ фильтрации │ │ фильтрации │ │
│ │ (набор A) │ │ (набор B) │ │
│ └──────┬─────┘ └──────┬─────┘ │
│ │ │ │
│ P41 ←┼── LAN-порты WAN-порты ──┼→ P91 │
│ P42 ←┘ ┌─┼→ P92 │
│ │ ┌──────────────┐ │ │
│ └─────┤ Перемычка ├─────────┘ │
│ └──────────────┘ │
│ │ │ │
│ Порты к фильтрам Порты к фильтрам │
└──────────────────────────────────────────────────┘
```
Перемычка должна быть рассчитана на **весь объём трафика**, проходящего через балансировщик. В худшем случае весь трафик может пройти через перемычку, поэтому она не должна стать узким местом. При большом количестве высокоскоростных каналов может потребоваться несколько перемычек.
### 7.4.3. Прохождение пакета: drop / отправка на фильтр / переход на второй конвейер
Когда пакет попадает на вход Eco Highway, он проходит следующий путь:
**Шаг 1: Pipeline 1.** Пакет, вошедший через LAN-порт, попадает в конвейер, к которому этот порт привязан. Пакет проходит через все таблицы фильтрации данного конвейера. По результатам возможны **три исхода**:
1. **Drop** — пакет совпал с запрещающим правилом (например, IP-адрес Telegram) и **дропается**. Дальнейшая обработка не происходит;
2. **Отправка на фильтр** — пакет совпал с правилом перенаправления на фильтры (port redirect). Пакет отправляется на фильтр для URL-фильтрации, обрабатывается и **возвращается напрямую** оператору, минуя второй конвейер;
3. **Переход на Pipeline 2** — пакет не совпал ни с одним правилом первого конвейера. Пакет выходит через порт, принадлежащий Pipeline 1, проходит через **физическую перемычку** и попадает на вход Pipeline 2.
**Шаг 2: Pipeline 2.** На втором конвейере пакет проходит через **другой набор правил** (отличающийся от первого). Результат аналогичен — drop, отправка на фильтр или пропуск дальше к оператору.
Важно: после отправки на фильтр пакет **не проходит** через второй конвейер повторно. Обработанный фильтром пакет сразу отправляется оператору через нужный порт. Это было исправлено после первоначальной реализации, где пакет мог дважды попасть на фильтры.
Также важно: хотя порты привязаны к конвейерам на входе, на **выходе** пакет может быть отправлен через **любой порт** — это логическая сущность обработки, а не жёсткая привязка входа к выходу. Пакет, пришедший через определённый LAN-порт, всё равно вернётся через **парный** ему WAN-порт (сохраняется привязка к линку оператора), но маршрут внутри балансировщика может быть произвольным.
### 7.4.4. Удвоение количества правил фильтрации
Разделение правил между двумя конвейерами позволяет **в два раза увеличить** общее количество правил фильтрации на Eco Highway. Память внутри чипа Barefoot Tofino, хранящая эти правила, является **очень быстрой** (работает на скорости провода), но крайне ограниченной по объёму — это, по сути, программируемый TCAM (Content-Addressable Memory). Каждое дополнительное правило — на вес золота.
На обычном EcoFilter Balancer, где оба конвейера идентичны, удвоение невозможно — один и тот же набор правил дублируется. На Eco Highway каждый конвейер несёт **свой уникальный набор**, удваивая суммарную ёмкость.
## 7.5. Отличия EcoFilter Balancer от Eco Highway
| Характеристика | EcoFilter Balancer (тип А) | Eco Highway (тип Б) |
| --------------------------- | -------------------------- | ------------------------------------------- |
| **Аппаратная платформа** | Одинаковая | Одинаковая |
| **Программное обеспечение** | Одно | Другое |
| **Назначение** | Балансировка трафика | Балансировка + самостоятельная фильтрация |
| **Правила фильтрации** | Вручную, единицы | По BGP из ЦСУ, десятки/сотни тысяч |
| **Собственная фильтрация** | Нет (только bypass/balance)| Да (drop по L3/L4-заголовкам) |
| **Конвейеры (Pipeline)** | Настроены идентично | Настроены по-разному (удвоение правил) |
| **Перемычка** | Не требуется | Обязательна (физический кабель) |
| **Подключение фильтров** | Пары LAN/WAN | On-a-stick (VLAN-разделение) |
| **Связь с ЦСУ** | Только management | BGP для загрузки списков |
| **Логирование** | Через фильтры | Отсутствует (только real-time) |
Разрабатываются обе платформы **одной группой программистов**, и код во многом пересекается. Решения, созданные в рамках реализации Eco Highway, нередко переносятся на EcoFilter Balancer (например, команды программного байпаса), и наоборот.
## 7.6. Отсутствие логирования на Eco Highway (только real-time)
На Eco Highway **не ведётся логирование** — информация о дропнутых и перенаправленных пакетах **не отправляется** на серверы логирования. Доступен только **просмотр в реальном времени** (real-time) на самом устройстве, без сохранения истории.
Причина: объём трафика, проходящего через эшелон, **значительно больше**, чем через ТСПУ тип А. Если ТСПУ тип А обрабатывает трафик конкретного набора абонентов, то ТСПУ тип Б может пропускать через себя трафик множества операторов на уровне ядра сети. Логирование такого объёма потребовало бы несоразмерных ресурсов.
Протокольные логи (для формирования очищенных списков блокировки) по-прежнему отправляются **только с фильтров первого эшелона** (ТСПУ тип А) через SPFS.
Для диагностики на Eco Highway доступны следующие возможности:
- **Просмотр списков в ЦСУ** — можно проверить, содержит ли конкретный IP-адрес или порт в загруженных списках;
- **Программный байпас** — можно перевести Eco Highway в режим полного программного байпаса и проверить, восстанавливается ли доступность у оператора;
- **Проверка на фильтрах** — убедиться, что нужная сессия не обрабатывается и на фильтрах второго эшелона.
## 7.7. Прозрачный пропуск трафика, уже обработанного ТСПУ тип А
Eco Highway должен уметь **различать** трафик, уже обработанный ТСПУ тип А на первом эшелоне, и трафик, который первый эшелон не видел.
Трафик, который **уже прошёл** через ТСПУ тип А (на нижнем уровне, на уровне доступа), **не должен обрабатываться повторно** на втором эшелоне. Для этого на Eco Highway предусмотрена возможность **прозрачного пропуска** такого трафика — он просто «пролетает насквозь» без фильтрации.
Это позволяет избежать двойной обработки и связанных с ней проблем (удвоение сессий, ложные срабатывания, избыточная нагрузка), аналогичных проблемам двойного прохождения при on-a-stick подключении (подробнее — в [разделе 6.4.3](06.md)).
---
[← Оглавление](../README.md) · [← Раздел 6: Места установки ТСПУ](06.md) · [Раздел 8: Формирование протокольных списков →](08.md)

156
chapters/08.md Normal file
View File

@@ -0,0 +1,156 @@
# 8. Формирование протокольных списков (двухстадийная блокировка)
[← Оглавление](../README.md) · [← Раздел 7: Эшелонированная система](07.md)
---
## 8.1. Первый этап: распознавание протоколов на фильтрах (ТСПУ тип А)
Блокировка протоколов (Telegram, WhatsApp, Viber и др.) в системе ТСПУ реализована **в два этапа** — так называемая двухстадийная блокировка. Необходимость двухстадийного подхода обусловлена природой распознавания шифрованного трафика: фильтр анализирует сессию по множеству косвенных признаков (размеры пакетов, частота прохождения, вариации размеров, ключевые слова внутри пакетов), и такое распознавание **не является стопроцентным**. Возможны ложноположительные срабатывания — когда другой шифрованный трафик по тем же критериям ошибочно распознаётся как, например, Telegram. Прямая блокировка по результатам DPI на фильтре привела бы к случайной блокировке легитимных ресурсов.
На **первом этапе** фильтры ТСПУ тип А выполняют только **распознавание** протоколов, но **не блокируют** их:
1. Трафик проходит через фильтр и обрабатывается движком DPI;
2. DPI-движок анализирует каждую сессию по множеству параметров (многофакторный анализ) и определяет, к какому протоколу она относится;
3. Фильтр фиксирует результат распознавания в виде **протокольного лога** — записи о том, что конкретная сессия предварительно опознана как сессия определённого протокола;
4. Сессия при этом **не блокируется** — трафик продолжает проходить без ограничений.
Распознавание выполняется в рамках DPI-листа (например, DPI-лист 0), на котором установлен режим **behavior: ignore** — это означает, что срабатывание правил фиксируется, но никаких блокирующих действий не предпринимается.
## 8.2. Отправка логов на SPFS (сервер предварительного формирования списков)
Протокольные логи с результатами распознавания отправляются с фильтров на **SPFS** (сервер предварительного формирования списков), расположенный на той же площадке ТСПУ.
Отправка настраивается в секции **debug logger** конфигурации фильтра:
- **Включение отправки** — секция активируется для нужных протоколов;
- **Выбор протоколов** — по умолчанию `all` (все распознаваемые протоколы), но можно указать только конкретные (Telegram, WhatsApp и т.д.);
- **Количество пакетов на протокол** — определяет, сколько пакетов из каждой распознанной сессии будет отправлено в лог. По умолчанию значение 0 (без ограничения, что соответствует первым 30 пакетам). На практике для корректного анализа достаточно **3 пакетов** — это значение было подтверждено в ходе тестов на Урале. Значение 30 генерирует избыточный объём лог-трафика;
- **Лог-интерфейс** — по умолчанию используется выделенный лог-интерфейс (DPDK). Возможно переключение на management-интерфейс, однако это **не рекомендуется**, так как производительность отправки логов значительно снизится;
- **Адрес и порт назначения** — указываются координаты сервера SPFS на площадке.
SPFS занимается **накоплением** поступающих протокольных логов со всех фильтров площадки и их **предварительной обработкой** перед отправкой в центральную систему управления.
## 8.3. Передача логов по GRPC в центральную систему управления
Накопленные и предварительно обработанные логи SPFS передаёт в **центральную систему управления (ЦСУ)** по протоколу **gRPC**.
```text
ТСПУ тип А (площадка) Центральная система управления
┌──────────────────────┐ ┌──────────────────────────┐
│ │ │ │
│ Фильтр 1 ──┐ │ │ Подсистема формирования │
│ Фильтр 2 ──┼→ SPFS ├── gRPC ───→│ списков фильтрации │
│ Фильтр N ──┘ │ │ │
│ │ VPN │ • Сбор логов со всех │
└──────────────────────┘ (Континент)│ площадок ТСПУ тип А
│ • Сохранение в БД │
ТСПУ тип А (площадка) │ • Периодический анализ │
┌──────────────────────┐ │ • Формирование списков │
│ │ │ │
│ Фильтр 1 ──┐ │ └──────────────────────────┘
│ Фильтр 2 ──┼→ SPFS ├── gRPC ───→
│ Фильтр N ──┘ │
│ │
└──────────────────────┘
```
ЦСУ представляет собой **многокомпонентную распределённую систему**, развёрнутую на двух независимых площадках. Связь между площадками ТСПУ и ЦСУ осуществляется через **VPN** (криптошлюз «Континент»). Данные поступают со **всех площадок** ТСПУ тип А по всей стране — это порядка 350 площадок и около 5 000 устройств.
Протокольные логи отправляются **только с фильтров ТСПУ тип А** (первого эшелона). Фильтры ТСПУ тип Б (эшелон) протокольных логов **не генерируют** — на них отсутствует функционал распознавания протоколов, поскольку блокировка протоколов на эшелоне выполняется самим балансировщиком Eco Highway по уже готовым спискам.
## 8.4. Анализ, очистка от ложных срабатываний, формирование списков
Внутри ЦСУ за обработку протокольных логов отвечает **подсистема формирования списков фильтрации**. Эта подсистема выполняет несколько ключевых функций:
**Сбор и хранение.** Логи со всех площадок ТСПУ тип А сохраняются в базе данных ЦСУ. Система агрегирует данные с множества фильтров, что даёт ей **значительно более полную картину**, чем та, которую видит каждый отдельный фильтр.
**Периодический анализ.** С заданной периодичностью подсистема проводит анализ накопленных данных. Периодичность анализа — **настраиваемый параметр**: можно запускать анализ раз в минуту, раз в 5 минут и т.д. Более частый анализ требует большей производительности серверов.
**Очистка от ложных срабатываний.** Ключевое преимущество централизованного анализа — возможность проведения **более глубокого анализа**, чем на отдельном фильтре:
- **Сопоставление сессий с различных устройств** — ЦСУ видит данные с множества фильтров на разных площадках, а не только с одного конкретного. Это позволяет выявлять закономерности, недоступные на уровне единичного фильтра;
- **Статистический анализ** — использование накопленных статистических данных для верификации результатов распознавания;
- **Обогащение данных** — дополнение результатов распознавания сторонней информацией для повышения точности;
- **Выделение конкретных адресов** — на примере Telegram: из всех сессий, распознанных как Telegram, формируется список IP-адресов и портов, на которых были обнаружены серверы Telegram или его прокси различных типов.
**Формирование очищенных списков.** По результатам анализа создаются **очищенные списки**, в которых вероятность ложноположительного срабатывания **крайне низка**. Эти списки содержат конкретные IP-адреса и порты (для каждого протокола — свой список), которые система с высокой степенью уверенности идентифицировала как принадлежащие блокируемому протоколу.
## 8.5. Загрузка очищенных списков обратно на фильтры (HTTP) и на Eco Highway (BGP)
Сформированные очищенные списки загружаются обратно на оборудование ТСПУ двумя путями:
### Загрузка на фильтры ТСПУ тип А (по HTTP)
Очищенные списки загружаются на фильтры по протоколу **HTTP** в **отдельный DPI-лист**, отличный от того, в котором выполняется распознавание:
| DPI-лист | Назначение | Behavior |
|----------|-----------|----------|
| DPI-лист 0 | Распознавание протоколов (первый этап) | **ignore** — срабатывание фиксируется, но не блокируется |
| DPI-лист 5 (пример) | Блокировка по очищенным спискам из ЦСУ | **block** — трафик блокируется |
Таким образом, на одном фильтре **одновременно работают два процесса**:
- в DPI-листе 0 продолжается распознавание новых сессий и отправка логов;
- в DPI-листе 5 выполняется блокировка по уже проверенным и очищенным спискам.
### Загрузка на Eco Highway (по BGP)
Те же очищенные списки, но в **несколько ином формате**, загружаются по протоколу **BGP** на балансировщики **Eco Highway** (ТСПУ тип Б). На эшелоне блокировка протоколов выполняется **самим балансировщиком** по IP-адресам и портам — без участия фильтров.
```text
Центральная система управления
┌──────────────────────────────┐
│ Очищенные списки │
│ (IP + порт для каждого │
│ протокола) │
└───────┬──────────┬──────────┘
│ │
HTTP │ │ BGP
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ Фильтры │ │ Eco │
│ ТСПУ А │ │ Highway │
│ │ │ ТСПУ Б │
│ DPI-лист 5│ │ │
│ behavior: │ │ Блокировка│
│ block │ │ по L3/L4 │
└───────────┘ └───────────┘
```
Фильтры ТСПУ тип Б получают от Eco Highway только тот трафик, который требует URL-фильтрации по реестру РКН. Блокировка протоколов в прошивке фильтров эшелона **отсутствует** — она не нужна, поскольку этим занимается сам балансировщик.
## 8.6. Время полного цикла блокировки: ~515 минут
Полный цикл двухстадийной блокировки — от момента появления нового, ранее неизвестного сервера блокируемого протокола до его фактической блокировки — составляет **от 5 до 15 минут**.
```text
┌────────────────────────────────────────────────────────────────┐
│ Полный цикл блокировки │
│ │
│ 1. Абонент подключается к новому серверу ─┐ │
│ (например, новая Telegram-прокси) │ │
│ │ ~515 мин │
│ 2. Фильтр распознаёт протокол (DPI) │ │
│ 3. Лог отправляется на SPFS │ │
│ 4. SPFS передаёт в ЦСУ (gRPC) │ │
│ 5. ЦСУ анализирует и формирует список │ │
│ 6. Список загружается на фильтры (HTTP) │ │
│ и Eco Highway (BGP) │ │
│ 7. Блокировка активируется ─┘ │
└────────────────────────────────────────────────────────────────┘
```
Эти данные получены в ходе тестирования эшелонированной системы в тестовой зоне в Сургуте. Время полного цикла **зависит от настроек**:
- **Периодичность анализа на ЦСУ** — чем чаще запускается анализ базы данных (например, раз в минуту вместо раз в 5 минут), тем быстрее формируются списки, но тем выше нагрузка на серверы;
- **Настройки SPFS** — параметры накопления и предварительной обработки логов;
- **Количество сессий по данному протоколу** — при большом количестве сессий (много абонентов используют блокируемый протокол) блокировка срабатывает быстрее, так как данных для анализа больше.
**Важно:** до момента обновления списка фильтр **не обрывает** существующие сессии блокируемого протокола. Например, если появилась новая Telegram-прокси, которая ранее нигде не была зафиксирована, абонент может свободно работать через неё до тех пор, пока фильтр не получит обновлённый список, содержащий адрес этой прокси.
Поскольку проект подобного масштаба реализуется впервые, текущие параметры основаны на эмпирических данных из тестовых сегментов. Не исключена корректировка параметров в ту или иную сторону по мере накопления опыта эксплуатации. Если серверы будут перегружаться, можно снизить частоту анализа — это увеличит время блокировки, но позволит существующим серверам справляться с нагрузкой.
---
[← Оглавление](../README.md) · [← Раздел 7: Эшелонированная система](07.md) · [Раздел 9: Центральная система управления →](09.md)

95
chapters/09.md Normal file
View File

@@ -0,0 +1,95 @@
# 9. Центральная система управления (ЦСУ)
[← Оглавление](../README.md) · [← Раздел 8: Формирование протокольных списков](08.md)
---
## 9.1. Архитектура: две независимые площадки (основная и резервная)
Центральная система управления (ЦСУ) — это централизованная платформа, через которую осуществляется управление всеми ТСПУ, развёрнутыми по стране. ЦСУ располагается в **двух независимых ЦОДах**:
- **Основная площадка** — основной центр обработки данных;
- **Резервная площадка** — дублирующий центр, обеспечивающий отказоустойчивость.
```text
┌───────────────────┐ ┌───────────────────┐
│ Основная площадка │◄───────►│ Резервная площадка │
│ ЦСУ │ Канал │ ЦСУ │
│ │ связи │ │
└────────┬──────────┘ └──────────┬────────┘
│ │
│ VPN (криптошлюз «Континент») │
│ │
┌────────┴───────────────────────────────┴────────┐
│ │
│ Интернет (публичные каналы) │
│ │
└──┬──────┬──────┬──────┬──────┬──────┬──────┬──┘
│ │ │ │ │ │ │
ТСПУ ТСПУ ТСПУ ТСПУ ТСПУ ТСПУ ...
площ.1 площ.2 площ.3 площ.4 площ.5 площ.6
```
Обе площадки **связаны между собой** выделенным каналом связи, по которому осуществляется репликация данных и обеспечивается отказоустойчивость. Пользователи (инженеры эксплуатации) также попадают на ЦСУ через **шифрованные VPN-каналы**.
## 9.2. Связь с ТСПУ через VPN (криптошлюз «Континент»)
Связь между площадками ТСПУ и центральной системой управления осуществляется через **VPN**, построенный на криптошлюзах **«Континент»** (модель IPC-3000 или аналогичная).
На каждой площадке ТСПУ установлен криптошлюз, который через **публичные интернет-каналы** устанавливает VPN-соединение с более мощной моделью криптошлюза на стороне ЦСУ. Через этот VPN-канал обеспечивается:
- **Управление устройствами** — доступ к CLI фильтров, балансировщиков, байпасов;
- **Сбор данных** — протокольные логи (gRPC от SPFS), системные логи (syslog), данные мониторинга (SNMP);
- **Распространение списков** — загрузка очищенных списков на фильтры (HTTP) и на Eco Highway (BGP);
- **Обновление ПО** — централизованная загрузка прошивок на оборудование.
Каждая площадка ТСПУ связана **как с основной, так и с резервной** площадкой ЦСУ, что обеспечивает непрерывность управления при выходе из строя одной из площадок.
Криптошлюз «Континент» на площадке ТСПУ выступает **шлюзом по умолчанию** для всех устройств сегмента управления (адрес .254 в подсети управления — подробнее в [разделе 10](10.md)).
## 9.3. Масштаб: ~350 площадок, ~5000 устройств
На текущем этапе федерального проекта ЦСУ обслуживает:
| Параметр | Значение |
| --------------------------- | --------------- |
| **Количество площадок ТСПУ** | ~350 |
| **Суммарное количество устройств** | ~5 000 |
| **Типы устройств** | Фильтры, балансировщики, байпасы, SPFS, СПХД |
Предполагается дальнейшее расширение по мере развития проекта.
## 9.4. Подсистемы ЦСУ: формирование списков, мониторинг, логирование, картография
ЦСУ представляет собой **многокомпонентную распределённую систему**, состоящую из нескольких подсистем, каждая из которых выполняет свою задачу:
| Подсистема | Назначение |
| ----------------------------------- | ------------------------------------------------------------------------------------------- |
| **Формирование списков фильтрации** | Сбор протокольных логов с SPFS на площадках ТСПУ, анализ, формирование очищенных списков и их распространение на фильтры (HTTP) и Eco Highway (BGP) |
| **Мониторинг** | Наблюдение за состоянием оборудования ТСПУ на всех площадках |
| **Логирование** | Сбор и хранение системных журналов с устройств |
| **Картография** | Визуализация размещения оборудования и его состояния |
| **Отчётность (Reports)** | Формирование отчётов о работе системы |
Архитектура каждой подсистемы, схемы обмена данными и внутренние процессы подробно описаны в отдельном документе — **«Системная архитектура центральной системы управления»**.
Поддержкой и настройкой ЦСУ занимается **команда DevOps**. Инженеры, обслуживающие ТСПУ, являются **пользователями** ЦСУ — они используют её интерфейсы для мониторинга и управления, но не занимаются настройкой самой системы. Заливка программного обеспечения на ЦСУ также выполняется командой DevOps, тогда как заливка ПО на оборудование ТСПУ выполняется совместно инженерами площадки и разработчиками (ДЦА готовит конфигурации и новое ПО, инженеры на местах выполняют установку).
## 9.5. Новая ЦСУ для федерального проекта (замена уральской)
В ходе развития проекта АСБИ существовали **две версии** ЦСУ:
| Параметр | Уральская ЦСУ (пилот) | Федеральная ЦСУ (новая) |
| ------------------------ | ---------------------------------------- | -------------------------------------------- |
| **Охват** | Уральский регион (пилотный проект) | Вся страна (федеральный проект) |
| **Статус** | Тупиковая ветвь развития | Активная разработка |
| **Функционал** | Ограниченный | Полный (все подсистемы) |
| **Подключение площадок** | Только уральские площадки | Все площадки, включая переподключение Урала |
ЦСУ, работавшая на уральском пилотном проекте, является **тупиковой ветвью развития** — она не будет развиваться дальше. Для федерального проекта разрабатывается **полностью новая ЦСУ**, к которой будут подключены все площадки ТСПУ по всей стране, включая переподключение уральских площадок с пилотной системы.
Новая ЦСУ на момент проведения лекции находилась **в процессе разработки** — планировалось, что она начнёт функционировать к ноябрю и будет сдана в декабре. До момента запуска новой ЦСУ мониторинг и управление площадками осуществлялись через существующую (уральскую) систему в ограниченном объёме.
---
[← Оглавление](../README.md) · [← Раздел 8: Формирование протокольных списков](08.md) · [Раздел 10: Сегмент управления ТСПУ →](10.md)

90
chapters/10.md Normal file
View File

@@ -0,0 +1,90 @@
# 10. Сегмент управления ТСПУ
[← Оглавление](../README.md) · [← Раздел 9: Центральная система управления](09.md)
---
## 10.1. Адресация: 10.<регион>.<площадка>.0/24
Каждая площадка ТСПУ имеет собственный **сегмент управления** — выделенную подсеть для management-интерфейсов всех устройств. Адресация сегмента управления построена по единой схеме:
```text
10.<регион>.<площадка>.0/24
```
Где:
| Октет | Значение | Пример |
| -------- | ------------------------------------- | --------------------------- |
| Первый | Всегда `10` (частная адресация) | `10` |
| Второй | Номер региона (всего ~88 в стране) | `77` (Москва) |
| Третий | Номер площадки в данном регионе | `1`, `2`, `3`... |
| Четвёртый | Адрес устройства в подсети /24 (256 адресов) | `0``254` |
Таким образом, для площадки в Москве management-адрес будет выглядеть как `10.77.<номер_площадки>.0/24`.
## 10.2. Распределение адресов: байпасы, балансировщики, BMC, фильтры, IPMI, SPFS, СПХД
Все 256 адресов подсети /24 распределяются между устройствами площадки по фиксированной схеме:
```text
10.<регион>.<площадка>.0/24
┌────────────────────────────────────────────────────────────┐
│ .1 .128 │ Управление байпасами (128 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .131 .140 │ Управление балансировщиками (10 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .141 .150 │ BMC балансировщиков (10 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .151 .190 │ Управление фильтрами (40 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .191 .230 │ IPMI фильтров (40 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .231 .235 │ SPFS (management + IPMI) (5 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .241 .245 │ СПХД (management + IPMI) (5 шт.) │
├─────────────────┼─────────────────────────────────────────┤
│ .254 │ Шлюз по умолчанию (криптошлюз) │
└────────────────────────────────────────────────────────────┘
```
Основные группы устройств:
- **Байпасы** (.1.128) — наибольший диапазон, поскольку количество байпасов определяется количеством каналов связи оператора и может быть значительным;
- **Балансировщики** (.131.140) — management-интерфейсы балансировщиков (микросервер);
- **BMC балансировщиков** (.141.150) — BMC (Baseboard Management Controller) — аналог IPMI у фильтров, позволяет управлять аппаратной частью балансировщика даже при выходе из строя основного управляющего модуля;
- **Фильтры** (.151.190) — management-интерфейсы фильтров;
- **IPMI фильтров** (.191.230) — интерфейсы IPMI (Intelligent Platform Management Interface) для аппаратного управления серверами фильтров;
- **SPFS** (.231.235) — серверы предварительного формирования списков;
- **СПХД** (.241.245) — серверы предварительного хранения данных (syslog-серверы), используемые для хранения системных журналов со всех устройств площадки.
## 10.3. Шлюз по умолчанию — криптошлюз «Континент»
Адрес **.254** в подсети управления закреплён за **криптошлюзом «Континент»**, который является **шлюзом по умолчанию** для всех устройств площадки.
```text
Устройства площадки ТСПУ
┌──────────────────────────┐
│ Байпасы │
│ Балансировщики │──── .254 ────► Криптошлюз ──── VPN ────► ЦСУ
│ Фильтры │ «Континент»
│ SPFS, СПХД │
└──────────────────────────┘
```
Криптошлюз устанавливает **VPN-соединение** через публичные интернет-каналы с аналогичным (но более мощным) криптошлюзом на стороне ЦСУ. Через этот VPN осуществляется весь management-трафик: доступ к устройствам, сбор логов, мониторинг, обновление ПО и загрузка списков фильтрации.
Каждая площадка ТСПУ связана **с обеими площадками ЦСУ** (основной и резервной), что обеспечивает отказоустойчивость управления.
## 10.4. Подсеть логирования (единая для всех ТСПУ)
Помимо основной подсети управления (/24), в сегменте управления присутствует **отдельная подсеть логирования**. Эта подсеть используется для лог-интерфейсов фильтров — выделенных высокопроизводительных интерфейсов (DPDK), через которые передаются журналы соединений (connection log).
Ключевая особенность: подсеть логирования **единая и одинаковая** для всех площадок ТСПУ по всей стране. Это допустимо, поскольку данная подсеть **не выходит за пределы** конкретной площадки — нет необходимости обращаться извне к лог-интерфейсам устройств. Лог-интерфейсы не имеют полноценного IP-стека и не обрабатывают входящие пакеты (невозможно их «пропинговать»), что сделано для повышения производительности.
Системное логирование (syslog) при этом отправляется **через management-интерфейс**, а не через лог-интерфейс. Журналы соединений (connection log) — напротив, по умолчанию отправляются через **лог-интерфейс** (DPDK). Все системные логи с устройств площадки сохраняются на **СПХД** (серверы предварительного хранения данных), что обеспечивает возможность ретроспективного анализа событий на фильтрах, балансировщиках и байпасах.
---
[← Оглавление](../README.md) · [← Раздел 9: Центральная система управления](09.md) · [Раздел 11: Фильтр: аппаратная платформа →](11.md)

140
chapters/11.md Normal file
View File

@@ -0,0 +1,140 @@
# 11. Фильтр: аппаратная платформа
[← Оглавление](../README.md) · [← Раздел 10: Сегмент управления ТСПУ](10.md)
---
## 11.1. Младшая линейка: EcoFilter 2020/2040
Фильтры выпускаются в двух линейках. **Младшая линейка** включает модели:
| Модель | Количество 10G-интерфейсов для трафика |
| ---------------- | -------------------------------------- |
| **EcoFilter 20** | 2 × 10 Гбит/с |
| **EcoFilter 40** | 4 × 10 Гбит/с |
Модели младшей линейки отличаются от старшей только количеством десятигигабитных интерфейсов для обработки трафика. Внутренняя архитектура, программное обеспечение и принципы работы — одинаковы.
## 11.2. Старшая линейка: EcoFilter 4080/4120/4160
**Старшая линейка** включает модели с большим количеством интерфейсов:
| Модель | Количество 10G-интерфейсов для трафика |
| -------------------- | -------------------------------------- |
| **EcoFilter 4080** | 8 × 10 Гбит/с |
| **EcoFilter 4120** | 12 × 10 Гбит/с |
| **EcoFilter 4160** | 16 × 10 Гбит/с |
Как видно из названий, номер модели напрямую связан с количеством интерфейсов: **40**80 → **8**×10G, **41**20 → **12**×10G, **41**60 → **16**×10G.
Все модели обеих линеек:
- монтируются в 19-дюймовую стойку, форм-фактор **1U**;
- оснащены **двумя блоками питания** (постоянного или переменного тока), заменяемыми на горячую;
- имеют **вентиляторы**, заменяемые на горячую;
- имеют порты **Console**, **Management** и **лог-интерфейсы** на передней панели.
> **Примечание о производительности.** Маркетинговые материалы указывают производительность до 160 Гбит/с, однако эта цифра относится к функционалу NAT-трансляции, который в проекте ТСПУ не используется. Реальная производительность в режиме DPI-фильтрации существенно ниже и зависит от профиля трафика.
## 11.3. Модели 2019 года (пилотный проект, Урал)
Модели 2019 года установлены на **пилотном проекте** (Уральский регион) и продолжают там работать.
### 11.3.1. Процессоры Intel Xeon 2695/2699, 18/22 ядра, 128/256 ГБ RAM
| Параметр | EcoFilter 4080 | EcoFilter 4120 / 4160 |
| ----------------------- | --------------------------- | --------------------------- |
| **Процессор** | Intel Xeon 2695 | Intel Xeon 2699 |
| **Количество ядер** | 18 | 22 |
| **Оперативная память** | 128 ГБ | 256 ГБ |
| **Накопитель** | SSD 32 ГБ | SSD 32 ГБ |
| **Блоки питания** | 2 (AC или DC), hot-swap | 2 (AC или DC), hot-swap |
На передней панели расположены разъёмы Console, Management и лог-интерфейс. На задней панели — два медных логирующих порта и от 8 до 16 десятигигабитных интерфейсов для обработки трафика.
### 11.3.2. Фиксированные сетевые интерфейсы
В моделях 2019 года сетевые интерфейсы для обработки трафика **встроены** в платформу — заменить или поменять интерфейсные платы невозможно. Количество и тип портов определяются моделью на этапе производства.
## 11.4. Модели 2020 года (федеральный проект)
Модели 2020 года поставляются в рамках **федерального проекта** и имеют ряд улучшений по сравнению с моделями 2019 года.
### 11.4.1. Процессор Intel Xeon Gold 6212, 24 ядра, 192/384 ГБ RAM
| Параметр | EcoFilter 4080 | EcoFilter 4120 / 4160 |
| ----------------------- | --------------------------- | --------------------------- |
| **Процессор** | Intel Xeon Gold 6212 | Intel Xeon Gold 6212 |
| **Количество ядер** | 24 | 24 |
| **Оперативная память** | 192 ГБ | 384 ГБ |
| **Накопитель** | SSD 32 ГБ | SSD 32 ГБ |
| **Блоки питания** | 2 (AC или DC), hot-swap | 2 (AC или DC), hot-swap |
Процессор нового поколения (**Gold 6212** вместо серии 2695/2699) обеспечивает большее количество ядер (24 против 18/22) и поддержку большего объёма оперативной памяти.
### 11.4.2. Сменные сетевые интерфейсы, 4× SFP+ лог-порта
Ключевые отличия от моделей 2019 года:
- **Сменные сетевые интерфейсы** — интерфейсные платы для обработки трафика можно вытаскивать и заменять, что упрощает обслуживание и позволяет адаптировать конфигурацию под конкретную площадку;
- **Лог-интерфейсы** — вместо двух медных портов на задней панели теперь **4 порта SFP+ (10 Гбит/с)** для логирования.
Поставщики аппаратных платформ для федерального проекта могут быть **разными** (например, стандартная «голубая» платформа RDP.ru или чёрные платформы от вендора Lanner), поэтому внешний вид может отличаться. Однако внутренняя аппаратная начинка и принципы работы остаются одинаковыми.
## 11.5. Разделение интерфейсов: LAN (чётные) / WAN (нечётные)
Все интерфейсы фильтра, предназначенные для обработки трафика, **строго разделены** на две группы:
```text
Передняя панель фильтра (пример EcoFilter 4160)
┌──────────────────────────────────────────────────┐
│ Console Mgmt Log │
│ │
│ Интерфейсы для трафика: │
│ │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ... │
│ │ 0 │ │ 1 │ │ 2 │ │ 3 │ │ 4 │ │ 5 │ │
│ │LAN │ │WAN │ │LAN │ │WAN │ │LAN │ │WAN │ │
│ └────┘ └────┘ └────┘ └────┘ └────┘ └────┘ │
│ чёт. нечёт. чёт. нечёт. чёт. нечёт. │
└──────────────────────────────────────────────────┘
```
| Тип порта | Нумерация | Направление |
| --------- | ------------- | --------------------------------- |
| **LAN** | Чётные (0, 2, 4, 6...) | В сторону абонентов (от балансировщика) |
| **WAN** | Нечётные (1, 3, 5, 7...) | В сторону интернета (к балансировщику) |
Этот принцип чётных/нечётных портов **един** для всех моделей и поколений фильтров. Он же используется на балансировщиках EcoFilter Balancer (но **не соблюдается** на Eco Highway — подробнее в [разделе 7.4.1](07.md)).
Разделение LAN/WAN прослеживается через всё оборудование ТСПУ — от байпасов через балансировщики до фильтров. Это фундаментальный принцип архитектуры: трафик от абонентов всегда приходит со стороны LAN, трафик из интернета — со стороны WAN.
## 11.6. История платформы: от CGNAT (2013) к DPI-фильтру
Платформа фильтра имеет длительную историю развития, начавшуюся **в 2013 году** с устройства **CGNAT** (Carrier-Grade NAT), предназначенного для трансляции адресов у операторов связи. Поскольку платформа изначально создавалась для операторского применения, часть внутренней архитектуры (сессии, трансляции, понятия LAN/WAN) заточена под этот сценарий — что объясняет некоторые особенности, с которыми приходится сталкиваться при эксплуатации в режиме DPI-фильтра.
```text
2013 CGNAT (трансляция адресов)
├──── URL-фильтрация
├──── PPPoE BRAS (не используется в проекте ТСПУ)
├──── Router (параллельная ветка, не используется)
└──── DPI (распознавание протоколов) ◄── используется в проекте ТСПУ
```
Из всего доступного функционала платформы в проекте ТСПУ используются только **два модуля**:
| Модуль | Назначение |
| -------------- | ------------------------------------------------------------- |
| **EcoFilter** | Фильтрация трафика по спискам (реестр РКН, DPI-листы) |
| **EcoDPI** | Распознавание трафика приложений вплоть до 7-го уровня модели OSI |
Остальной функционал (NAT, BRAS, QoS, маршрутизация) доступен в прошивке, но **не задействован** в проекте ТСПУ.
---
[← Оглавление](../README.md) · [← Раздел 10: Сегмент управления ТСПУ](10.md) · [Раздел 12: Сессии и трансляции на фильтре →](12.md)

191
chapters/12.md Normal file
View File

@@ -0,0 +1,191 @@
# 12. Сессии и трансляции на фильтре
[← Оглавление](../README.md) · [← Раздел 11: Фильтр: аппаратная платформа](11.md)
---
## 12.1. Понятие сессии: local IP:port + global IP:port + remote IP:port
Вся обработка трафика на фильтре построена на понятии **сессии**. Сессия — это запись, описывающая конкретное соединение между абонентом и удалённым ресурсом. Каждая сессия содержит следующие поля:
```text
<направление> <протокол> <local IP>:<port> <global IP>:<port> <remote IP>:<port> <время> <тайм-аут>
```
| Поле | Описание |
| ----------------- | ----------------------------------------------------------- |
| **Направление** | Egress (от абонента) или Ingress (к абоненту) — по первому пакету |
| **Протокол** | Протокол L4: TCP, UDP, ICMP |
| **Local IP:port** | IP-адрес и порт абонента (серый, до NAT) |
| **Global IP:port**| IP-адрес и порт после NAT-трансляции (белый) |
| **Remote IP:port**| IP-адрес и порт удалённого ресурса в интернете |
| **Время** | Время последнего пакета в рамках данной сессии |
| **Тайм-аут** | Время, через которое сессия будет удалена при отсутствии трафика |
Сессия создаётся автоматически при прохождении первого пакета нового соединения через фильтр. Все последующие пакеты в рамках этого же соединения привязываются к уже существующей сессии.
## 12.2. Понятие трансляции: local IP:port ↔ global IP:port
**Трансляция** — это более простая сущность, описывающая связку между локальным (серым) адресом абонента и глобальным (белым) адресом из NAT-пула:
```text
<local IP>:<port> ↔ <global IP>:<port>
```
В отличие от сессии, трансляция **не содержит** remote-адреса. Это внутренняя абстракция фильтра, описывающая, каким образом транслируется адрес конкретного абонента.
Для просмотра трансляций используется команда `show xl` (в отличие от `show session` для сессий).
## 12.3. Режим без NAT: local = global
В проекте ТСПУ **NAT-трансляция не используется** — фильтр работает как прозрачное L2-устройство и не изменяет IP-адреса в пакетах. В этом режиме:
- **Local IP** всегда **совпадает** с **Global IP**;
- Local port всегда совпадает с Global port;
- Для IPv6-трафика NAT в принципе отсутствует.
```text
Режим с NAT (не используется в ТСПУ):
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Local IP │ ──► │ Global IP │ ──► │ Remote IP │
│ 10.0.0.1:80 │ │ 203.0.113.5 │ │ 93.184.216.34│
└──────────────┘ └──────────────┘ └──────────────┘
Режим без NAT (используется в ТСПУ):
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Local IP │ = │ Global IP │ ──► │ Remote IP │
│ 10.0.0.1:80 │ │ 10.0.0.1:80 │ │ 93.184.216.34│
└──────────────┘ └──────────────┘ └──────────────┘
```
Несмотря на то, что в режиме без NAT поля Local и Global дублируются, структура сессии остаётся прежней — это наследие архитектуры платформы, начинавшейся как CGNAT-устройство (подробнее — в [разделе 11.6](11.md)). На практике это означает, что команды фильтрации с ключевым словом `global` в нашем проекте **не имеют большого смысла** — достаточно использовать `local` и `remote`.
## 12.4. Направление сессии: Egress (от абонента) / Ingress (к абоненту)
Каждая сессия имеет **направление**, которое определяется **по первому пакету**, создавшему эту сессию:
| Направление | Первый пакет пришёл со стороны | Значение |
| ----------- | ------------------------------ | --------------------------------- |
| **Egress** | LAN-порт (абонент) | Абонент инициировал соединение |
| **Ingress** | WAN-порт (интернет) | Соединение инициировано извне |
Направление фиксируется **один раз** в момент создания сессии и больше не меняется. Никакого другого смысла, кроме указания стороны первого пакета, у направления нет.
Типичный сценарий: абонент открывает веб-страницу — первый SYN-пакет приходит со стороны LAN, сессия создаётся как **Egress**. Если же к абоненту приходит входящее соединение из интернета — первый пакет приходит со стороны WAN, сессия создаётся как **Ingress**.
## 12.5. Принцип: локальный IP абонента всегда на первом месте
Независимо от направления трафика, фильтр **всегда записывает** локальный IP-адрес абонента в поле **Local IP** — первое поле адресов в сессии:
```text
Пакет от абонента (LAN → WAN):
┌─────────────────────────────────────────────────────┐
│ Source IP: 10.0.0.1 → записывается в Local IP │
│ Dest IP: 93.184.216.34 → записывается в Remote IP│
└─────────────────────────────────────────────────────┘
Пакет к абоненту (WAN → LAN):
┌─────────────────────────────────────────────────────┐
│ Source IP: 93.184.216.34 → записывается в Remote IP│
│ Dest IP: 10.0.0.1 → записывается в Local IP │
└─────────────────────────────────────────────────────┘
```
То есть для пакетов со стороны LAN: Source IP → Local IP, Destination IP → Remote IP.
Для пакетов со стороны WAN: поля **меняются местами** — Destination IP → Local IP, Source IP → Remote IP.
Это **крайне важный принцип** для траблшутинга. Если при просмотре сессий в поле Local IP появляются интернет-адреса (которые там быть не должны), это признак проблемы на пути прохождения трафика — например, **перепутки LAN/WAN** (подробнее — в [разделе 24.6](24.md)).
## 12.6. Связь трансляций и сессий: одна трансляция — много сессий
В рамках одной трансляции может существовать **несколько сессий**:
```text
Трансляция (одна):
10.0.0.1:12345 ↔ 10.0.0.1:12345
Сессия 1: 10.0.0.1:12345 → 93.184.216.34:443
Сессия 2: 10.0.0.1:12345 → 151.101.1.69:443
Сессия 3: 10.0.0.1:12345 → 104.16.132.229:80
...
Сессия N: 10.0.0.1:12345 → 8.8.8.8:53
```
Логика жизненного цикла:
1. Проходит первый пакет нового соединения → создаётся **трансляция** и одновременно с ней первая **сессия**;
2. Если с того же локального адреса и порта устанавливаются соединения к другим ресурсам → создаются **новые сессии** в рамках той же трансляции;
3. Сессии удаляются индивидуально по своим тайм-аутам;
4. Трансляция **удаляется только после того**, как умерла последняя сессия в её рамках.
Пример: один абонентский порт может иметь одну трансляцию и сотни связанных сессий к различным ресурсам.
## 12.7. Тайм-ауты сессий и трансляций
Тайм-ауты для сессий и трансляций задаются **раздельно** в секции NAT Defaults конфигурации фильтра (подробнее — в [разделе 15.3](15.md)):
- **Тайм-аут сессии** — время с момента последнего пакета, после которого сессия удаляется;
- **Тайм-аут трансляции** — время с момента удаления последней связанной сессии, после которого удаляется сама трансляция.
Параметры тайм-аутов устанавливаются в секции NAT Defaults в качестве значений по умолчанию. При создании конкретного пула эти значения наследуются, но могут быть **переопределены** на уровне пула, если необходимо.
В выводе команды `show session` для каждой сессии отображаются:
- **Время последнего пакета** — когда был последний пакет в рамках данной сессии;
- **Оставшееся время жизни** — через сколько сессия будет удалена при отсутствии нового трафика.
## 12.8. Команды: `show session`, `show xl`, фильтрация по `local`/`remote`, pipe и count
### Основные команды
| Команда | Назначение |
| ---------------- | ----------------------------------- |
| `show session` | Просмотр таблицы сессий |
| `show xl` | Просмотр таблицы трансляций |
### Фильтрация по адресам
Обе команды поддерживают фильтрацию по ключевым словам:
| Ключевое слово | Фильтрация по | Пример |
| -------------- | ------------------------- | ----------------------------------------- |
| `local` | Локальный IP-адрес | `show session local 10.0.0.1` |
| `global` | Глобальный IP-адрес | В проекте ТСПУ не имеет смысла (= local) |
| `remote` | Удалённый IP-адрес | `show session remote 93.184.216.34` |
| `la` | Локальный IP + порт | `show session la 10.0.0.1:12345` |
| `ga` | Глобальный IP + порт | В проекте ТСПУ не имеет смысла (= la) |
| `ra` | Удалённый IP + порт | `show session ra 93.184.216.34:443` |
В контексте проекта ТСПУ (без NAT) наиболее полезны фильтры `local` и `remote`, поскольку `global` всегда дублирует `local`.
### Pipe-операторы
Результат вывода можно обработать через **pipe** (`|`), поддерживающий несколько операторов:
| Оператор | Назначение |
| ----------- | ------------------------------------------------- |
| `include` | Показать только строки, содержащие заданный паттерн |
| `exclude` | Исключить строки, содержащие заданный паттерн |
| `count` | Подсчитать количество строк в выводе |
| `more` | Постраничный вывод |
Pipe-операторы можно **комбинировать последовательно**. Пример:
```text
show session local 10.0.0.1 | include 6881 | count
```
Эта команда выведет количество сессий абонента `10.0.0.1`, в которых присутствует порт `6881` (характерный для BitTorrent).
### Удалённый доступ к сессиям
API для удалённого доступа к данным фильтра отсутствует. Однако можно получить информацию удалённо через **SSH-команду**:
```text
ssh admin@<IP-фильтра> "show session local 10.0.0.1"
```
Соединение с фильтром устанавливается, команда выполняется, результат возвращается на терминал. Дальнейшая обработка выполняется средствами операционной системы (bash-скрипты, grep и т.д.). Внутренние pipe-операторы фильтра при удалённом вызове через SSH могут **не работать** — в этом случае следует использовать внешние средства обработки вывода.
---
[← Оглавление](../README.md) · [← Раздел 11: Фильтр: аппаратная платформа](11.md) · [Раздел 13: Фильтр: первоначальная настройка и CLI →](13.md)

178
chapters/13.md Normal file
View File

@@ -0,0 +1,178 @@
# 13. Фильтр: первоначальная настройка и CLI
[← Оглавление](../README.md) · [← Раздел 12: Сессии и трансляции на фильтре](12.md)
---
## 13.1. Подключение: консоль (115200 8N1) и SSH (порт 22)
Доступ к фильтру осуществляется двумя способами:
| Способ | Параметры |
| -------------- | ------------------------------------------------ |
| **Консоль** | 115200 бод, 8 бит данных, без паритета, 1 стоп-бит (8N1), контроль потока выключен |
| **SSH** | Порт 22, стандартный доступ |
Расположение консольного порта на корпусе **отличается** в зависимости от модели и года выпуска — на каждом устройстве порт подписан. Настройки консоли стандартные и менять их необходимости нет.
## 13.2. Логин по умолчанию: admin / econat
При заводской прошивке на фильтре настроена учётная запись по умолчанию:
- **Логин:** `admin`
- **Пароль:** `econat`
Данного пользователя можно удалить и создать новых (подробнее о настройке пользователей — в [разделе 14.4](14.md)).
## 13.3. Операционный режим (>) и конфигурационный режим (#)
CLI фильтра имеет **два режима** работы:
| Режим | Приглашение | Назначение |
| ------------------------ | ----------- | --------------------------------------------------------- |
| **Операционный** | `>` | Просмотр информации: команды `show`, мониторинг |
| **Конфигурационный** | `#` | Изменение настроек, управление прошивками, перезагрузка |
Переход из операционного в конфигурационный режим выполняется командой **`config`**.
В операционном режиме доступны команды просмотра (`show session`, `show interface` и т.д.). В конфигурационном режиме доступны все команды изменения параметров, а также управление прошивками (`firmware`), перезагрузка устройства и другие административные операции.
## 13.4. Навигация по дереву конфигурации: system, pools, access-lists
Конфигурация фильтра организована в виде **дерева** с тремя основными разделами:
```text
/ (корень)
├── system ← все основные настройки устройства
│ ├── mng-if ← management-интерфейс
│ ├── serial ← консольный порт
│ ├── terminal ← SSH-настройки
│ ├── users ← пользователи
│ ├── nat-defaults← параметры сессий, тайм-аутов
│ ├── dpi ← настройки DPI
│ └── ...
├── pools ← пулы обработки трафика
└── access-lists ← списки контроля доступа (ACL)
```
При заводской прошивке в дефолтной конфигурации **отсутствуют** пулы и access-листы — их необходимо создавать вручную.
### 13.4.1. Переход в раздел, exit (..), root (/)
Навигация по дереву конфигурации выполняется следующим образом:
| Действие | Команда / клавиша | Пример |
| ------------------------------- | ----------------- | -------------------------- |
| Перейти в раздел | Имя раздела | `system` → переход в system |
| Перейти на уровень выше | `..` или `exit` | Из mng-if → обратно в system |
| Вернуться в корень конфигурации | `/` или `root` | Из любого уровня → в корень |
Пример навигации:
```text
# system ← перешли в system
# (system) mng-if ← перешли в management-интерфейс
# (mng-if) .. ← вернулись в system
# (system) serial ← перешли в serial
# (serial) / ← вернулись в корень
#
```
На практике наиболее удобны **`..`** (на уровень выше) и **`/`** (в корень).
### 13.4.2. Автодополнение (Tab), история команд (↑↓), справка (?)
CLI поддерживает стандартный набор средств навигации:
| Клавиша / команда | Действие |
| --------------------- | --------------------------------------------------------- |
| **Tab** | Автодополнение команды (если единственный вариант) |
| **↑ / ↓** | Переход по истории введённых команд |
| **?** | Показать все доступные команды на текущем уровне |
| **часть_команды + ?** | Показать команды, начинающиеся с введённого текста |
| **!** | Показать доступные ветки конфигурации на текущем уровне |
## 13.5. Применение конфигурации: `apply`, сохранение: `wr`
Изменения в конфигурации **не применяются немедленно**. Процесс состоит из двух шагов:
```text
Внесение изменений ──► apply ──► wr
│ │ │
│ │ └─ Сохранение в startup-config
│ │ (переживёт перезагрузку)
│ │
│ └─ Применение к running-config
│ (проверка синтаксиса, активация)
└─ Изменения только в буфере
(не активны, не сохранены)
```
| Команда | Действие |
| --------- | --------------------------------------------------------------------------- |
| **`apply`** | Проверяет синтаксическую корректность и применяет конфигурацию. Выдаёт сообщение об успехе или ошибке. Конфигурация становится активной, но **не сохраняется** при перезагрузке |
| **`wr`** | Сохраняет текущую конфигурацию в **startup-config**. После перезагрузки устройство загрузится с сохранённой конфигурацией |
Если после `apply` не выполнить `wr` и перезагрузить устройство — оно вернётся к предыдущей сохранённой конфигурации.
## 13.6. Управление конфигурациями: save, load, copy, clear config
На фильтре существуют несколько предопределённых конфигураций:
| Конфигурация | Описание |
| ------------------- | ----------------------------------------------------------- |
| **Startup config** | Конфигурация, с которой устройство загружается |
| **Effective config**| Текущая активная конфигурация (после последнего `apply`) |
| **Factory config** | Заводская конфигурация по умолчанию (неизменяемая) |
Команды управления:
| Команда | Действие |
| --------------------------- | ----------------------------------------------------------- |
| `save <имя>` | Сохранить текущую конфигурацию на диск под указанным именем |
| `load <имя>` | Загрузить ранее сохранённую конфигурацию |
| `load effective` | Загрузить текущую активную конфигурацию (полезно, если кто-то изменил конфиг параллельно) |
| `copy <URL>` | Скопировать конфигурацию на внешний сервер по URL |
| `clear config` | Сбросить текущую конфигурацию до заводской |
> **Осторожно с `clear config`:** после выполнения `apply` management-адрес сменится на заводской. Если вы подключены по SSH — **потеряете доступ** к устройству. Останется только возможность подключения через физическую консоль.
## 13.7. Одновременная работа двух пользователей: ограничения
Одновременная настройка фильтра двумя пользователями **не рекомендуется**. Механизма совместного редактирования конфигурации на текущий момент не реализовано.
Проблема: последний, кто выполнит команду `apply`, **полностью перезаписывает** конфигурацию. Все изменения, внесённые другим пользователем и ранее применённые, будут **затёрты**.
Если вы обнаружили, что на устройстве работает кто-то ещё и вносит изменения, можно периодически выполнять команду `load effective` — это загрузит в ваш буфер текущую активную конфигурацию (с изменениями, внесёнными коллегой).
## 13.8. «Мышеловка» (trap mode) при незакрытой скобке
В CLI фильтра существует режим многострочного ввода для списков значений (DNS-серверы, IP-адреса и т.д.). Этот режим активируется, когда вы открываете **скобку**, но **не закрываете** её перед нажатием Enter.
В результате вы попадаете в особый режим (неофициально называемый **«мышеловкой»**), в котором:
- невозможно выйти командой `exit` или `..`;
- невозможно перейти в корень конфигурации командой `/`;
- никакие стандартные команды навигации не работают.
Способ выхода: **поставить закрывающую скобку**. После этого введённые данные применятся, и CLI вернётся на предыдущий уровень конфигурации.
Это **не баг, а особенность** (feature) — режим предназначен для построчного ввода списков значений. Если вы попали в него случайно, просто введите закрывающую скобку `)`.
## 13.9. Ключевое слово `ls` для быстрого просмотра
При переходе в любую ветку конфигурации можно добавить ключевое слово **`ls`** в конце команды. Это приведёт к тому, что вы не просто перейдёте в указанный раздел, а сразу **увидите его содержимое** на экране.
```text
# system ls ← перейти в system и сразу показать всё содержимое
# system mng-if ls ← перейти в mng-if и сразу показать настройки
```
Это удобное сокращение, экономящее время при просмотре конфигурации — вместо двух действий (переход + просмотр) выполняется одно.
Аналогично, при вводе описаний (description) для интерфейсов и других сущностей значения вводятся **в кавычках**, если они содержат спецсимволы (например, дефис `-` может быть воспринят как оператор, а не как часть строки).
---
[← Оглавление](../README.md) · [← Раздел 12: Сессии и трансляции на фильтре](12.md) · [Раздел 14: Фильтр: конфигурация подсистем →](14.md)

232
chapters/14.md Normal file
View File

@@ -0,0 +1,232 @@
# 14. Фильтр: конфигурация подсистем
[← Оглавление](../README.md) · [← Раздел 13: Фильтр: первоначальная настройка и CLI](13.md)
---
## 14.1. Консольный порт: скорость, тайм-аут неактивности
В секции настройки консольного порта (`system / serial`) доступны два параметра:
| Параметр | Описание | Рекомендация |
| ---------------------- | ----------------------------------------------- | --------------------------- |
| **Скорость порта** | Скорость консольного соединения (по умолчанию 115200) | Не менять |
| **Тайм-аут неактивности** | Время до автоматического отключения неактивного пользователя | 530 минут (не `never`) |
По умолчанию тайм-аут неактивности составляет **5 минут**. Можно увеличить до 15 или 30 минут. Значение `never` **не рекомендуется** — при его установке пользователь не будет отключаться по тайм-ауту, что может привести к проблемам (аналогично проблеме SSH-сессий — см. [раздел 14.3.1](#1431-лимит-сессий-20-опасность-never-для-auto-logout)).
## 14.2. Management-интерфейс: IP, gateway, DNS, allowed IP
В секции management-интерфейса (`system / mng-if`) настраиваются параметры удалённого доступа к фильтру:
| Параметр | Описание |
| --------------- | ----------------------------------------------------------------- |
| **IP-адрес** | Адрес management-интерфейса в подсети управления |
| **Gateway** | Шлюз по умолчанию (обычно .254 — криптошлюз «Континент») |
| **Name servers**| Список DNS-серверов (можно указать несколько через пробел) |
| **Allowed IP** | Список адресов/подсетей, которым разрешён удалённый доступ |
> **Осторожно:** изменение IP-адреса или allowed IP с последующим `apply` может привести к **потере удалённого доступа** к устройству, если вы подключены по SSH. Единственным способом восстановления в таком случае будет подключение через физическую консоль.
### 14.2.1. Добавление/удаление записей: `+=` и `-=`
Для параметров, принимающих списки значений (DNS-серверы, allowed IP и др.), доступны операторы поэлементного изменения:
| Оператор | Действие | Пример |
| -------- | --------------------------------- | ----------------------------------- |
| `+=` | Добавить запись к существующему списку | `nameservers += 8.8.8.8` |
| `-=` | Удалить запись из списка | `nameservers -= 8.8.8.8` |
Альтернативный способ — задать весь список одной строчкой через пробел:
```text
nameservers 192.168.1.45 8.8.8.8 8.8.4.4
```
Также можно использовать режим многострочного ввода через скобки (см. [раздел 13.8 — «мышеловка»](13.md)).
## 14.3. Терминал (SSH): auto-logout, prompt, нумерация строк
В секции терминала (`system / terminal`) настраиваются параметры SSH-доступа:
| Параметр | Описание |
| --------------------- | ------------------------------------------------------ |
| **auto-logout** | Время автоматического отключения неактивной SSH-сессии |
| **prompt** | Текст приглашения командной строки |
| **Нумерация строк** | Отображение номера введённой команды (инкрементируется с каждым вводом) |
При вводе значения prompt необходимо использовать **кавычки**, если значение содержит спецсимволы (дефис `-` и др.).
### 14.3.1. Лимит сессий (20), опасность `never` для auto-logout
Значение `never` для auto-logout **категорически не рекомендуется**. Причина:
1. При нестабильном соединении SSH-сессии **обрываются**, но не закрываются на стороне фильтра;
2. «Мёртвые» сессии **накапливаются**, не удаляясь по тайм-ауту;
3. При достижении лимита в **20 сессий** вы **не сможете** подключиться к устройству по SSH;
4. Единственный способ восстановления — подключение через физическую консоль.
Рекомендуется оставлять auto-logout со значением по умолчанию или устанавливать разумный тайм-аут.
## 14.4. Пользователи: создание, удаление, уровни доступа, пароли (secret 0 / 15)
Управление пользователями осуществляется в секции `system / users`:
| Команда | Действие |
| ------------------------------------------ | --------------------------- |
| `create user <имя> level <N> secret 0 <пароль>` | Создать пользователя (пароль в открытом виде) |
| `create user <имя> level <N> secret 15 <хэш>` | Создать пользователя (пароль в виде хэша) |
| `no user <имя>` | Удалить пользователя |
Параметры пароля:
| Формат | Описание |
| ------------ | ----------------------------------------------------- |
| **secret 0** | Пароль задаётся в открытом виде (plain text) |
| **secret 15**| Ожидается хэш пароля |
В конфигурации пароли **хранятся в хэшированном виде** — при просмотре конфигурации открытые пароли не отображаются.
Пользователь по умолчанию (`admin` / `econat`) может быть удалён. Рекомендуется создать новых пользователей и удалить дефолтного.
## 14.5. TACACS+: авторизация, fallback на локальную базу
Фильтр поддерживает внешнюю авторизацию через **TACACS+**. Через TACACS+ работает только **авторизация** (и, возможно, аккаунтинг).
Ключевые параметры:
| Параметр | Описание | Важность |
| --------------------- | -------------------------------------------------------------- | -------- |
| **Fallback (fb on)** | При недоступности TACACS+ авторизовать через локальную базу | **Критично** |
| **Service type** | Тип сервиса (shell) — должен совпадать с настройкой на TACACS-сервере | Важно |
| **Protocol** | Протокол — должен совпадать с настройкой на TACACS-сервере | Важно |
| **Серверы** | IP-адрес/доменное имя + secret для каждого сервера TACACS+ | — |
> **Важно:** параметр **`fb on`** (fallback) должен быть **включён**. Если он выключен и пользователь отсутствует на TACACS-сервере (или сервер недоступен), авторизация через CLI будет **невозможна**.
## 14.6. NTP: до 3 серверов, период обновления
В секции NTP (`system / ntp`) настраивается синхронизация времени:
- Можно указать до **3 NTP-серверов**;
- Настраивается **период обновления** времени.
Для проверки статуса синхронизации используется команда `show ntp`. Вывод команды может быть не вполне интуитивным — значение `0x24` в статусе указывает на успешную синхронизацию.
> **Примечание:** в будущих прошивках логика работы со временем планируется к изменению. Вместо задания временного сдвига в отдельных подсистемах будет единая настройка временной зоны для всего устройства, а в подсистемах — выбор между UTC и локальным временем.
## 14.7. SNMP: community (read-only), traps, allow-ip
Настройки SNMP (`system / snmp`) стандартны:
| Параметр | Описание |
| --------------- | ----------------------------------------------------------- |
| **Community** | Строка community, работает **только на чтение** (read-only). Задавать параметры через SNMP нельзя |
| **Traps** | Включение/выключение отправки SNMP-трапов |
| **Allow IP** | Список адресов/подсетей, которым разрешён SNMP-доступ (по умолчанию — отовсюду) |
| **Description** | Описание устройства |
| **Hostname** | Имя устройства |
| **Contact** | Контактная информация |
## 14.8. Системное журналирование (syslog)
Системное журналирование настраивается в секции `system / syslog` и позволяет отправлять события с фильтра на внешние серверы (СПХД).
### 14.8.1. Внешние лог-серверы (до 2), hostname, time shift
| Параметр | Описание |
| ----------------- | ------------------------------------------------------------ |
| **Enable/disable**| Включение/выключение системного логирования |
| **Серверы** | До **2 внешних серверов** (IP-адрес + порт) |
| **Hostname** | Имя устройства, которое будет отображаться в syslog-сообщениях на внешнем сервере |
| **Time shift** | Временной сдвиг относительно UTC (в минутах) для логов |
В рамках **пилотного проекта** (Урал) системные логи на внешний сервер не сохранялись. В **федеральном проекте** они должны сохраняться на **СПХД** (серверы предварительного хранения данных), обеспечивая ретроспективный анализ событий на всех устройствах площадки — это крайне полезная возможность, которой часто не хватало на пилоте.
> **Примечание:** в будущих прошивках параметр time shift планируется заменить на выбор между UTC и локальным временем, а временная зона будет настраиваться единообразно для всего устройства.
### 14.8.2. Уровни логирования по подсистемам (1=ошибки, 2=предупреждения, 3=информация)
Для каждой подсистемы фильтра можно индивидуально настроить **уровень подробности** журналирования:
| Уровень | Название | Содержимое | Рекомендация |
| ------- | -------------- | --------------------------------------------------- | ------------------------- |
| **1** | Ошибки | Ошибки и критически важные сообщения | По умолчанию, достаточно для большинства случаев |
| **2** | Предупреждения | Предупреждения + всё из уровня 1 | Включать при траблшутинге |
| **3** | Информация | Информационные сообщения + всё из уровней 12 | Только при диагностике |
По умолчанию для всех подсистем установлен **уровень 1**. Повышать уровень (2 или 3) рекомендуется **только на время диагностики**, поскольку:
- объём логов при уровне 23 **очень большой**;
- внутренние логи на устройстве **забиваются быстро**;
- разбираться в детальных логах **сложно**.
Не все подсистемы, указанные в конфигурации, реально существуют в прошивке проекта ТСПУ (например, BRAS отсутствует) — для несуществующих подсистем настройка не имеет эффекта.
### 14.8.3. Подсистема `all` — максимальный уровень для всех
Условная подсистема **`all`** позволяет быстро установить уровень логирования для **всех** подсистем одновременно:
```text
verbose all 3 ← установить максимальный уровень для всех подсистем
```
Правило выбора уровня: для каждой подсистемы выбирается **наибольший** из двух значений — установленного для `all` и установленного индивидуально. Например, если `all = 2` и для конкретной подсистемы задано `3`, будет использоваться `3`.
### 14.8.4. Логирование команд пользователя (уровень fatal)
Все команды, введённые пользователем, логируются с уровнем **fatal**. Это не означает, что происходит что-то критическое — уровень fatal выбран специально, чтобы команды пользователя **всегда записывались** в логи, независимо от текущих настроек подробности.
Это полезно для ретроспективного анализа: можно посмотреть, кто, когда и что настраивал на устройстве.
### 14.8.5. SNMP traps: только уровень fatal
В SNMP отправляются трапы **только уровня fatal**. События уровней 13 (ошибки, предупреждения, информация) в SNMP-трапы **не попадают**.
## 14.9. Журналирование соединений (connection log) — через лог-интерфейс (DPDK)
Журналирование соединений (connection log, в терминологии фильтра — «NAT translation log») позволяет логировать каждую создаваемую на устройстве сессию: какой абонент, на какой ресурс, по какому порту обращался.
Ключевые особенности:
- Логи отправляются на внешний сервер в специальном формате;
- В отличие от syslog, connection log по умолчанию отправляется через **лог-интерфейс** (DPDK), а не через management-интерфейс;
- Лог-интерфейс **не имеет IP-адреса** в традиционном смысле — адрес генерируется программно. Пропинговать лог-интерфейс извне **невозможно**: на нём нет сущности, обрабатывающей входящие пакеты. Это сделано для **повышения производительности** — интерфейс отдан под управление DPDK;
- Формат логирования настраивается в соответствующей секции конфигурации.
> **Примечание:** в проекте ТСПУ журналирование соединений в текущей конфигурации может не использоваться.
## 14.10. Журналирование протоколов (debug logger) — отправка на SPFS
Секция **debug logger** (несмотря на название «debug», это штатная функциональность) отвечает за отправку **протокольных логов** — результатов распознавания протоколов движком DPI — на серверы **SPFS** для дальнейшего формирования очищенных списков блокировки (подробнее о полном цикле — в [разделе 8](08.md)).
### 14.10.1. Выбор протоколов (all / конкретные)
| Параметр | Описание |
| ----------------- | ----------------------------------------------------------- |
| **Enable** | Включение секции debug logger |
| **Protocols** | Список протоколов для логирования: `all` (все) или конкретные (Telegram, WhatsApp и др.) |
| **Server + port** | Адрес и порт SPFS-сервера |
| **Gateway** | Шлюз по умолчанию для отправки |
| **Source port** | Порт источника, с которого отправляются логи |
| **Log interface** | Интерфейс для отправки: `log` (по умолчанию) или `management` |
По умолчанию протоколы установлены в **`all`** — логируются все распознаваемые протоколы. Можно указать только конкретные протоколы, если требуется сузить объём логирования.
Лог-интерфейс для отправки по умолчанию — **log** (DPDK). Переключение на management **не рекомендуется**, так как производительность отправки значительно снизится.
### 14.10.2. Количество пакетов на протокол (по умолчанию 30, рекомендуется 3)
Параметр **количества пакетов** определяет, сколько пакетов из каждой распознанной сессии отправляется в лог:
| Значение | Описание | Рекомендация |
| ------------- | ------------------------------------------------- | ------------------- |
| **0** | Без ограничения (отправляются первые 30 пакетов) | По умолчанию |
| **3** | Отправляются первые 3 пакета | **Рекомендуется** |
| **30** | Максимальное количество | Избыточно |
Значение **30** (фактически — значение по умолчанию при параметре 0) генерирует **избыточный объём** лог-трафика. По результатам тестирования на Урале, для корректного распознавания достаточно **3 пакетов** — это значение рекомендуется для production-эксплуатации.
---
[← Оглавление](../README.md) · [← Раздел 13: Фильтр: первоначальная настройка и CLI](13.md) · [Раздел 15: Фильтр: настройка интерфейсов и общих параметров →](15.md)

123
chapters/15.md Normal file
View File

@@ -0,0 +1,123 @@
# 15. Фильтр: настройка интерфейсов и общих параметров
[← Оглавление](../README.md) · [← Раздел 14: Фильтр: конфигурация подсистем](14.md)
---
## 15.1. Интерфейсы: enable/disable, description (LACP не используется)
Фильтр обрабатывает трафик на **уровне L2** — для внешнего наблюдателя устройство представляет собой «прозрачный провод». На пути прохождения трафика **нет L3-интерфейсов**. Если посмотреть на интерфейсы в операционной системе Linux (на которой основано устройство), виден **только management-интерфейс** — все остальные интерфейсы отданы под управление **DPDK** и обрабатываются специализированным программным обеспечением.
Настройки интерфейсов для пропуска трафика **минимальны**:
| Действие | Команда |
| ------------------ | ------------------------------ |
| Включить интерфейс | `enable` |
| Выключить интерфейс| `disable` |
| Задать описание | `description "текст"` |
Лог-интерфейсы **жёстко привязаны** к конкретным физическим портам и не могут быть переназначены.
В конфигурации могут присутствовать настройки протокола **LACP** — в проекте ТСПУ он **не используется**. Эти параметры существуют по умолчанию, их не нужно изменять или удалять.
## 15.2. NAT Defaults — общие параметры устройства
Секция `nat-defaults` содержит общие параметры, влияющие на работу всего устройства. Название секции — наследие от CGNAT-платформы, однако параметры применяются ко всему функционалу фильтра, включая DPI.
### 15.2.1. VLAN Mode: untag / vlan / QinQ — глубина поиска IP-заголовка (всегда QinQ)
Параметр **VLAN Mode** определяет, насколько глубоко фильтр ищет IP-заголовок внутри Ethernet-фрейма:
| Значение | Поведение | Применение в ТСПУ |
| ------------ | ----------------------------------------------------------------- | ------------------ |
| **untag** | IP-заголовок ищется только в нетегированных фреймах. Пакеты с VLAN-тегами пропускаются прозрачно | Нет |
| **vlan** | IP-заголовок ищется в пакетах без тегов и с одним VLAN-тегом | Нет |
| **QinQ** | IP-заголовок ищется при любом количестве VLAN-тегов: 0, 1 или 2 | **Всегда** |
В проекте ТСПУ параметр **всегда должен быть установлен в `QinQ`**. При любом другом значении часть трафика (с VLAN-тегами) будет **прозрачно пропускаться** без обработки, что недопустимо.
### 15.2.2. Sessions per Translation (по умолчанию 4096)
Параметр задаёт **максимальное количество сессий** в рамках одной трансляции. Значение по умолчанию — **4096**. В проекте ТСПУ менять его не требуется — этого значения достаточно для всех сценариев.
### 15.2.3. Forward Traffic: всегда ON
Параметр **Forward Traffic** управляет пересылкой трафика через устройство:
| Значение | Поведение |
| -------- | ------------------------------------------------------------ |
| **on** | Трафик проходит через фильтр и отправляется дальше |
| **off** | Трафик принимается, но не отправляется (режим зеркала) |
В проекте ТСПУ параметр **всегда должен быть `on`** (значение по умолчанию). Режим `off` используется только при работе с зеркалированным трафиком, что в данном проекте не применяется.
### 15.2.4. L2 MTU: максимум 9216 (по RFC)
Параметр **L2 MTU** определяет максимальный размер кадра на уровне L2. По умолчанию установлено значение **1522**.
В проекте ТСПУ рекомендуется устанавливать **максимально возможное значение — 9216** (максимум по RFC). Это позволяет полностью исключить проблемы с MTU:
```text
nat-defaults
l2-mtu 9216
```
На балансировщиках MTU на интерфейсах также выставляется в районе **9000**, что позволяет закрыть проблему MTU на всей цепочке оборудования ТСПУ.
### 15.2.5. LLDP: выключен (требование операторов — прозрачность)
Протокол **LLDP** (Link Layer Discovery Protocol) на фильтрах **должен быть выключен**. Это сделано по требованию операторов связи, которые не хотят видеть оборудование ТСПУ в своей сети.
Принцип прозрачности: оператор ожидает, что ТСПУ — это «невидимый провод». Если LLDP включён, устройство начинает анонсировать себя в сети оператора, что нарушает эту прозрачность. Например, МТС потребовал отключить LLDP, поскольку устройства ТСПУ появлялись на их схемах сети.
### 15.2.6. Permit Invalid Flow: всегда ON — приём TCP-сессий без SYN
Параметр **Permit Invalid Flow** — один из **наиболее критичных** параметров конфигурации. Он **всегда должен быть включён** в проекте ТСПУ.
**Что он делает:**
| Значение | Поведение |
| -------- | --------------------------------------------------------------- |
| **off** | TCP-сессия заводится **только** по TCP SYN-пакету. Пакеты без SYN-флага дропаются |
| **on** | TCP-сессия заводится по **любому** TCP-пакету, включая пакеты без SYN |
**Почему `off` опасен в контексте ТСПУ:**
1. **Переключение режимов.** При переключении ТСПУ из режима байпаса обратно в рабочий режим (inline) на фильтры мгновенно поступает большой объём трафика — уже установленных TCP-сессий. SYN-пакеты для этих сессий давно прошли. Если `permit invalid flow` выключен, фильтр **дропнет** весь этот трафик. Для абонентов это означает, что **все их TCP-сессии** отвалятся по тайм-ауту и потребуют переустановки;
2. **Асимметричный трафик.** Если исходящий трафик уходит через один фильтр, а входящий приходит через другой — на одном из фильтров сессия не будет установлена (нет SYN-флага), и трафик будет дропаться.
С этой проблемой сталкивались **неоднократно** на практике.
## 15.3. Тайм-ауты сессий и трансляций
В секции `nat-defaults` также настраиваются **тайм-ауты** для сессий и трансляций (подробнее о сессиях и трансляциях — в [разделе 12](12.md)):
- Тайм-ауты для **трансляций** и **сессий** задаются **раздельно**;
- Параметры различаются по типу протокола (TCP, UDP, ICMP);
- Значения в `nat-defaults` являются **значениями по умолчанию**, которые наследуются каждым создаваемым пулом;
- При необходимости тайм-ауты могут быть **переопределены** на уровне конкретного пула.
В секции также присутствует параметр **limiter** — ограничения на количество выделяемых портов для одного пользователя. Этот параметр актуален **только для NAT** и в проекте ТСПУ **не используется**.
## 15.4. IPv6: включение, диапазон адресов для обработки
Поддержка IPv6 была добавлена в прошивку позднее основного функционала. Настройка расположена в отдельном разделе:
| Параметр | Описание |
| --------------------- | ------------------------------------------------------------ |
| **Enable/disable** | Включение или выключение обработки IPv6-трафика |
| **Тайм-ауты** | Отдельные тайм-ауты для IPv6-сессий (по умолчанию можно не менять) |
| **Диапазон адресов** | Список IPv6-адресов и VLAN, которые будут обрабатываться |
В проекте ТСПУ IPv6 должен быть **включён**. По умолчанию в диапазон обработки включены **все IPv6-адреса во всех VLAN** — менять это значение, как правило, не требуется.
При необходимости можно:
- **Включить** в обработку только конкретные диапазоны IPv6-адресов;
- **Исключить** определённые диапазоны из обработки;
- Полностью **отключить** обработку IPv6-трафика (тогда DPI-фильтрация по IPv6 выполняться не будет, трафик пройдёт прозрачно).
---
[← Оглавление](../README.md) · [← Раздел 14: Фильтр: конфигурация подсистем](14.md) · [Раздел 16: Фильтр: ACL и пулы →](16.md)

198
chapters/16.md Normal file
View File

@@ -0,0 +1,198 @@
# 16. Фильтр: ACL и пулы — запуск трафика на обработку
[← Оглавление](../README.md) · [← Раздел 15: Фильтр: настройка интерфейсов и общих параметров](15.md)
---
Чтобы фильтр начал обрабатывать трафик, необходимо выполнить два действия: **создать пул** и **привязать к нему ACL**. Без этих настроек — какие бы DPI-листы ни были сконфигурированы — весь трафик будет прозрачно пропускаться через устройство без какой-либо обработки.
Это одна из ключевых стадий в пути прохождения пакета через фильтр (подробнее — в [разделе 5.1](05.md)): IP-пакет должен попасть в ACL и в пул, чтобы далее передаваться на обработку движком DPI.
> **Важно:** при заводской (дефолтной) конфигурации фильтра пулы и ACL **отсутствуют**. Их необходимо создать вручную при первоначальной настройке.
## 16.1. Создание ACL: `create acl`, правила (allow/deny), протоколы, source/destination, VLAN
ACL (Access Control List) — это набор правил, определяющих, какой трафик подлежит обработке. Изначально на фильтре нет ни одного ACL — его нужно создать.
### Создание и переход в ACL
| Действие | Команда | Пример |
| ---------------------- | ------------------------------ | ------------------------- |
| Создать ACL | `create acl <имя>` | `create acl aclfake` |
| Перейти в ACL | `go to acl<имя>` | `go to aclaclfake` |
| Удалить ACL | `no acl <имя>` | `no acl aclfake` |
> **Обратите внимание:** команда перехода `go to acl<имя>` пишется **слитно** — `aclaclfake`, а не `acl aclfake`. Здесь `acl` — это часть пути, а `aclfake` — название списка.
### Создание правил
Внутри ACL создаются правила, каждое из которых определяет, какой трафик разрешить (`allow`) или запретить (`deny`) для обработки:
```text
<номер> allow|deny <протокол> <source> <destination> [vlan <N>|<N-M>]
```
Структура правила:
| Элемент | Описание | Примеры |
| ---------------- | ---------------------------------------------------------------- | ------------------------------ |
| **Номер** | Порядковый номер правила (рекомендуется с зазором: 10, 20, 30) | `10`, `20`, `30` |
| **Действие** | `allow` (или `permit`) / `deny` — разрешить или запретить | `allow`, `deny` |
| **Протокол** | IP, TCP, UDP, ICMP и др. | `ip`, `tcp`, `udp` |
| **Source** | Источник: хост, подсеть или `any` (любой) | `any`, `10.0.0.0/8`, `host 1.2.3.4` |
| **Destination** | Назначение: хост, подсеть или `any` | `any`, `192.168.0.0/16` |
| **VLAN** | Номер или диапазон VLAN (необязательно) | `vlan 100`, `vlan 100-200` |
Ключевые слова `allow` и `permit`**синонимы**, можно использовать любое из них.
### Поведение VLAN по умолчанию
Если номер VLAN **не указан**, правило автоматически применяется ко **всем VLAN** (04095). Это поведение по умолчанию подходит для большинства сценариев в проекте ТСПУ.
При необходимости можно указать:
- конкретный VLAN: `vlan 100`
- диапазон VLAN: `vlan 100-200`
### Управление правилами
| Действие | Команда |
| --------------------- | ------------------------ |
| Удалить правило | `no <номер>` |
| Просмотреть ACL | `ls` (в контексте ACL) |
Номера правил рекомендуется задавать **с зазором** (10, 20, 30...) — это позволяет вставлять новые правила между существующими без перенумерации.
### Типовой ACL для проекта ТСПУ
В проекте ТСПУ, как правило, используется простейший ACL, пропускающий весь IP-трафик на обработку:
```text
create acl aclfake
go to aclaclfake
10 allow ip any any
apply
```
Правила обрабатываются **по порядку номеров** — первое совпавшее правило определяет судьбу пакета. Это аналогично работе ACL на маршрутизаторах: если пакет совпал с правилом `allow`, он направляется в пул; если с правилом `deny` — прозрачно пропускается мимо пула.
## 16.2. Создание пула: `create pool`, тип = fake (без NAT)
Пул — логическая сущность, в которую попадает трафик, отобранный ACL, для дальнейшей обработки. В проекте ТСПУ тип пула **всегда** должен быть **fake**.
### Создание пула
```text
create pool poolfake
go to poolpoolfake
```
### Тип пула: fake
| Тип пула | Описание | Применение в ТСПУ |
| ---------- | ----------------------------------------------------------- | ------------------ |
| **fake** | «Фейковый» пул — трансляция адресов не выполняется: что пришло, то и ушло | **Всегда** |
| Другие типы | Реальная трансляция адресов (NAT) | Не используется |
Тип `fake` означает, что фильтр **не изменяет** IP-адреса в проходящих пакетах. Это наследие CGNAT-платформы: механизм пулов изначально создавался для трансляции адресов, но в проекте ТСПУ трансляция не нужна. Тем не менее пул **должен быть создан** — без него трафик не попадёт на обработку DPI.
### Минимальные настройки пула
| Параметр | Значение | Описание |
| ----------- | ------------- | --------------------------------------- |
| **type** | `fake` | Тип пула — без трансляции адресов |
| **enable** | Включён | Пул должен быть активен |
| **acl** | `<имя ACL>` | Привязка ACL к пулу |
Этих трёх настроек **достаточно** для запуска трафика на обработку.
## 16.3. Привязка ACL к пулу
Привязка ACL к пулу выполняется командой `acl` внутри контекста пула:
```text
go to poolpoolfake
acl aclfake
type fake
enable
apply
```
Именно привязка ACL к пулу определяет, **какой именно трафик** будет попадать на обработку DPI. Без привязанного ACL пул не будет отбирать трафик, и обработка не начнётся.
Полная последовательность создания минимальной рабочей конфигурации:
```text
# 1. Создаём ACL
create acl aclfake
go to aclaclfake
10 allow ip any any
exit
# 2. Создаём пул и привязываем ACL
create pool poolfake
go to poolpoolfake
type fake
acl aclfake
enable
exit
# 3. Применяем и сохраняем
apply
wr
```
## 16.4. Приоритет пулов
При наличии нескольких пулов на фильтре трафик может совпасть с ACL **разных пулов**. В этом случае пакет попадёт в пул с **наивысшим приоритетом**.
| Параметр | Описание |
| ------------- | ----------------------------------------------------------- |
| **priority** | Числовое значение приоритета пула (чем выше — тем приоритетнее) |
На практике в проекте ТСПУ обычно используется **один пул**, поэтому настройка приоритета, как правило, не требуется. Однако при необходимости разделения трафика на разные пулы (например, для разных DPI-листов или разных политик обработки) приоритеты позволяют контролировать порядок отбора.
## 16.5. Connection logging в пуле
Параметр **connection log** в пуле управляет журналированием соединений (NAT translation log) — записью информации о каждой создаваемой сессии: какой абонент, на какой ресурс, по какому порту обращался.
| Значение | Описание |
| -------- | ------------------------------------------------------- |
| **on** | Журналирование соединений для данного пула включено |
| **off** | Журналирование отключено |
По умолчанию connection logging **включён**. В проекте ТСПУ этот параметр может быть как задействован, так и не использоваться — зависит от конкретной площадки и требований DevOps-команды.
Помимо connection log, в пуле присутствуют:
- **Тайм-ауты** — наследуются из секции `nat-defaults` при создании пула (подробнее — в [разделе 15.3](15.md)). При необходимости могут быть переопределены на уровне пула;
- **Ограничения на пользователей (limiter)** — актуальны только для NAT, в проекте ТСПУ **не используются**;
- **Параметр PIN** — по умолчанию включён, актуален для режима с трансляцией адресов. В проекте ТСПУ менять не требуется.
## 16.6. IPv6 в пуле
Поддержка IPv6 в пуле настраивается аналогично глобальным настройкам IPv6 (подробнее — в [разделе 15.4](15.md)):
| Параметр | Описание |
| --------------------- | ------------------------------------------------------------ |
| **Enable/disable** | Включение или выключение обработки IPv6-трафика в данном пуле |
| **Тайм-ауты** | Отдельные тайм-ауты для IPv6-сессий (можно не менять) |
| **Диапазон адресов** | Список IPv6-адресов и VLAN для обработки |
В проекте ТСПУ IPv6 в пуле должен быть **включён**. По умолчанию в диапазон обработки включены **все IPv6-адреса во всех VLAN** — менять это значение, как правило, не требуется.
При необходимости можно:
- включить в обработку только конкретные диапазоны IPv6-адресов;
- исключить определённые диапазоны из обработки;
- полностью отключить обработку IPv6-трафика в рамках данного пула.
---
### Диагностическая заметка: `show cps` показывает ноль
Если команда `show cps` показывает нулевое количество создаваемых сессий, одна из возможных причин — трафик **не попадает в пул**. Это может означать, что ACL не отбирает трафик: через фильтр могут идти гигабиты и десятки гигабит, но если пакеты не совпадают с правилами ACL привязанного пула, сессии создаваться не будут (подробнее — в [разделе 18.9](18.md)).
---
[← Оглавление](../README.md) · [← Раздел 15: Фильтр: настройка интерфейсов и общих параметров](15.md) · [Раздел 17: Фильтр: настройка DPI →](17.md)

310
chapters/17.md Normal file
View File

@@ -0,0 +1,310 @@
# 17. Фильтр: настройка DPI
[← Оглавление](../README.md) · [← Раздел 16: Фильтр: ACL и пулы](16.md)
---
Модуль DPI (Deep Packet Inspection) — ключевая подсистема фильтра, отвечающая за анализ и фильтрацию трафика. Настройки DPI включают общие параметры модуля, конфигурацию работы с реестром Роскомнадзора, параметры деградации протоколов и индивидуальные настройки DPI-листов.
> **Примечание:** формат секции DPI различается между пилотным проектом (Урал) и федеральным проектом. В пилотном проекте настройки реестра Роскомнадзора находятся внутри DPI-листа 0. В федеральном проекте они вынесены в отдельную секцию, а все DPI-листы (015) стали абсолютно идентичными по структуре.
## 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. Шкала 0100: 0 = полная блокировка, 100 = полный пропуск
Для каждого протокола задаётся значение **capacity** в условных единицах от 0 до 100:
| Значение | Поведение |
| -------- | ------------------------------------------------- |
| **0** | Полная блокировка — ничего не пропускается |
| **100** | Полное пропускание — трафик не затрагивается |
| **199** | Деградация — дроп пакетов с заданной вероятностью |
### 17.3.2. Дроп пакетов с заданной вероятностью
Механизм деградации работает просто: с определённой вероятностью, зависящей от параметра capacity, фильтр **дропает пакеты** в рамках сессии распознанного протокола. Чем ниже значение capacity, тем больше пакетов отбрасывается.
### 17.3.3. Эффективная деградация: 210% пропускания
На практике деградация становится **заметной для пользователя** только при значениях capacity в диапазоне **210**. Это объясняется свойствами TCP:
- TCP обладает встроенным механизмом **повторной передачи** потерянных пакетов;
- При низкой степени деградации (высоких значениях capacity) TCP успешно компенсирует потери, и пользователь практически ничего не замечает;
- Только при высокой степени деградации (capacity ~210) потери становятся настолько значительными, что TCP не успевает их компенсировать.
При значении capacity около **5** задержка отправки сообщений в приложениях может достигать **десятков секунд**.
### 17.3.4. Влияние на голосовые вызовы и мессенджеры
Деградация протоколов особенно эффективна для **голосовых вызовов** и **видеозвонков**, где потеря пакетов непосредственно влияет на качество:
- **Заикание** голоса и пропадание звука;
- **Рассинхронизация** аудио и видео;
- **Невозможность разговаривать** при высокой степени деградации;
- Для текстовых сообщений — значительные **задержки доставки**.
Деградация является альтернативой полной блокировке: вместо немедленного и очевидного отключения сервиса пользователь получает **постепенное ухудшение** качества связи.
## 17.4. Настройка DPI-листов (016)
На фильтре может быть настроено до **16 DPI-листов** (номера 015). В будущих прошивках это количество может быть расширено — планируется возможность генерации 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)

326
chapters/18.md Normal file
View File

@@ -0,0 +1,326 @@
# 18. Фильтр: мониторинг и диагностика
[← Оглавление](../README.md) · [← Раздел 17: Фильтр: настройка DPI](17.md)
---
Фильтр предоставляет обширный набор команд мониторинга и диагностики, позволяющих оценить состояние аппаратной части, загрузку ресурсов, статистику обработки трафика и работу модуля DPI. Все команды мониторинга выполняются в **операционном режиме** (приглашение `>`), за исключением ping и traceroute, которые доступны из **конфигурационного режима**.
## 18.1. `show version` — версия ПО, серийный номер (= MAC management)
Команда `show version` отображает информацию о текущей версии программного обеспечения фильтра:
| Параметр | Описание |
| --------------------- | ----------------------------------------------------------- |
| **Версия ПО** | Основной номер версии (например, `3.14.040 BP`) |
| **Серийный номер** | Серийный номер платформы — необходим при обращении в техподдержку |
Команда `show version detail` дополнительно выводит хэши сборки, указывающие на конкретный коммит в сборочной системе (полезно для разработчиков).
> **Важно:** серийный номер платформы **совпадает** с MAC-адресом management-интерфейса. Это можно проверить через команду `show ip if`.
## 18.2. `show ip if` — параметры management-интерфейса
Команда отображает параметры management-интерфейса:
- **MAC-адрес** (совпадает с серийным номером);
- **IP-адрес**;
- **Маска подсети**;
- **Default gateway**.
## 18.3. `show time` — текущее время (UTC / local)
Команда выводит текущее время в двух форматах:
- **UTC** — всемирное координированное время;
- **Local** — локальное время (с учётом настроенного сдвига).
Оба значения отображаются всегда, даже если они совпадают.
## 18.4. `show uptime` — время работы платформы и процесса EcoNAT
Команда показывает **два значения** времени работы:
| Параметр | Описание |
| ----------------------- | --------------------------------------------------------- |
| **Uptime платформы** | Время с момента включения/перезагрузки аппаратной платформы |
| **Uptime EcoNAT** | Время с момента запуска процесса обработки трафика |
Эти два значения могут отличаться на **небольшую величину** (обычно до 1 минуты): сначала стартует платформа, затем — процесс EcoNAT, который инициализирует интерфейсы и начинает обработку трафика.
> **Примечание:** после старта EcoNAT обновляет время по NTP. В некоторых случаях это приводит к тому, что в выводе `show uptime` отображаются **некорректные значения**. Например, если в BIOS было установлено неверное время, после синхронизации по NTP вывод uptime может показывать аномальные цифры. Это нормальная ситуация — значения восстановятся после следующей перезагрузки. Тем не менее, подобные аномалии следует исследовать.
## 18.5. Аппаратная часть: `show power`, `show fan`, `show temperature`
### show power
Отображает состояние **источников питания**: `OK` или `FAIL`. В будущих версиях прошивки планируется более подробный вывод — напряжение на входе, мощность блоков питания, внутренние параметры (вольты, ватты, амперы).
### show fan
Отображает **скорость вращения вентиляторов**:
- **Системные вентиляторы** — обычно 4 штуки, каждый с двумя датчиками;
- **Вентиляторы на сетевых картах** — отдельные показания.
### show temperature
Отображает **температуру ядер процессора** (не крышки и не внешнего сенсора):
| Диапазон | Оценка |
| ------------- | --------------------------------------------------------- |
| **4050 °C** | Нормальные значения |
| **~70 °C** | Платформа начинает перегреваться — необходимо проверить условия охлаждения на площадке |
При обнаружении повышенной температуры следует запросить у оператора информацию о состоянии окружающей среды на площадке (кондиционирование, вентиляция).
## 18.6. Интерфейсы: `show interface brief`, traffic monitor, трансиверы (DDM)
### show interface brief
Выводит **краткую информацию** по всем интерфейсам:
| Поле | Описание |
| --------------- | ----------------------------------------------- |
| **Состояние** | Up / Down |
| **MTU** | Текущее значение MTU на интерфейсе |
| **MAC** | MAC-адрес интерфейса |
| **Скорость** | Скорость линка |
| **Loading** | Условная загрузка интерфейса в процентах |
| **Description** | Описание интерфейса (если задано) |
### Traffic monitor
Команда `show interface <имя|all> traffic monitor` выводит **ежесекундно обновляемую таблицу** с текущей нагрузкой на интерфейсы:
- Количество **байт** — принятых и переданных за последнюю секунду;
- Количество **пакетов** — на вход и на выход;
- **Ошибки** — всегда должны быть нулевыми.
Для выхода из режима мониторинга — `Ctrl+C`.
Команда `show interface all traffic` (без слова `monitor`) показывает **суммарные счётчики** в байтах и пакетах с момента последней очистки или перезагрузки.
### Трансиверы (DDM)
Фильтр позволяет просмотреть информацию о подключённых **трансиверах** и уровни оптических сигналов (**DDM** — Digital Diagnostic Monitoring):
- Информация доступна для **оптических модулей**;
- Для **медных модулей** и **direct-attach кабелей** DDM не поддерживается;
- Поддерживаются трансиверы **любых производителей**, совместимых с чипами Intel на сетевых картах фильтра. Программных ограничений на вендора нет, однако совместимость может быть ограничена самим чипом Intel.
## 18.7. Ресурсы: `show resources`
Команда `show resources`**основная команда** для оценки загрузки фильтра. Выводит загрузку процессора, ресурсных таблиц и DPI.
### 18.7.1. Таблицы сессий/трансляций: не более 20% загрузки
Загрузка ресурсных таблиц (сессий, трансляций, IPv6-сессий) отображается в **процентах** от максимального объёма. Критический порог — **20%**.
| Загрузка | Оценка |
| ------------ | ----------------------------------------------------------- |
| **< 20%** | Нормальная работа |
| **> 20%** | Превышена оптимальная загрузка — поиск по таблице замедляется |
Превышение порога в 20% приводит к **существенному росту задержек** при обработке трафика. Это связано с внутренней архитектурой хэш-таблиц: при высокой заполненности поиск по ним становится значительно дольше, и часть трафика может не успевать обрабатываться.
**Что делать при превышении 20%:**
- Обратиться в техподдержку;
- Вероятная причина — на фильтр попало **больше трафика**, чем планировалось (таблицы рассчитаны на определённую полосу пропускания);
- Возможная причина — **DDoS-атака**: маленькие пакеты генерируют огромное количество сессий при небольшом объёме трафика;
- Запросить у оператора информацию о состоянии трафика.
> **Примечание:** таблица абонентов (subscribers) также отображается в `show resources`, но в проекте ТСПУ **не используется** — это функционал BRAS.
### 18.7.2. Свободные буферы: не должны уходить в ноль
Значение **свободных буферов** не имеет конкретного «правильного» числа. Важно следить за **динамикой**:
- Буферы могут увеличиваться и уменьшаться в зависимости от нагрузки;
- На графике они должны **колебаться** вокруг средней линии;
- Если в течение **недели и более** буферы постепенно **уменьшаются** — это признак **утечки памяти**, и необходимо открывать кейс в техподдержке;
- Буферы **не должны уходить в ноль**.
### 18.7.3. DPI-ресурсы: не более 100%
Загрузка DPI-ресурсов отображается отдельно. Порог — **100%**:
| Загрузка | Оценка |
| -------------- | -------------------------- |
| **< 100%** | Нормальная работа |
| **≥ 100%** | Ресурсы DPI исчерпаны |
### 18.7.4. CPU Load — условный параметр обработки трафика
Параметр **CPU Load** в `show resources` — это **не** стандартная загрузка CPU в понимании Linux. Это **условный параметр**, рассчитываемый процессом EcoFilter, отражающий долю времени, затрачиваемую на обработку трафика.
| Загрузка | Оценка |
| -------------- | -------------------------------------------------------- |
| **< 80%** | Нормальная работа |
| **8090%** | Повод для анализа — выяснить причину высокой загрузки |
| **~100%** | Критическая ситуация — фильтр не справляется |
Значения 8090% и выше — повод обратиться в техподдержку или провести собственное расследование причин.
## 18.8. Память: Control Plane vs Data Plane
Память фильтра условно разделена на **две области**:
| Область | Назначение |
| -------------------- | ------------------------------------------------------------- |
| **Control Plane** | ОС Linux, CLI, сервисные функции (syslog, управление и т.д.) |
| **Data Plane** | Процесс EcoNAT — обработка трафика, ресурсные таблицы |
### 18.8.1. Data Plane выделяется при старте, не должна расти
Память Data Plane выделяется **один раз при старте** процесса EcoNAT. В ней создаются ресурсные таблицы (сессии, трансляции и пр.).
После старта объём занятой Data Plane памяти **не должен расти**. На графике мониторинга это должна быть **ровная линия** с незначительными отклонениями. Если наблюдается постоянный рост — это признак утечки памяти.
### 18.8.2. Пороги: 510% свободной памяти — повод для тревоги
| Свободная память | Оценка |
| ---------------- | --------------------------------------------------------- |
| **> 10%** | Нормально |
| **510%** | Повод для тревоги — рекомендуется настроить алерт в системе мониторинга |
| **< 5%** | Критическая ситуация |
Если свободная память составляет 5%, но **не уменьшается** со временем — это нормальная ситуация. На современных платформах памяти достаточно, и свободной памяти обычно остаётся много.
> **Примечание:** на некоторых площадках (например, МТС) используется другой принцип расчёта свободной памяти, и в мониторинге могут отображаться небольшие значения (~5%). Это нормально для данных прошивок.
## 18.9. `show cps` — скорость создания новых сессий
Команда `show cps` (Connections Per Second) показывает **скорость создания новых сессий** и трансляций в секунду.
| Значение | Интерпретация |
| ----------- | ----------------------------------------------------------- |
| **> 0** | Новые сессии создаются, трафик обрабатывается |
| **0** | Новые сессии не создаются — требуется диагностика |
**Нулевое значение** может означать:
1. **Трафик не проходит** через фильтр вообще;
2. **Трафик проходит, но не попадает в пул** — ACL не отбирает трафик, сессии не создаются. Через фильтр могут идти гигабиты и десятки гигабит, но `show cps` будет показывать ноль (подробнее — в [разделе 16](16.md)).
## 18.10. `show statistic` — статистика сессий и пулов, значение Optimal (= 20%)
Команда `show statistic` отображает статистику по сессиям и загрузке пула:
| Параметр | Описание |
| ------------ | ----------------------------------------------------------- |
| **Total** | Максимальный размер таблицы |
| **Used** | Количество используемых записей |
| **Optimal** | 20% от Total — оптимальный максимум загрузки |
Значение **Optimal** — это те же 20%, что и в `show resources`, но отображённые **в абсолютных числах**, а не в процентах. Количество используемых записей (Used) **не должно превышать** значение Optimal.
Загрузка пула: поскольку пул в проекте ТСПУ всегда типа **fake**, его загрузка будет **нулевой** — на неё можно не обращать внимания.
## 18.11. Счётчики: `show counters all` / `show counters div` (дельта за секунду)
На фильтре существует **большое количество** счётчиков — практически на каждую операцию.
| Команда | Описание |
| ---------------------- | ---------------------------------------------------------- |
| `show counters all` | Значения счётчиков с момента последнего обнуления (или перезагрузки) |
| `show counters div` | Дельта за последнюю секунду — какие счётчики увеличились и на сколько |
**`show counters div`** — наиболее полезная команда для оперативной диагностики. Она показывает только те счётчики, которые **изменились за последнюю секунду**. Если счётчик не появился в выводе — значит, за последнюю секунду он не увеличился.
Примеры счётчиков:
- Распознанные пакеты по протоколам (WhatsApp Voice, Telegram и т.д.);
- Отправленные логи;
- Счётчики L2-протоколов (PPPoE, MPLS);
- Нераспознанные протоколы;
- И многие другие (сотни счётчиков).
Как правило, из названия счётчика понятно, за что он отвечает. Наиболее важные счётчики выведены в **систему мониторинга**. На разных площадках набор активных счётчиков может различаться в зависимости от типа трафика и инкапсуляций.
> **Подсказка:** для оценки нераспознанного трафика можно сравнить **общее количество пакетов** с суммой распознанных — разница покажет объём нераспознанного трафика.
## 18.12. Системный журнал: `show syslog`, ротация двух файлов
Помимо логирования на внешний сервер (см. [раздел 14.8](14.md)), логи хранятся **внутри устройства** на локальном разделе.
Особенности внутреннего хранения:
- Раздел для логов **небольшой**;
- Используются **два файла**, которые **ротируются**: сначала пишется в один, затем в другой, и наоборот;
- При большом объёме логов файлы **быстро перезатираются** — если с момента проблемы прошло пару суток, логи, скорее всего, уже утрачены;
- Именно для решения этой проблемы в федеральном проекте добавлено **внешнее логирование** на СПХД.
Команда `show syslog` выводит записи из внутреннего журнала, начиная с **самых свежих**.
## 18.13. DPI-мониторинг
### 18.13.1. `show dpi records <N>` — содержимое DPI-листа
Команда `show dpi records <N>` выводит **содержимое** загруженного DPI-листа с номером N, включая реестр Роскомнадзора (лист 0).
> **Предупреждение:** содержимое реестра Роскомнадзора (лист 0) **очень велико**. Вывод может продолжаться несколько минут. Для прерывания — `Ctrl+C`.
### 18.13.2. `show dpi state` — количество записей, дата последнего дампа
Команда `show dpi state`**основная диагностическая команда** для анализа состояния DPI. Отображает:
| Параметр | Описание |
| ------------------------- | --------------------------------------------------------- |
| **Количество IP-записей** | Число загруженных IP-адресов и подсетей |
| **Количество URL-записей**| Число загруженных URL |
| **Last time** | Время последнего скачивания дампа |
| **Actual date for delta** | Временная метка последней записи в реестре Роскомнадзора |
| **DPI-ресурсы** | Загрузка ресурсов DPI (аналогично `show resources`) |
**Интерпретация дат:**
Реестр Роскомнадзора формируется **итерационно**: Роскомнадзор периодически обновляет реестр, выпуская основные дампы и дельты. Если Роскомнадзор **не вносил обновлений** в течение длительного времени (например, суток), то:
- Фильтр продолжает запрашивать обновления с периодичностью update schedule (обычно 30 минут);
- Сервер РКН отвечает, что обновлений нет;
- Дата последнего скачивания **не обновляется**;
- В системе мониторинга может появиться алерт «дамп не скачивался более 24 часов».
Это **не обязательно означает проблему** — возможно, Роскомнадзор просто не обновлял реестр. Однако если дата не обновляется длительное время, следует проверить скорость скачивания и доступность сервера РКН.
Команда `dpi list` показывает файлы на диске: все дампы, дельты и сформированные DPI-листы. Например, реестр Роскомнадзора после парсинга хранится в файле `list_0.dpi`.
### 18.13.3. `dpi load <N>` — ручная загрузка списка
Команда `dpi load <N>` принудительно загружает DPI-лист с номером N с URL, указанного в конфигурации данного листа (или с URL, заданного в команде). Используется для диагностики проблем с загрузкой списков.
### 18.13.4. `dpi run` — принудительное обновление всех списков
Команда `dpi run` принудительно запускает обновление **всех** настроенных DPI-листов. В штатной эксплуатации обычно не требуется — используется при диагностике проблем с обновлением списков.
> **Примечание:** `dpi run` инициирует запрос к серверам, но не гарантирует скачивание — если обновлений нет, ничего скачано не будет.
### 18.13.5. `show dpi match <ресурс>` — проверка ресурса по всем DPI-листам
Команда `show dpi match <ресурс>` проверяет указанный ресурс (IP-адрес или URL) по **всем загруженным DPI-листам** и выводит:
- В каком DPI-листе найдено **совпадение**;
- Какое **поведение** (behavior) задано для этого листа.
Если совпадений нет — вывод будет пустым.
> **Примечание:** в версии прошивки пилотного проекта (Урал) эта команда может быть **недоступна**. Она появилась в более новых версиях для федерального проекта.
Команда крайне полезна для диагностики: если абонент жалуется на блокировку ресурса, можно быстро проверить, присутствует ли ресурс в каком-либо DPI-листе и с каким действием.
## 18.14. Ping и Traceroute (из конфигурационного режима)
Команды `ping` и `traceroute` доступны из **конфигурационного режима** (не из операционного).
| Команда | Описание |
| --------------- | ----------------------------------------------------------- |
| `ping <адрес>` | Бесконечный пинг до указанного хоста (прервать — `Ctrl+C`) |
| `traceroute <адрес>` | Трассировка маршрута до хоста |
> **Важно:** ping и traceroute работают **только через management-интерфейс**. Фильтр — это L2-устройство без IP-интерфейсов в тракте данных, поэтому инициировать трафик через LAN/WAN-интерфейсы **невозможно** (подробнее — в [разделе 5.2](05.md)).
---
[← Оглавление](../README.md) · [← Раздел 17: Фильтр: настройка DPI](17.md) · [Раздел 19: Фильтр: обновление прошивки →](19.md)

120
chapters/19.md Normal file
View File

@@ -0,0 +1,120 @@
# 19. Фильтр: обновление прошивки
[← Оглавление](../README.md) · [← Раздел 18: Фильтр: мониторинг и диагностика](18.md)
---
Обновление программного обеспечения фильтра выполняется через CLI из конфигурационного режима. Система хранения прошивок построена на принципе **двух равнозначных разделов**, что позволяет безопасно обновляться и при необходимости откатываться на предыдущую версию.
## 19.1. Два раздела: prim1 и prim2 (равнозначные) + FB (заводская)
На SSD-накопителе фильтра расположены **три раздела** для программного обеспечения:
| Раздел | Описание |
| --------- | ---------------------------------------------------------------- |
| **FB** | Заводская прошивка — минимальный образ, предоставляющий только доступ к management-интерфейсу и возможность загрузить нормальную прошивку |
| **prim1** | Первый рабочий раздел для полноценной прошивки |
| **prim2** | Второй рабочий раздел для полноценной прошивки |
Разделы **prim1** и **prim2****абсолютно равнозначные**. Нет «основного» и «второстепенного» — оба раздела одинаковы. На каждом может быть загружен свой образ ПО, и между ними можно свободно переключаться (с перезагрузкой).
## 19.2. `firmware status` — текущее состояние (cur / boot)
Команда `firmware status` (из конфигурационного режима) выводит информацию о разделах прошивки:
| Поле | Описание |
| --------- | ----------------------------------------------------------- |
| **cur** | Активная версия — та, с которой устройство работает сейчас |
| **boot** | Версия, которая будет загружена при следующей перезагрузке |
Пример вывода: активная версия — `4031` (cur), после перезагрузки загрузится `4038` (boot). Это означает, что новая прошивка была установлена, но устройство ещё не перезагружено.
В нормальном рабочем состоянии значения **cur** и **boot** указывают на один и тот же раздел. После установки новой прошивки **boot** автоматически переключается на раздел с новой версией.
## 19.3. `firmware download` — скачивание, `firmware install` — установка
Обновление прошивки выполняется в **два этапа**:
### Этап 1: Скачивание
```text
firmware download <URL>
```
Команда скачивает образ прошивки с указанного URL на устройство.
### Этап 2: Установка
```text
firmware install
```
Команда устанавливает скачанный образ на **неактивный раздел** (тот, который сейчас не используется). После установки значение **boot** автоматически переключается на раздел с новой прошивкой.
**Важные ограничения:**
- Установка выполняется быстро (~5 секунд), но в этот момент фильтр может **не реагировать** на команды в CLI;
- После установки, пока устройство не перезагружено, **повторная установка невозможна** — для установки новой прошивки значения cur и boot должны совпадать;
- Для применения новой прошивки необходима **перезагрузка** устройства (из конфигурационного режима, с подтверждением).
### Полная последовательность обновления
```text
# 1. Проверить текущее состояние
firmware status
# 2. Скачать новую прошивку
firmware download <URL>
# 3. Установить на неактивный раздел
firmware install
# 4. Проверить, что boot указывает на новый раздел
firmware status
# 5. Перезагрузить устройство
reload
```
## 19.4. `firmware rollback` / `firmware reset`
Для управления разделами загрузки доступны две команды:
| Команда | Действие |
| --------------------- | ----------------------------------------------------------- |
| **firmware rollback** | Переключает **boot** на неактивный раздел (откат на другую версию) |
| **firmware reset** | Возвращает **boot** обратно на текущий активный раздел (отмена rollback) |
### firmware rollback
Команда `firmware rollback` меняет значение boot с активного раздела на неактивный. Это позволяет:
- **Откатиться** на предыдущую версию прошивки (если на другом разделе сохранена рабочая версия);
- **Отменить** запланированное обновление (если после `firmware install` вы решили не обновляться).
### firmware reset
Команда `firmware reset` выполняет обратное действие — возвращает boot на текущий активный раздел. Используется, если rollback был выполнен по ошибке.
> **Примечание:** обе команды изменяют только указатель boot — фактического переключения не происходит до перезагрузки.
## 19.5. Централизованное обновление через ЦСУ
В промышленной эксплуатации обновление прошивок выполняется **централизованно** через центральную систему управления (ЦСУ):
- Оператор инициирует обновление через интерфейс ЦСУ;
- ЦСУ автоматически скачивает и устанавливает прошивку на фильтры;
- По завершении формируется **отчёт** об успешности или неуспешности обновления;
- Перезагрузка фильтров также инициируется через ЦСУ.
Ручное обновление через CLI остаётся важным навыком для:
- Диагностики проблем с обновлением;
- Обновления единичных устройств;
- Работы на площадках, где ЦСУ временно недоступна.
При массовом обновлении множества фильтров через ЦСУ рекомендуется **последовательная** перезагрузка с проверкой работоспособности каждого устройства после обновления.
---
[← Оглавление](../README.md) · [← Раздел 18: Фильтр: мониторинг и диагностика](18.md) · [Раздел 20: Балансировщик: аппаратная платформа →](20.md)

175
chapters/20.md Normal file
View File

@@ -0,0 +1,175 @@
# 20. Балансировщик: аппаратная платформа
[← Оглавление](../README.md) · [← Раздел 19: Фильтр: обновление прошивки](19.md)
---
Балансировщик (EcoFilter Balancer) — устройство, обеспечивающее распределение трафика между фильтрами и их отказоустойчивость. Аппаратная платформа **одинакова** как для EcoFilter Balancer, так и для Eco Highway (эшелонированная система) — различия только в программной части.
## 20.1. Одноюнитовый (32 порта QSFP28) и двухюнитовый (65 портов)
Балансировщик выпускается в двух форм-факторах:
| Форм-фактор | Количество портов | Применение в ТСПУ |
| ------------------ | -------------------- | ------------------ |
| **1U** (одноюнитовый) | 32 порта QSFP28 | **Используется** |
| **2U** (двухюнитовый) | 65 портов QSFP28 | Не используется |
В проекте ТСПУ применяются **только одноюнитовые** балансировщики с 32 портами QSFP28.
Характеристики:
- **Пропускная способность** — 3,2 Тбит/с на уровне провода (для пакетов более 160 байт);
- **Питание** — два блока питания с горячим резервированием (расположены на задней панели);
- **Высота** — 1U.
## 20.2. Скорости портов: 10G / 25G / 100G
Порты QSFP28 поддерживают работу на различных скоростях в зависимости от конфигурации и типа установленных трансиверов:
| Скорость | Описание |
| ----------- | ------------------------------------------------------------ |
| **100G** | Все 4 линии порта QSFP28 объединены (суммарная скорость) |
| **25G** | Каждая из 4 линий работает отдельно на 25 Гбит/с |
| **10G** | Каждая из 4 линий работает на 10 Гбит/с (с использованием гидры) |
В проекте ТСПУ типовые скорости — **10G** и **100G**.
Каждый физический порт QSFP28 разделён на **четыре линии** (lane 03), каждая из которых может работать на скорости до 25 Гбит/с. Объединение всех четырёх линий даёт суммарную скорость 100 Гбит/с.
> **Примечание:** management-интерфейс работает **только** на скорости 1 Гбит/с Ethernet. Скорости 10 и 100 Мбит/с не поддерживаются.
## 20.3. Гидры (breakout): один QSFP28 → четыре SFP+ (10G)
Для подключения 10-гигабитных интерфейсов используются **гидры** (breakout-кабели) — разветвители, преобразующие один порт QSFP28 в четыре порта SFP+ (10G):
```text
QSFP28 порт (100G)
┌────┴────┐
│ Гидра │
└──┬─┬─┬─┬┘
│ │ │ │
SFP+ SFP+ SFP+ SFP+
10G 10G 10G 10G
```
Гидры могут быть:
- **Оптические** — с оптическими кабелями;
- **DAC** (Direct Attach Copper) — с медными кабелями прямого подключения.
При использовании гидры в одном физическом QSFP28-разъёме появляется **до четырёх** независимых портов по 10 Гбит/с. Каждый из этих портов конфигурируется отдельно с указанием номера линии (lane).
## 20.4. Внутренняя архитектура
Внутренняя архитектура балансировщика включает несколько ключевых компонентов, связанных между собой:
```text
┌──────────────────────────────────────────────────┐
│ Балансировщик │
│ │
│ ┌──────────┐ PCI-E ┌──────────────────┐ │
│ │Микросервер├──────────────►│ Чип Barefoot │ │
│ │ (Intel, │ │ Tofino │ │
│ │ Linux) │ │ (коммутация) │──── 32× QSFP28
│ └─────┬─────┘ └──────────────────┘ │
│ │ │
│ ┌─────┴─────┐ ┌───────────┐ │
│ │ Ethernet │ │ │ │
│ │ switch ├─────┤ BMC │ │
│ │ (5 портов) │ │ │ │
│ └─────┬─────┘ └───────────┘ │
│ │ │
│ ┌─────┴─────┐ ┌───────────┐ │
│ │ Management │ │Console MUX│ │
│ │ Ethernet │ │ │ │
│ └───────────┘ └───────────┘ │
│ │ │
│ ┌────┴────┐ │
│ │ Console │ │
│ └─────────┘ │
└──────────────────────────────────────────────────┘
```
### 20.4.1. Микросервер (Intel, Linux) — CLI, конфигурация
**Микросервер** — основной «мозг» балансировщика, с которым взаимодействует оператор:
- Небольшая специализированная плата с **процессором Intel**;
- Оснащён **памятью** и **SSD-диском** для хранения конфигурации и прошивки;
- Работает под управлением **ОС Linux**;
- Предоставляет **CLI** для настройки и мониторинга;
- Связан с чипом Tofino по шине **PCI Express**;
- **Программирует** чип Tofino — задаёт правила обработки и коммутации трафика.
Микросервер не обрабатывает трафик напрямую — он только управляет чипом коммутации.
### 20.4.2. Чип Barefoot Tofino — программируемая коммутация
**Barefoot Tofino** — высокопроизводительный программируемый чип, обеспечивающий коммутацию трафика на скорости провода:
- Соединён со всеми **32 портами QSFP28**;
- Содержит **конвейеры** (pipelines), через которые проходят пакеты;
- Программируется микросервером — правила балансировки, фильтрации, bypass загружаются в чип;
- Обеспечивает производительность **3,2 Тбит/с**.
Все операции с трафиком (балансировка между фильтрами, программный байпас, фильтрация по flow rules) выполняются **внутри чипа Tofino** без участия микросервера.
### 20.4.3. BMC — управление аппаратной частью, сенсоры, блоки питания
**BMC** (Baseboard Management Controller) — модуль управления аппаратной платформой:
- **Мониторинг сенсоров** — температура, напряжение, токи;
- **Управление блоками питания** — статус, параметры;
- **Мониторинг SFP-трансиверов** — диагностическая информация, уровни сигналов (DDM);
- **Аварийное управление** — при критических проблемах (например, перегрев) BMC может отключить отдельные компоненты или полностью погасить платформу.
> **Практический случай:** весной на ряде площадок наблюдались зависания балансировщиков. Причиной оказалось некорректное считывание BMC показаний температурного датчика — BMC ошибочно определял перегрев и выключал микросервер.
Доступ к BMC возможен:
- Через **внешнюю консоль** (при определённых настройках Console MUX);
- Через **Management Ethernet** (один порт обеспечивает доступ и к микросерверу, и к BMC).
### 20.4.4. Ethernet switch (5-портовый) — доступ к микросерверу и BMC
Внутри балансировщика расположен **5-портовый Ethernet-коммутатор**, к которому подключены:
- **Management Ethernet** (внешний порт на передней панели);
- **Микросервер** (CLI, конфигурация);
- **BMC** (управление аппаратной частью).
Благодаря этому коммутатору **один внешний Ethernet-порт** обеспечивает доступ одновременно к микросерверу и BMC — каждый на своём IP-адресе.
### 20.4.5. Console MUX — переключение консоли между компонентами
**Console MUX** — мультиплексор консольного порта, позволяющий переключать физическую консоль между различными внутренними компонентами:
- **Микросервер** — основной режим, доступ к CLI;
- **BMC** — для диагностики и восстановления аппаратной части.
> **Внимание:** скорость консольного порта может различаться в зависимости от того, к какому компоненту вы подключены. Если подключение к BMC — может быть одна скорость, к микросерверу — другая. На новых устройствах иногда приходится **подбирать скорость** консольного соединения.
## 20.5. Передняя панель: Console, Management Ethernet, USB
На передней панели балансировщика расположены:
| Порт / разъём | Описание |
| ----------------------- | --------------------------------------------------------- |
| **Console** | Консольный порт (через Console MUX переключается между микросервером и BMC) |
| **Management Ethernet** | Порт управления (1 Гбит/с), доступ к микросерверу и BMC через внутренний коммутатор |
| **USB** | USB-порт, доступен с микросервера и через USB-хаб |
| **32× QSFP28** | Порты для подключения трафика (операторские линки и фильтры) |
Также на панели присутствует **диагностический разъём**, не используемый в эксплуатации.
**Учётные данные по умолчанию:**
| Доступ | Логин/пароль |
| ---------- | ----------------------- |
| **SSH** | `admin` / `admin` |
---
[← Оглавление](../README.md) · [← Раздел 19: Фильтр: обновление прошивки](19.md) · [Раздел 21: Балансировщик: конфигурация →](21.md)

486
chapters/21.md Normal file
View File

@@ -0,0 +1,486 @@
# 21. Балансировщик: конфигурация
[← Оглавление](../README.md) · [← Раздел 20: Балансировщик: аппаратная платформа](20.md)
---
Настройка балансировщика (EcoFilter Balancer) начинается после установки прошивки и конфигурации сегмента управления. В отличие от фильтра, на балансировщике **нет дефолтной конфигурации** — все секции (порты, линки, группы балансировки, фильтры) необходимо создавать вручную.
## 21.1. CLI: операционный режим / конфигурационный режим (`edit`)
CLI балансировщика, как и у фильтра, имеет **два режима** работы:
| Режим | Переход | Назначение |
| -------------------- | -------------------- | ----------------------------------------- |
| **Операционный** | по умолчанию | Просмотр информации: команды `show` |
| **Конфигурационный** | команда **`edit`** | Изменение всех настроек устройства |
> **Отличие от фильтра:** на фильтре для перехода в конфигурационный режим используется команда `config`, а на балансировщике — **`edit`**.
### 21.1.1. Интерфейс похож на Juniper CLI
Интерфейс командной строки балансировщика **очень похож на CLI Juniper**. Настройки задаются с помощью команды `set`:
```text
set <путь> <параметр> <значение>
```
Для тех, кто знаком с оборудованием Juniper, работа с CLI балансировщика не вызовет затруднений.
### 21.1.2. `apply` — применить, `save` — сохранить в startup
После внесения изменений их необходимо применить и сохранить:
```text
Внесение изменений ──► apply ──► save
│ │ │
│ │ └─ Сохранение в startup-config
│ │ (переживёт перезагрузку)
│ │
│ └─ Применение конфигурации
│ (изменения вступают в силу)
└─ Изменения только в буфере
(не активны, не сохранены)
```
| Команда | Действие |
| ----------- | ------------------------------------------------------------------------- |
| **`apply`** | Применяет конфигурацию — изменения вступают в силу |
| **`save`** | Сохраняет конфигурацию в startup-config (переживёт перезагрузку) |
> **Важно:** в прошивке пилотного проекта (Урал) команда `apply` одновременно и применяла, и сохраняла конфигурацию в startup-config. В текущих (федеральных) прошивках это поведение изменено: `apply` только применяет, а для сохранения нужна отдельная команда `save`.
## 21.2. Обновление прошивки: `call rdp firmware download` / `call rdp install`
Обновление прошивки балансировщика выполняется в **два этапа** — скачивание и установка:
### Этап 1: Скачивание
```text
call rdp firmware download <URL> <имя_файла>
```
Скачивает образ прошивки с указанного URL и сохраняет его на устройстве под указанным именем.
### Этап 2: Установка
```text
call rdp install <имя_файла>
```
Устанавливает прошивку из указанного файла. По завершении команда выводит результат — `OK` или сообщение об ошибке.
### Дополнительные команды
| Команда | Действие |
| -------------------------------- | ------------------------------------------------------ |
| `call rdp firmware list` | Показать список файлов прошивок на устройстве |
| `call rdp firmware delete` | Удалить файл прошивки |
| `call rdp firmware set-active` | Установить активную прошивку на указанный раздел |
| `show rdp firmware version` | Показать состояние прошивок (версия, активность, tries) |
### 21.2.1. Два раздела прошивок (A/B), автоматический rollback (3 попытки / 20 мин)
Как и на фильтре, балансировщик хранит **два раздела** прошивок — **A** и **B**:
| Раздел | Описание |
| ------ | ---------------------------------------------------------- |
| **A** | Первый раздел для прошивки |
| **B** | Второй раздел для прошивки |
Для каждого раздела отображается:
- **Активность** — активна эта прошивка или нет;
- **Версия** — номер версии прошивки;
- **Tries** — счётчик попыток загрузки.
Новая прошивка всегда устанавливается **вместо неактивной** в данный момент.
**Механизм автоматического rollback:**
Балансировщик отслеживает **количество неудачных попыток** загрузки с конкретной прошивки. Если устройство **более 3 раз подряд** не смогло загрузиться с определённой прошивки в течение приблизительно **20 минут**, эта прошивка считается **ненадёжной**, и балансировщик автоматически переключается на другой раздел.
> **Практический совет:** если вам нужно несколько раз перезагрузить балансировщик в короткий промежуток времени (например, для тестирования), помните о лимите в 3 перезагрузки. После третьей перезагрузки за короткий период прошивка будет признана нестабильной. Количество попыток и временной интервал **не настраиваются** — они зашиты в прошивке.
### 21.2.2. `call rdp firmware reset-tries`
Для сброса счётчика попыток загрузки используется команда:
```text
call rdp firmware reset-tries
```
Эта команда обнуляет значение **tries**, позволяя продолжить перезагрузки без риска автоматического переключения на другой раздел. В промышленной эксплуатации эта команда практически не требуется, но знать о ней полезно.
## 21.3. Настройка физических портов
Настройка физических портов — это **первый шаг** конфигурации балансировщика. Поскольку дефолтной конфигурации нет, все порты необходимо создавать вручную.
Для каждого порта задаются следующие параметры:
| Параметр | Описание |
| --------------- | ------------------------------------------------------------ |
| **Имя порта** | Произвольное имя (рекомендуется формат `P<порт><линия>`) |
| **number** | Номер физического интерфейса на лицевой панели (132) |
| **lane** | Номер линии внутри физического порта (03) |
| **speed** | Скорость порта: 10G, 25G или 100G |
| **mtu** | Максимальный размер кадра |
| **description** | Текстовое описание порта |
Пример конфигурации двух 10-гигабитных портов на одном физическом интерфейсе:
```text
set ports P21 number 2 lane 1 speed 10g
set ports P22 number 2 lane 2 speed 10g
```
### 21.3.1. Имя порта, номер физического порта (number), линия (lane), скорость (speed)
Имя порта может быть **произвольным**, однако рекомендуется придерживаться единообразной схемы именования, отражающей номер физического порта и номер линии:
```text
P<номер_порта><номер_линии>
```
Например:
| Имя порта | Физический порт | Линия | Скорость | Описание |
| --------- | --------------- | ----- | -------- | ------------------------------------ |
| `P21` | 2 | 1 | 10G | Порт 2, линия 1 — первый 10G-канал |
| `P22` | 2 | 2 | 10G | Порт 2, линия 2 — второй 10G-канал |
| `P2` | 2 | — | 100G | Порт 2, все линии — 100G-канал |
### 21.3.2. 10G: указание lane (03), 100G: все lane задействованы
Поведение параметра **lane** зависит от выбранной скорости:
**При 10G (или 25G):**
Каждый физический порт QSFP28 содержит 4 линии. При использовании гидры (breakout-кабеля) каждая линия становится отдельным 10-гигабитным портом. Для каждого такого порта необходимо явно указать номер линии (`lane 0`, `lane 1`, `lane 2`, `lane 3`):
```text
set ports P20 number 2 lane 0 speed 10g
set ports P21 number 2 lane 1 speed 10g
set ports P22 number 2 lane 2 speed 10g
set ports P23 number 2 lane 3 speed 10g
```
В результате из одного физического QSFP28-разъёма получается **4 независимых порта** по 10 Гбит/с.
**При 100G:**
Все 4 линии объединены в один канал. Параметр `lane` **не указывается**, так как задействованы все линии:
```text
set ports P2 number 2 speed 100g
```
> **Рекомендация:** все физические порты настраиваются в соответствии со схемой организации связи на конкретной площадке. Единых «стандартных» настроек нет — конфигурация полностью зависит от того, какие устройства и на каких скоростях подключены к балансировщику.
## 21.4. Настройка линков (объединение двух портов LAN+WAN в сторону оператора)
**Линк** (link) в терминологии балансировщика — это объединение **двух портов** (LAN и WAN) в сторону оператора связи:
```text
Оператор связи
┌────┴────┐
│ Байпас │
└──┬───┬──┘
│ │
LAN WAN ← это один линк
│ │
┌──┴───┴──┐
│Балансир.│
└─────────┘
```
Каждый линк всегда содержит **ровно один LAN-порт** и **ровно один WAN-порт**.
Настройка линка:
```text
set links <имя_линка> lan-port <имя_LAN_порта> wan-port <имя_WAN_порта>
set links <имя_линка> description "<описание>"
```
Пример:
```text
set links link1 lan-port P21 wan-port P22
set links link1 description "Bypass1-Mon0/Mon1"
```
| Параметр | Описание |
| ---------------- | ----------------------------------------------------------- |
| **Имя линка** | Произвольное название (рекомендуется единообразная схема) |
| **lan-port** | Порт в сторону абонентов (LAN) |
| **wan-port** | Порт в сторону интернета (WAN) |
| **description** | Описание — к какому байпасу и интерфейсу подключен линк |
> **Рекомендация:** в описании линка указывайте, к какому конкретно байпасу и к каким его интерфейсам подключён данный линк. Это значительно упрощает диагностику.
## 21.5. Настройка группы балансировки
После настройки портов и линков необходимо создать **группу балансировки** (balance group) и привязать к ней группы портов в сторону фильтров.
```text
Линки (оператор) Группа балансировки Фильтры
│ │ │
┌────┴────┐ ┌──────┴──────┐ ┌─────┴─────┐
│ link1 │ │ │ │ Filter │
│ link2 │──────► │ Balance │──────│ Group 1 │──► Фильтр 1
│ link3 │ Flow │ Group │ │ Group 2 │──► Фильтр 1
│ ... │ rules │ │ │ Group 3 │──► Фильтр 2
└─────────┘ └──────┬──────┘ │ ... │
│ └───────────┘
Профиль проверки
доступности
```
### 21.5.1. Привязка групп портов в сторону фильтров (filter groups)
К группе балансировки привязываются **filter groups** — пары портов (LAN + WAN) в сторону фильтров:
```text
set balance-group <имя_группы> filter-group <имя_filter_group> lan-port <порт> wan-port <порт>
```
Количество filter groups определяется количеством пар интерфейсов в сторону фильтров:
| Конфигурация площадки | Количество filter groups |
| -------------------------------------------- | ------------------------ |
| 1 фильтр, 16 портов (8 пар LAN/WAN) | 8 |
| 10 фильтров, 16 портов каждый (80 пар) | 80 |
Каждая filter group объединяет один LAN-порт и один WAN-порт, смотрящие в сторону конкретной пары интерфейсов фильтра.
### 21.5.2. N_UNIT_QA: количество ядер фильтра минус один
Параметр **N_UNIT_QA** сообщает балансировщику количество ядер на подключённых фильтрах, которые участвуют в обработке трафика:
```text
set balance-group <имя_группы> n-unit-qa <число>
```
Значение **всегда равно общему количеству ядер процессора фильтра минус один**:
| Модель фильтра | Ядер всего | N_UNIT_QA |
| ----------------------------- | ---------- | --------- |
| Xeon 2695 (18 ядер) | 18 | 17 |
| Xeon 2699 (22 ядра) | 22 | 21 |
| Xeon Gold 6212 (24 ядра) | 24 | 23 |
Причина вычитания единицы: на фильтре **все ядра, кроме одного**, отданы под процесс EcoNAT, который обрабатывает трафик. Одно ядро — **сервисное**: на нём работает Linux, системные логи, управление. Оно не участвует в обработке трафика.
Этот параметр **напрямую влияет на балансировку** — балансировщик распределяет трафик не только между фильтрами, но и между их ядрами, обеспечивая равномерную нагрузку.
## 21.6. Профиль проверки доступности (keep-alive)
К группе балансировки привязывается **профиль проверки доступности** (availability profile), определяющий параметры отправки keep-alive пакетов через группы портов в сторону фильтров.
```text
set balance-group <имя_группы> availability-profile <имя_профиля>
```
Профиль настраивается отдельно:
```text
set availability-profile <имя_профиля> <параметр> <значение>
```
### 21.6.1. Начальная задержка, интервал, порог потерь
| Параметр | Описание |
| -------------------------- | -------------------------------------------------------------------- |
| **Начальная задержка** | Время ожидания перед началом отправки keep-alive после поднятия интерфейсов (например, 1000 мс). Необходимо, чтобы фильтр успел полностью инициализировать интерфейсы |
| **Интервал** | Периодичность отправки keep-alive пакетов (например, 100 мс) |
| **Порог потерь (down)** | Количество последовательно потерянных пакетов, после которых filter group считается **неактивной** (например, 5 пакетов) |
| **Порог восстановления (up)** | Количество последовательно полученных ответов, после которых неактивная filter group считается снова **активной** |
Механизм работы: балансировщик отправляет keep-alive пакет в LAN-порт filter group и ожидает получить его через парный WAN-порт. Время прохождения пакета (time of pass) измеряется в наносекундах и в нормальном состоянии составляет порядка **2030 микросекунд**.
При потере заданного количества последовательных пакетов filter group переводится в состояние **bypass** — трафик не отправляется на фильтр, а перекладывается из одного порта в другой на уровне логики балансировщика.
### 21.6.2. Минимальное количество активных пар
Параметр **минимальное количество активных пар** (minimum active pairs) определяет, при каком количестве рабочих filter groups вся группа балансировки **целиком** считается активной.
Пример: если задано значение 8, то группа балансировки будет считаться рабочей, пока хотя бы 8 filter groups активны — неважно, сколько их всего.
> **Уральский пилотный проект:** минимальное количество активных пар было установлено **равным общему количеству** пар в сторону фильтров. В результате при потере хотя бы одного интерфейса вся группа балансировки переходила в неактивное состояние, и балансировщик включал bypass на всех линках. Весь трафик ТСПУ снимался из-за одного упавшего интерфейса. Такое поведение **не обязательно** — значение можно настроить более гибко.
### 21.6.3. Перебалансировка: включение/выключение
Параметр **перебалансировки** (rebalancing) определяет, что происходит при выходе из строя одной из filter groups:
| Значение | Поведение |
| --------------- | ---------------------------------------------------------------------- |
| **Включена** | Трафик пересчитывается и распределяется по оставшимся filter groups |
| **Выключена** | Для упавшей filter group включается программный bypass, остальные работают без изменений |
**Перебалансировка** занимает определённое время и вычислительные ресурсы. При пересчёте хэша сессии могут попасть на **другие интерфейсы и другие фильтры**, что в общем случае может быть нежелательным (разрыв DPI-сессий, потеря контекста анализа).
> **Рекомендация:** в федеральном проекте перебалансировку планируется **отключить**. При потере filter group для конкретной пары интерфейсов включается **программный bypass** — трафик не отправляется на фильтр, а перекладывается из LAN-порта в WAN-порт и наоборот. Последствия минимальны: небольшая часть трафика временно не фильтруется. Это меньшее зло, чем флапание линков или разрыв всех сессий при перебалансировке. Система мониторинга получает уведомления (логи, SNMP traps), и проблема устраняется вручную.
## 21.7. Настройка фильтров (Flow rules)
**Фильтры** (flow rules) на балансировщике — это правила, определяющие, что делать с трафиком, поступающим через линки. Каждое правило состоит из двух частей:
| Часть | Описание |
| ---------- | ----------------------------------------------------------- |
| **Match** | Условия, по которым отбирается трафик (заголовки пакетов) |
| **Action** | Действие с пакетом при совпадении |
### 21.7.1. Match-условия: VLAN, IPv4 src/dst, L4 port, MAC, MPLS, глубина тегов
Доступные условия для match-секции:
| Условие | Описание |
| ---------------------- | ------------------------------------------------- |
| **VLAN ID** | Номер VLAN-тега (например, `vlan 0 id 1`) |
| **IPv4 source** | IP-адрес источника (с маской / префиксом) |
| **IPv4 destination** | IP-адрес назначения (с маской / префиксом) |
| **L4 port** | Порт транспортного уровня (TCP/UDP) |
| **MAC address** | MAC-адрес источника или назначения |
| **MPLS labels** | Количество MPLS-меток |
| **Глубина VLAN-тегов** | Количество VLAN-тегов (для QinQ) |
В одном правиле можно комбинировать **несколько условий** одновременно. Например, одновременно проверять VLAN ID и IPv4-подсеть.
Match-условия можно использовать как для **включения** трафика в обработку, так и для **исключения** определённого трафика.
### 21.7.2. Actions: `balancing s_mac` → balance group / `bypass`
Действие (action) определяет, что происходит с пакетом при совпадении:
| Action | Описание |
| ----------------------- | ---------------------------------------------------------------- |
| **balancing s_mac** | Отправить трафик на группу балансировки. Балансировка выполняется по хэшу от source IP, destination IP и протокола |
| **bypass** | Пропустить трафик прозрачно — переложить из одного порта в другой, не отправляя на фильтры |
При использовании `balancing s_mac` дополнительно указывается **целевая группа балансировки**:
```text
set filters <имя_фильтра> flows <имя_правила> action balancing s_mac
set filters <имя_фильтра> flows <имя_правила> to-balance-group <имя_группы>
```
Пример правила, отправляющего трафик с VLAN ID 1 на фильтры:
```text
set filters main flows traffic-to-filter-1 match vlan 0 id 1
set filters main flows traffic-to-filter-1 action balancing s_mac
set filters main flows traffic-to-filter-1 to-balance-group group-filter
set filters main flows traffic-to-filter-1 priority 100
```
Пример правила bypass для всего остального трафика:
```text
set filters main flows default-bypass action bypass
set filters main flows default-bypass priority 1
```
### 21.7.3. Приоритеты правил
Каждому правилу назначается **приоритет** (priority), определяющий порядок обработки. Пакет проверяется по правилам в порядке убывания приоритета — от **высшего** к **низшему**. Первое совпавшее правило определяет действие.
Типовая структура правил:
```text
Приоритет Правило Action
─────────────────────────────────────────────────────
100 VLAN 1 → на фильтр balancing s_mac
90 VLAN 2 → на фильтр balancing s_mac
80 VLAN 3 → на фильтр balancing s_mac
... ... ...
1 Всё остальное → bypass bypass
```
Правило с **самым низким приоритетом** и **без match-условий** (совпадает со всем) обычно задаёт action `bypass`. Это означает: всё, что не попало под предыдущие правила, пропускается прозрачно.
> **Применение для диагностики:** при траблшутинге можно создать правило с высоким приоритетом, которое перехватывает трафик конкретного VLAN и выполняет action `bypass`. Это позволяет исключить конкретный трафик из обработки фильтрами и проверить, влияет ли ТСПУ на проблему. По статистике правила (количество пакетов/байт) можно убедиться, что трафик действительно проходит через это правило.
### 21.7.4. Привязка фильтров к линкам
После настройки правил необходимо **привязать фильтр к линкам** — указать, на каких линках (в сторону оператора) данные правила будут действовать:
```text
set filters <имя_фильтра> links [ <линк1> <линк2> ... ]
```
Пример:
```text
set filters main links [ link1 link2 link3 link4 ]
```
Один набор правил (фильтр) может быть привязан к **нескольким линкам** одновременно. Все линки, привязанные к фильтру, используют одни и те же flow rules.
## 21.8. Настройка Heartbeat для GL Sun (пилотный проект)
Данная настройка актуальна **только для пилотного проекта на Урале**, где используются байпасы GL Sun. В федеральном проекте с байпасами Silicom эта настройка **не требуется** — Silicom самостоятельно генерирует и проверяет heartbeat-пакеты.
На Урале балансировщик работает в активном режиме и сам должен отправлять heartbeat-пакеты на байпас GL Sun:
| Параметр | Описание |
| --------------------------- | --------------------------------------------------------------- |
| **IPv4-адрес байпаса** | IP-адрес байпаса GL Sun |
| **Порт** | Порт для heartbeat-протокола |
| **Период отсылки** | Интервал отправки heartbeat (в наносекундах, например, 30 мкс) |
| **Группа балансировки** | Группа, для которой работает отправка heartbeat |
| **Список линков байпаса** | Идентификаторы сущностей на стороне байпаса GL Sun |
| **ToS** | Тип сервиса в IP-заголовке heartbeat-пакетов |
| **Автоматический возврат** | Возможность автоматического возврата трафика в режим primary при восстановлении группы балансировки |
Heartbeat-пакеты отправляются только при условии, что **группа балансировки находится в состоянии Active**. При переходе группы в неактивное состояние отправка прекращается, и связь с байпасом (по TCP) разрывается — состояние переходит в `disconnected`.
> **Примечание:** с байпасами Silicom логика работы другая — Silicom самостоятельно отсылает heartbeat и проверяет доступность интерфейсов, а балансировщик прозрачно пропускает эти пакеты между своими портами.
## 21.9. Management-интерфейс: IP, маска, default gateway
Настройка management-интерфейса балансировщика выполняется аналогично другим сетевым устройствам:
```text
set management ip <IP-адрес>
set management mask <маска_подсети>
set management default-gateway <IP-шлюза>
```
Management-интерфейс обеспечивает доступ к устройству по SSH и используется для управления, мониторинга и взаимодействия с ЦСУ.
> **Напоминание:** management Ethernet работает **только** на скорости 1 Гбит/с (см. [раздел 20.2](20.md)).
---
## Общий порядок настройки балансировщика
Для наглядности — последовательность настройки балансировщика «с нуля»:
```text
1. Установить прошивку
2. Настроить management-интерфейс
3. Настроить физические порты (ports)
4. Настроить линки (links) — пары LAN/WAN в сторону оператора
5. Настроить группу балансировки (balance group)
└── Создать filter groups (пары портов в сторону фильтров)
└── Задать N_UNIT_QA
└── Привязать профиль проверки доступности
6. Настроить профиль проверки доступности (availability profile)
7. Настроить фильтры (flow rules) — правила обработки трафика
└── Привязать фильтры к линкам
8. apply + save
```
---
[← Оглавление](../README.md) · [← Раздел 20: Балансировщик: аппаратная платформа](20.md) · [Раздел 22: Балансировщик: мониторинг и диагностика →](22.md)

262
chapters/22.md Normal file
View File

@@ -0,0 +1,262 @@
# 22. Балансировщик: мониторинг и диагностика
[← Оглавление](../README.md) · [← Раздел 21: Балансировщик: конфигурация](21.md)
---
Балансировщик предоставляет набор команд для мониторинга аппаратного состояния, проверки прошивок, диагностики портов, анализа правил фильтрации и контроля групп балансировки. Все команды мониторинга выполняются в **операционном режиме**.
## 22.1. `show hardware info` — CPU, память, вентиляторы, БП, температура
Команда `show hardware info` с различными ключевыми словами отображает состояние аппаратных компонентов балансировщика:
| Команда | Описание |
| -------------------------------- | ------------------------------------------- |
| `show hardware info cpu` | Нагрузка на процессор (микросервер) |
| `show hardware info memory` | Состояние оперативной памяти |
| `show hardware info fans` | Состояние вентиляторов |
| `show hardware info power` | Состояние блоков питания |
| `show hardware info temperature` | Показания температурных датчиков |
| **`show hardware info all`** | **Вся информация** по всем компонентам |
Для быстрой проверки общего состояния платформы удобно использовать `show hardware info all` — команда выводит полную картину по всем аппаратным подсистемам.
> **Практический случай:** именно через мониторинг температурных датчиков была выявлена проблема с зависаниями балансировщиков весной — BMC некорректно считывал показания датчика, ошибочно определял перегрев и выключал микросервер (подробнее — в [разделе 20.4.3](20.md)).
## 22.2. `show mng if` — management-интерфейс
Команда `show mng if` отображает текущее состояние management-интерфейса:
- **IP-адрес**;
- **Маска подсети**;
- **Default gateway**;
- **Состояние интерфейса** (up/down).
Команда полезна для быстрой проверки параметров управления после настройки или перезагрузки устройства.
## 22.3. `show rdp firmware version` — версии прошивок, tries
Команда `show rdp firmware version` выводит полную информацию о состоянии прошивок:
```text
Current active firmware: A
Partition A:
Status: active
Version: 2.4.1
Tries: 0
Partition B:
Status: inactive
Version: 2.3.8
Tries: 0
```
| Параметр | Описание |
| ----------------- | --------------------------------------------------------------------- |
| **Current active**| Какой раздел (A или B) является текущим активным |
| **Status** | `active` или `inactive` для каждого раздела |
| **Version** | Номер версии прошивки в разделе |
| **Tries** | Счётчик попыток загрузки с данного раздела |
### Параметр Tries
В нормальном состоянии **Tries = 0**. Ненулевое значение означает, что балансировщик предпринимал неудачные попытки загрузки с этого раздела.
Если балансировщик **более 3 раз подряд** за ~20 минут не смог загрузиться с определённого раздела, прошивка считается **ненадёжной** и происходит автоматический rollback на другой раздел (подробнее — в [разделе 21.2.1](21.md)).
Для сброса счётчика используется команда `call rdp firmware reset-tries`.
## 22.4. Состояние портов и трансиверов: SFP-информация, DDM, статистика фреймов
### Информация о трансиверах
Для каждого порта можно вывести информацию об установленном трансивере:
```text
show port <имя_порта> sfp
```
В выводе отображаются **все четыре линии** (lane) физического порта, даже если задействованы не все. Для каждой линии показаны:
| Параметр | Описание |
| ------------------------- | ---------------------------------------------------------- |
| **Тип трансивера** | Оптика, DAC (медный кабель прямого подключения) и т.д. |
| **Справочная информация** | Производитель, модель, серийный номер SFP |
| **Уровень сигнала (DDM)** | Мощность в децибелах (только для оптических трансиверов) |
> **Примечание:** для медных DAC-кабелей (гидр) уровень сигнала **не отображается**, так как DDM-мониторинг применяется только к оптике. Если установлена оптическая гидра — значения мощности будут видны для каждой линии.
### Подробная статистика порта
Для каждого порта доступна детальная статистика на уровне фреймов:
```text
show port <имя_порта> statistics
```
Вывод содержит подробную информацию:
- Количество полученных и отправленных фреймов;
- Фреймы с ошибками;
- Распределение по размерам фреймов;
- Счётчики различных типов ошибок.
Эта статистика полезна при диагностике проблем с физическим подключением — ошибки на уровне фреймов могут указывать на проблемы с кабелями, трансиверами или несовместимость оборудования.
## 22.5. Статистика правил фильтрации: счётчики пакетов/байт по каждому flow
По каждому правилу фильтрации (flow rule) балансировщик ведёт **счётчики пакетов и байт**, прошедших через данное правило:
```text
show filters <имя_фильтра> flows <имя_правила>
```
В выводе отображается поле **statistics** с количеством пакетов и байт, которые были заматчены данным правилом.
### Применение для диагностики
Статистика правил — мощный инструмент диагностики. Типовые сценарии:
**Сценарий 1: Проверка наличия трафика**
Если оператор сообщает, что трафик определённого VLAN проходит через площадку, можно убедиться в этом по счётчикам соответствующего правила. Если счётчики растут — трафик действительно проходит через балансировщик.
**Сценарий 2: Исключение ТСПУ как причины проблемы**
Для диагностики можно создать **временное правило** с высоким приоритетом, которое матчит проблемный трафик (например, конкретный VLAN) и выполняет action `bypass`:
```text
1. Создать правило: match VLAN <номер>, action bypass, высокий приоритет
2. Применить конфигурацию (apply)
3. Проверить: изменилось ли поведение трафика?
4. Проверить счётчики правила: трафик проходит?
```
Если после создания bypass-правила проблема исчезла — причина в обработке на фильтрах, и нужно диагностировать дальше. Если проблема осталась, а счётчики показывают, что трафик проходит через правило — ТСПУ не является причиной.
> **Важно:** после завершения диагностики не забудьте **удалить временное правило** и применить конфигурацию.
## 22.6. Состояние группы балансировки
Команда для просмотра состояния группы балансировки:
```text
show balance-group <имя_группы>
```
Вывод показывает общее состояние группы и статус каждой filter group внутри неё.
### 22.6.1. Статус filter groups: up/bypass
Каждая filter group (пара портов в сторону фильтра) может находиться в одном из двух состояний:
| Состояние | Описание |
| ------------ | ------------------------------------------------------------------- |
| **up** | Пара портов активна, трафик отправляется на фильтр |
| **bypass** | Пара портов в режиме программного bypass — трафик перекладывается из LAN в WAN и наоборот, не отправляясь на фильтр |
В нормальном рабочем состоянии **все filter groups** должны находиться в состоянии `up`.
Переход в `bypass` происходит автоматически при потере заданного количества последовательных keep-alive пакетов (по умолчанию — 5). Обратный переход в `up` также автоматический — при получении достаточного количества ответных keep-alive пакетов.
### 22.6.2. Time of pass — время прохождения keep-alive пакета
Внутри каждой filter group отображается параметр **time of pass** — время прохождения keep-alive пакета через фильтр:
```text
Filter Group fg1:
Status: up
Time of pass: 27000 ns
```
| Параметр | Описание |
| ------------------ | ----------------------------------------------------------------- |
| **Time of pass** | Время (в наносекундах) между отправкой keep-alive пакета в LAN-порт и получением его из парного WAN-порта |
| **Time of receipt**| Внутренний timestamp — привязан к внутреннему счётчику, практической ценности для эксплуатации не имеет |
Механизм измерения:
1. Балансировщик отправляет keep-alive пакет в **LAN-порт** filter group;
2. Пакет проходит через фильтр (прозрачно, минуя DPI);
3. Балансировщик получает пакет из **WAN-порта** той же filter group;
4. Фиксируется разница во времени — это и есть **time of pass**.
В нормальном состоянии time of pass составляет порядка **2030 микросекунд** (20 00030 000 наносекунд).
> **Важно:** балансировщик **ничего не знает** о работе DPI на фильтрах. Keep-alive пакеты проходят через фильтр прозрачно, без обработки движком DPI. Параметр time of pass отражает исключительно время прохождения пакета через аппаратную часть фильтра.
Если пакеты начинают теряться — time of pass резко возрастает. После потери **5 последовательных** keep-alive пакетов filter group переводится в состояние `bypass`.
### Влияние загрузки фильтра на keep-alive
При высокой загрузке таблиц сессий фильтра (значительно выше рекомендованных 20%) фильтр может начать медленнее обрабатывать трафик и **дропать пакеты**, в том числе keep-alive. Это может привести к «флапингу» filter group — циклическому переключению между `up` и `bypass`.
В такой ситуации оператор **не почувствует флапов** на физических линках (программный bypass не затрагивает физику), но:
- Небольшое количество пакетов может теряться при каждом переключении;
- Часть трафика временно не фильтруется.
Система мониторинга должна отслеживать загрузку таблиц на фильтрах и сигнализировать о приближении к пороговым значениям **до** того, как начнутся проблемы с keep-alive.
## 22.7. Программный байпас: индивидуально для каждой группы портов
Программный bypass на балансировщике может управляться как **автоматически** (по результатам keep-alive), так и **вручную**:
```text
call balance-group <имя_группы> software-bypass <режим>
```
| Режим | Описание |
| ------------ | ------------------------------------------------------------------- |
| **bypass** | Принудительно перевести группу в режим программного bypass |
| **primary** | Вернуть группу в нормальный режим работы (трафик на фильтры) |
### Индивидуальный bypass для каждой filter group
Ключевое преимущество программного bypass — его **гранулярность**. Bypass включается **индивидуально для каждой filter group**, а не для всей группы балансировки целиком:
```text
Filter Group fg1: up ← трафик идёт на фильтр
Filter Group fg2: bypass ← трафик байпасится (проблема с этой парой портов)
Filter Group fg3: up ← трафик идёт на фильтр
Filter Group fg4: up ← трафик идёт на фильтр
```
Это означает, что при проблеме с одним интерфейсом фильтра **не фильтруется** только часть трафика, проходящая через данную пару портов. Весь остальной трафик продолжает нормально обрабатываться.
### Преимущества перед переключением на байпасе
| Критерий | Bypass на оптическом байпасе | Программный bypass на балансировщике |
| -------------------------- | ------------------------------------- | --------------------------------------- |
| **Флап линков оператора** | Да — при каждом переключении | **Нет** — физические линки не затрагиваются |
| **Гранулярность** | Вся площадка целиком | **Каждая пара портов** индивидуально |
| **Согласование с оператором** | Требуется (работы, окна обслуживания) | **Не требуется** — оператор ничего не замечает |
| **Последствия** | Весь трафик не фильтруется | Не фильтруется **только часть** трафика |
> **Опыт эксплуатации:** такое поведение было опробовано при тестировании эшелонированной системы в Сургуте. Вместо переключения трафика на оптическом байпасе (что вызывает флапы линков и недовольство оператора) использовался программный bypass на балансировщике — одной командой трафик уводился с фильтров без каких-либо видимых последствий для оператора.
### Автоматическое восстановление
При автоматическом bypass (по результатам keep-alive):
- Если filter group потеряла keep-alive — автоматически переводится в `bypass`;
- Когда интерфейс восстанавливается и keep-alive снова проходят — filter group **автоматически возвращается** в рабочее состояние (`up`);
- Перебалансировки трафика **не происходит** (при выключенной перебалансировке) — остальные filter groups продолжают работать без изменений.
### Проверка Bypass Watchdog (пилотный проект, Урал)
Для уральского проекта с байпасами GL Sun доступна дополнительная диагностика связи между балансировщиком и байпасом:
| Состояние | Описание |
| ------------- | ---------------------------------------------------------------- |
| **active** | Группа балансировки активна, heartbeat-пакеты отправляются на байпас, байпас отвечает |
| **disconnected** | Группа балансировки неактивна или связь с байпасом потеряна — heartbeat-пакеты не отправляются |
Связь с байпасом GL Sun осуществляется по **протоколу TCP**. При переходе группы балансировки в неактивное состояние отправка heartbeat прекращается.
> **Примечание:** данная диагностика **не актуальна** для федерального проекта с байпасами Silicom, где heartbeat генерируется и проверяется самим байпасом.
---
[← Оглавление](../README.md) · [← Раздел 21: Балансировщик: конфигурация](21.md) · [Раздел 23: Распознавание протоколов (DPI Engine) →](23.md)

165
chapters/23.md Normal file
View File

@@ -0,0 +1,165 @@
# 23. Распознавание протоколов (DPI Engine)
[← Оглавление](../README.md) · [← Раздел 22: Балансировщик: мониторинг и диагностика](22.md)
---
Распознавание протоколов — одна из ключевых функций фильтра ТСПУ. Внутренний движок DPI анализирует проходящие сессии и определяет, к какому протоколу или приложению они относятся: Telegram, WhatsApp, Viber, OpenVPN, BitTorrent и другие. Распознавание особенно важно для **шифрованного трафика**, где нет очевидных полей, указывающих на конкретный протокол, и идентификация выполняется **косвенным образом**.
## 23.1. Многофакторный анализ сессий
DPI-движок фильтра анализирует не отдельные пакеты, а **целые сессии**. Для распознавания необходимо, чтобы в рамках одной сессии прошло **несколько пакетов** в обоих направлениях — одного первого пакета недостаточно.
Анализ проводится по **множеству параметров одновременно** — их может быть десяток и более. Совокупность этих параметров формирует уникальный «профиль» трафика конкретного протокола.
### 23.1.1. Размеры пакетов и их вариации
Один из ключевых параметров анализа — **размеры пакетов** в рамках сессии и их **вариации**:
- Средний размер пакетов;
- Разброс размеров (минимальный, максимальный, стандартное отклонение);
- Характерные паттерны размеров (например, первые пакеты одного размера, последующие — другого).
Разные протоколы и приложения генерируют пакеты с **характерными размерными профилями**. Например, голосовой трафик мессенджера будет иметь иной размерный профиль, чем передача файлов через тот же мессенджер.
### 23.1.2. Частота прохождения пакетов
**Частота прохождения пакетов** — ещё один важный параметр:
- Интервалы между пакетами;
- Регулярность или нерегулярность этих интервалов;
- Всплески активности и паузы.
Голосовые вызовы, например, генерируют поток пакетов с **регулярными короткими интервалами**, тогда как обмен текстовыми сообщениями создаёт **нерегулярный** трафик с длительными паузами.
### 23.1.3. Ключевые слова и паттерны внутри пакетов
DPI-движок также анализирует **содержимое пакетов** — ищет характерные ключевые слова, последовательности байтов и структурные паттерны:
- Специфичные заголовки и поля протокола;
- Характерные байтовые последовательности (сигнатуры);
- Структура данных внутри пакета (порядок полей, длины полей).
Помимо очевидных параметров (source/destination IP, порты), анализируются **менее очевидные** признаки, которые в совокупности позволяют отнести сессию к конкретному протоколу.
### 23.1.4. Особенности анализа шифрованного трафика
Шифрованный трафик представляет **особую сложность** для распознавания:
- Содержимое пакетов зашифровано — нет очевидных полей, указывающих на протокол;
- Ключевые слова и сигнатуры **недоступны** для анализа;
- Распознавание выполняется **исключительно косвенными методами** — по размерам пакетов, частоте, вариациям и другим статистическим параметрам.
Для распознавания шифрованных протоколов (например, Telegram) используется **многофакторный анализ** — математическая модель, которая на основе совокупности косвенных признаков делает вывод о принадлежности сессии к конкретному протоколу. Конкретные алгоритмы и математика этого анализа являются внутренней разработкой и в открытом виде не раскрываются.
> **Принцип работы:** DPI-движок берёт сессию (не один пакет, а несколько пакетов в обоих направлениях), анализирует их по множеству параметров и принимает решение — например, «данный трафик в этой сессии — это Telegram» или «это WhatsApp».
## 23.2. Ложноположительные срабатывания
Многофакторный анализ **не является стопроцентным** — возможны **ложноположительные срабатывания** (false positives), когда один шифрованный трафик по тем же косвенным критериям ошибочно распознаётся как другой протокол.
Причины ложноположительных срабатываний:
| Причина | Описание |
| -------------------------------------- | ----------------------------------------------------------------- |
| **Похожие профили трафика** | Разные протоколы могут генерировать трафик с похожими размерами пакетов и частотой |
| **Шифрование скрывает различия** | Без доступа к содержимому пакетов анализ опирается на меньше признаков |
| **Новые версии протоколов** | Обновления приложений могут изменить профиль трафика, сделав его похожим на другой протокол |
**Последствия ложного срабатывания:** если фильтр ошибочно распознал легитимный трафик как блокируемый протокол и сразу заблокировал его — пользователь потеряет доступ к полезному ресурсу. Именно поэтому прямая блокировка по результатам DPI на фильтре **не применяется** для протоколов — вместо этого используется двухстадийная схема.
## 23.3. Двухстадийная блокировка: распознавание → очистка в ЦСУ → блокировка
Для минимизации ложноположительных срабатываний блокировка протоколов выполняется **в два этапа** (подробная схема — в [разделе 8](08.md)):
```text
┌─────────────────────────────────────────────────────────────────┐
│ Этап 1: Распознавание (фильтр) │
│ │
│ • DPI-движок анализирует сессию │
│ • Определяет протокол (Telegram, WhatsApp, ...) │
│ • Результат записывается в лог │
│ • Трафик НЕ БЛОКИРУЕТСЯ (behavior: ignore) │
│ • Логи отправляются на SPFS → ЦСУ │
└──────────────────────────┬──────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Очистка (ЦСУ) │
│ │
│ • Сбор логов со ВСЕХ площадок (~350 площадок, ~5000 устройств)│
│ • Сопоставление сессий с разных фильтров │
│ • Глубокий статистический анализ │
│ • Обогащение данных сторонней информацией │
│ • Формирование очищенных списков (IP + порт) │
│ • Вероятность ложного срабатывания — крайне низка │
└──────────────────────────┬──────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Этап 2: Блокировка (фильтр / Eco Highway) │
│ │
│ • Очищенные списки загружаются на фильтры (HTTP) │
│ и на Eco Highway (BGP) │
│ • Загрузка в ОТДЕЛЬНЫЙ DPI-лист (не тот, где распознавание) │
│ • На этом DPI-листе: behavior: block │
│ • Блокировка по проверенным адресам │
└─────────────────────────────────────────────────────────────────┘
```
### Разделение DPI-листов
На одном фильтре **одновременно работают два процесса**:
| DPI-лист | Behavior | Назначение |
| --------------------- | ----------- | --------------------------------------------------- |
| DPI-лист 0 | **ignore** | Распознавание протоколов, запись логов, без блокировки |
| DPI-лист 5 (пример) | **block** | Блокировка по очищенным спискам из ЦСУ |
Таким образом, распознавание и блокировка выполняются **в разных DPI-листах** — это позволяет независимо управлять каждым процессом.
### Преимущества централизованного анализа
ЦСУ видит данные **со всех фильтров на всех площадках**, а не только с одного конкретного устройства. Это даёт принципиально **более полную картину**:
- Один фильтр видит только «свои» сессии — ЦСУ видит **все сессии** по всей стране;
- Статистический анализ на большой выборке **значительно точнее**;
- Возможность обогащения данных **сторонней информацией** повышает качество распознавания.
### Время полного цикла
От момента появления нового, ранее неизвестного сервера блокируемого протокола до его фактической блокировки проходит **от 5 до 15 минут** (подробнее — в [разделе 8.6](08.md)).
## 23.4. Обфускация и борьба с обходом блокировок
Обфускация — это намеренное изменение характеристик протокола, направленное на то, чтобы DPI-движок **не смог его распознать**. Это постоянная «гонка вооружений» между разработчиками средств обхода блокировок и разработчиками систем фильтрации.
### Принцип «ананасных мальчиков»
Борьба между системами обхода и системами блокировки описывается как **постоянное противостояние**: одна сторона в какой-то момент имеет преимущество, которое затем нивелируется следующим шагом противоположной стороны.
### Типы обфускации и возможности распознавания
| Тип обфускации | Возможность распознавания |
| ------------------------------------- | ------------------------------------------------------- |
| **Простая** (например, XOR) | Фильтр может «развернуть» обфускацию и распознать протокол |
| **Протокол притворяется другим** | Распознавание возможно, но требует разработки новых сигнатур и методик |
| **Качественная имитация другого протокола** | Распознать **невозможно** без разработки принципиально нового подхода |
### Обновление сигнатур
Когда обнаруживается, что новая версия приложения или протокола **перестала распознаваться** фильтром, это означает необходимость:
1. **Анализа изменений** — что именно изменилось в новой версии протокола;
2. **Разработки новой сигнатуры** — обновление правил распознавания для учёта изменений;
3. **Обновления прошивки** — доставка обновлённого DPI-движка на фильтры.
> **Практический подход:** к этому процессу следует относиться с пониманием — это нормальная и ожидаемая ситуация. Полное и постоянное распознавание всех протоколов **невозможно** в принципе. Задача системы — поддерживать актуальные сигнатуры и оперативно реагировать на изменения.
### Защита от ложных блокировок при борьбе с обфускацией
Двухстадийная система блокировки (раздел 23.3) особенно важна в контексте борьбы с обфускацией. Обфусцированный трафик **по определению** имеет нестандартный профиль, что повышает вероятность ложноположительного срабатывания. Централизованная очистка на ЦСУ снижает этот риск, сопоставляя данные с множества источников.
---
[← Оглавление](../README.md) · [← Раздел 22: Балансировщик: мониторинг и диагностика](22.md) · [Раздел 24: Траблшутинг →](24.md)

306
chapters/24.md Normal file
View File

@@ -0,0 +1,306 @@
# 24. Траблшутинг
[← Оглавление](../README.md) · [← Раздел 23: Распознавание протоколов (DPI Engine)](23.md)
---
Диагностика проблем на ТСПУ — комплексная задача, требующая понимания архитектуры системы, принципов прохождения трафика и взаимодействия компонентов. В данном разделе описаны типовые подходы к траблшутингу, которые применяются при обращениях операторов связи и абонентов.
## 24.1. Общий подход к диагностике проблем доступности
При обращении оператора или абонента с жалобой на недоступность ресурса необходимо последовательно пройти несколько шагов:
```text
1. Уточнить детали проблемы
2. Определить, есть ли проблема прямо сейчас (или была вчера)
3. Найти сессии абонента на фильтрах
4. Проверить ресурс в DPI-листах
5. Исключить ТСПУ как причину (bypass / No IP)
6. Локализовать проблему
```
### Шаг 1: Уточнение деталей
Всегда необходимо **выяснять подробности** у абонента или оператора. Формулировка «ресурс недоступен» может означать совершенно разные вещи:
| Жалоба абонента | Что это может означать на самом деле |
| ---------------------------- | --------------------------------------------------------- |
| «Сайт не открывается» | Полная блокировка, ошибка DNS, проблема на стороне сервера |
| «Всё тормозит» | Деградация протокола, перегрузка канала, проблема на стороне оператора |
| «Часть сайта не работает» | Блокировка отдельных ресурсов (CDN, API), проблема с HTTPS |
| «Приложение не подключается»| Блокировка протокола, обновление приложения, проблема с обфускацией |
> **Статистика:** по опыту эксплуатации, примерно в **80% случаев** проблема связана **не с ТСПУ**, а с самим ресурсом, абонентом или оператором связи. Однако всегда необходимо проверять и исключать влияние ТСПУ.
### Шаг 2: Актуальность проблемы
**Диагностика постфактум крайне затруднена.** Если абонент сообщает о проблеме, которая была вчера, а сегодня её нет, — возможности анализа ограничены:
- Если сохранились **логи соединений** за нужный период — можно проанализировать, были ли сессии к проблемному ресурсу;
- Если логов нет — восстановить картину практически невозможно.
**Если проблема существует прямо сейчас** — шансы на успешную диагностику значительно выше. В этом случае важно работать **в реальном времени** совместно с абонентом или оператором.
## 24.2. Поиск сессии абонента: обход фильтров площадки
Первый практический шаг — **найти сессии** конкретного абонента к конкретному ресурсу на фильтрах площадки.
### Поиск по локальному адресу
Для поиска сессий используется команда `show session` с фильтрацией по локальному адресу абонента:
```text
> show session la <IP-адрес_абонента>:<порт> | more
```
Или для просмотра всех сессий абонента:
```text
> show session la <IP-адрес_абонента> | more
```
Для подсчёта количества сессий:
```text
> show session la <IP-адрес_абонента> | count
```
### Поиск по удалённому адресу
Если известен IP-адрес ресурса, к которому обращается абонент:
```text
> show session ra <IP-адрес_ресурса> | more
```
### Интерпретация результатов
| Результат | Интерпретация |
| -------------------------------------- | ---------------------------------------------------------- |
| Сессии **найдены** | Трафик абонента проходит через фильтр — ТСПУ его видит |
| Сессии **не найдены** | Трафик не проходит через данный фильтр — абонент идёт другим путём, либо проблема до ТСПУ |
| Сессии есть, но ресурс недоступен | Возможна блокировка на уровне DPI — проверить DPI-листы |
> **Важно:** при поиске сессий помните принцип «локальный адрес всегда на первом месте» (см. [раздел 12](12.md)). Независимо от направления трафика, IP-адрес абонента записывается в поле local. Если в поле local отображаются адреса, которые не являются абонентскими (интернет-адреса), — это признак перепутки LAN/WAN (см. раздел 24.6).
### Особенности при установке после CGNAT
Если ТСПУ установлен **после CGNAT** (см. [раздел 6.3](06.md)), на фильтре видны только белые (транслированные) адреса. Для идентификации конкретного абонента необходимо **взаимодействие с оператором** — оператор должен сообщить, в какие порты и IP-адреса абонент был транслирован.
## 24.3. Проверка ресурса в DPI-листах: `show dpi match`
Команда `show dpi match` позволяет проверить, находится ли конкретный ресурс в списках блокировки:
```text
# show dpi match <ресурс>
```
Где `<ресурс>` — это IP-адрес или URL.
Команда проверяет указанный ресурс **по всем DPI-листам** и выводит информацию о совпадениях:
| Результат | Значение |
| ---------------------------------- | ------------------------------------------------------------ |
| Совпадение найдено в DPI-листе N | Ресурс присутствует в списке — указано, в каком именно DPI-листе и какое действие (block/ignore/redirect) |
| Совпадений не найдено | Ресурс отсутствует во всех DPI-листах — ТСПУ его не блокирует по спискам |
> **Примечание:** команда `show dpi match` может быть недоступна в старых версиях прошивки. В актуальных прошивках федерального проекта она присутствует.
### Проверка через ЦСУ
Если необходимо проверить наличие ресурса в списках, загруженных на **Eco Highway** (эшелонированная система), проверку следует выполнять **через центральную систему управления** — там хранятся все списки, загружаемые по BGP.
## 24.4. Программный байпас для исключения ТСПУ как причины проблемы
Один из ключевых методов диагностики — **исключение ТСПУ** из пути прохождения трафика, чтобы определить, является ли ТСПУ причиной проблемы.
### Программный bypass на балансировщике
Наиболее удобный способ — программный bypass на балансировщике (см. [раздел 22.7](22.md)):
```text
call balance-group <группа> software-bypass bypass
```
Преимущества:
- **Нет флапов линков** — оператор ничего не замечает;
- **Гранулярность** — можно байпасить отдельные filter groups;
- **Мгновенность** — переключение происходит немедленно.
### Bypass по правилам фильтрации (flow rules)
Альтернативный вариант — создать на балансировщике **временное правило** с action `bypass` для конкретного трафика:
```text
set filters main flows diag-bypass match vlan 0 id <номер_VLAN>
set filters main flows diag-bypass action bypass
set filters main flows diag-bypass priority 200
apply
```
Это позволяет исключить из обработки только **конкретный VLAN** или подсеть, не затрагивая остальной трафик. По статистике правила (пакеты/байты) можно убедиться, что трафик действительно проходит (см. [раздел 22.5](22.md)).
### Bypass на оптическом байпасе
Переключение оптического байпаса в режим bypass/TAP — более радикальный метод, который **вызывает флапы линков** у оператора. Используется в крайнем случае и, как правило, требует согласования с оператором.
### Интерпретация результатов
| После bypass | Интерпретация |
| -------------------------------- | ------------------------------------------------------------ |
| Проблема **исчезла** | ТСПУ являлось причиной — диагностировать дальше на уровне фильтров/DPI |
| Проблема **осталась** | ТСПУ не является причиной — проблема на стороне ресурса, оператора или абонента |
## 24.5. Исключение абонента из обработки: параметр No IP
Для точечной диагностики на уровне **конкретного абонента** используется параметр **No IP** в настройках DPI-листа (см. [раздел 17.4.8](17.md)).
### No IP (исключение по локальному адресу)
Параметр `No IP` исключает **локальный адрес абонента** из обработки конкретным DPI-листом:
```text
# system dpi lists <N> no-ip <IP-адрес_абонента>
# apply
```
Это означает, что трафик данного абонента будет проходить через фильтр, но **конкретный DPI-лист** не будет его обрабатывать.
### No IP Remote (исключение по удалённому адресу)
Параметр `No IP Remote` исключает **удалённый IP-адрес** (адрес сервера/ресурса) из обработки:
```text
# system dpi lists <N> no-ip-remote <IP-адрес_ресурса>
# apply
```
### Диагностический алгоритм
```text
1. Добавить абонента в No IP конкретного DPI-листа
2. Применить конфигурацию (apply)
3. Попросить абонента повторить действие
┌──────┴──────┐
│ │
▼ ▼
Проблема Проблема
исчезла осталась
│ │
▼ ▼
Данный Данный DPI-лист
DPI-лист НЕ влияет на
ВЛИЯЕТ на абонента —
абонента проверить
другие листы
```
> **Приоритет:** параметр `No IP` имеет **приоритет** над параметром `IP`. Если адрес указан и в No IP (исключение), и в IP (включение), сработает **исключение** — адрес не будет обрабатываться.
### Возврат после диагностики
После завершения диагностики необходимо **удалить** добавленные записи No IP и применить конфигурацию.
## 24.6. Перепутки LAN/WAN и их диагностика
**Перепутка LAN/WAN** — ситуация, когда порты LAN и WAN подключены **наоборот**: LAN-порт подключён в сторону интернета, а WAN-порт — в сторону абонентов.
### Как распознать перепутку
Основной признак — при просмотре сессий на фильтре в поле **local** отображаются адреса, которые **не являются абонентскими**:
- Вместо серых (приватных) абонентских адресов в local видны белые интернет-адреса;
- Направление сессий (Egress/Ingress) не соответствует ожидаемому.
Это происходит потому, что фильтр определяет направление трафика по портам: трафик, приходящий в LAN-порт, считается абонентским, а source IP записывается как local. Если LAN и WAN перепутаны, source IP интернет-хоста ошибочно записывается как local.
> **Ключевой принцип:** локальный (абонентский) IP-адрес **всегда записывается на первое место** в сессии (см. [раздел 12.5](12.md)). Если на первом месте оказался интернет-адрес — порты перепутаны.
### Где может произойти перепутка
| Место | Описание |
| ------------------------------ | ----------------------------------------------------------- |
| **На байпасе** | Кабели LAN и WAN подключены к неправильным портам байпаса |
| **На балансировщике** | Порты в линке назначены неверно (LAN вместо WAN и наоборот) |
| **На коммутаторе оператора** | Кабели между оператором и байпасом подключены неверно |
### Последствия перепутки
При перепутке LAN/WAN:
- Фильтр **некорректно определяет направление** трафика;
- DPI-обработка может работать **неправильно** (блокировка не того, что нужно);
- Сессии и трансляции формируются **неверно**;
- Connection logging записывает **некорректные данные**.
### Диагностика
1. Выполнить `show session` и проверить поле local — должны быть абонентские (серые) адреса;
2. Если в local видны белые адреса — вероятна перепутка;
3. Проверить физическое подключение кабелей;
4. Проверить конфигурацию линков на балансировщике.
## 24.7. Взаимодействие с оператором связи
Эффективная диагностика часто требует **совместной работы** с оператором связи и конечным абонентом:
### Когда необходимо взаимодействие
| Ситуация | Что нужно от оператора/абонента |
| ------------------------------------------ | -------------------------------------------------------- |
| Проблема существует **прямо сейчас** | Абонент генерирует трафик, а инженер ТСПУ анализирует сессии в реальном времени |
| ТСПУ установлен **после CGNAT** | Оператор сообщает транслированные адреса для поиска сессий |
| Проблема с **конкретным ресурсом** | Абонент уточняет URL, IP-адрес, порт, тип приложения |
| Подозрение на проблему **на стороне оператора** | Оператор проверяет свою часть сети (маршрутизация, CGNAT, BRAS) |
### Рекомендации по взаимодействию
**С корпоративными клиентами:** как правило, корпоративные клиенты заинтересованы в решении проблемы и готовы к сотрудничеству — совместному моделированию ситуации в реальном времени. Это наиболее эффективный сценарий диагностики.
**С частными абонентами:** частный абонент, столкнувшийся с проблемой, может просто уйти и не возвращаться к ресурсу. Диагностика постфактум без сохранённых логов практически невозможна.
**С оператором:** при переключениях bypass/primary необходимо **согласовывать работы** с оператором, так как переключение оптического байпаса вызывает флапы линков. Программный bypass на балансировщике не требует такого согласования.
## 24.8. Ограничения: L2-устройство, невозможность генерации трафика с фильтра
Фильтр ТСПУ — это устройство **уровня L2** (Layer 2). Это накладывает принципиальные ограничения на возможности диагностики:
### Невозможность генерации трафика
На фильтре **нет IP-интерфейсов** в data plane, с которых можно было бы инициировать трафик. Это означает:
- **Невозможно** отправить тестовый пакет «от имени абонента» через фильтр;
- **Невозможно** «скрафтить» пакет с заданными source/destination и пропустить его через DPI;
- **Невозможно** повторить ситуацию абонента изнутри фильтра.
> **Ping и traceroute** доступны на фильтре, но они работают через **management-интерфейс**, а не через data plane. Ping позволяет проверить связь management-интерфейса со шлюзом или с внешними хостами (если есть маршрутизация), но **не моделирует** прохождение абонентского трафика через фильтр.
### Невозможность перехвата трафика
Фильтр не может захватить копию трафика (аналог tcpdump) — он только обрабатывает пакеты, проходящие через него, и предоставляет **агрегированную статистику** (сессии, счётчики, DPI-состояние).
### Практические следствия
| Что **можно** сделать | Что **нельзя** сделать |
| -------------------------------------------- | ---------------------------------------------------- |
| Найти сессии абонента (`show session`) | Сгенерировать тестовый трафик через data plane |
| Проверить ресурс в DPI-листах (`show dpi match`) | Захватить дамп трафика (tcpdump) |
| Исключить абонента из обработки (No IP) | Повторить проблему абонента изнутри фильтра |
| Включить программный bypass | Инициировать соединение к ресурсу через фильтр |
| Посмотреть статистику и счётчики | Проанализировать содержимое конкретного пакета |
| Ping/traceroute через management-интерфейс | Ping/traceroute через data plane |
Именно поэтому для эффективной диагностики часто необходимо **совместное моделирование** ситуации в реальном времени: абонент генерирует трафик, а инженер ТСПУ анализирует, как этот трафик проходит через систему.
---
[← Оглавление](../README.md) · [← Раздел 23: Распознавание протоколов (DPI Engine)](23.md)