Files
tspu-docs/chapters/12.md
Daniel Lavrushin 10fb7f4e18 Добавлены новые разделы:
- Раздел 22: Балансировщик: мониторинг и диагностика
- Раздел 23: Распознавание протоколов (DPI Engine)
- Раздел 24: Траблшутинг

Каждый раздел включает команды, описания и практические примеры для диагностики и мониторинга работы балансировщика и системы фильтрации.
2026-02-20 13:59:30 +01:00

16 KiB
Raw Permalink Blame History

12. Сессии и трансляции на фильтре

← Оглавление · ← Раздел 11: Фильтр: аппаратная платформа


12.1. Понятие сессии: local IP:port + global IP:port + remote IP:port

Вся обработка трафика на фильтре построена на понятии сессии. Сессия — это запись, описывающая конкретное соединение между абонентом и удалённым ресурсом. Каждая сессия содержит следующие поля:

    <направление> <протокол> <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-пула:

    <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 в принципе отсутствует.
    Режим с 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). На практике это означает, что команды фильтрации с ключевым словом global в нашем проекте не имеют большого смысла — достаточно использовать local и remote.

12.4. Направление сессии: Egress (от абонента) / Ingress (к абоненту)

Каждая сессия имеет направление, которое определяется по первому пакету, создавшему эту сессию:

Направление Первый пакет пришёл со стороны Значение
Egress LAN-порт (абонент) Абонент инициировал соединение
Ingress WAN-порт (интернет) Соединение инициировано извне

Направление фиксируется один раз в момент создания сессии и больше не меняется. Никакого другого смысла, кроме указания стороны первого пакета, у направления нет.

Типичный сценарий: абонент открывает веб-страницу — первый SYN-пакет приходит со стороны LAN, сессия создаётся как Egress. Если же к абоненту приходит входящее соединение из интернета — первый пакет приходит со стороны WAN, сессия создаётся как Ingress.

12.5. Принцип: локальный IP абонента всегда на первом месте

Независимо от направления трафика, фильтр всегда записывает локальный IP-адрес абонента в поле Local IP — первое поле адресов в сессии:

    Пакет от абонента (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).

12.6. Связь трансляций и сессий: одна трансляция — много сессий

В рамках одной трансляции может существовать несколько сессий:

    Трансляция (одна):
    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):

  • Тайм-аут сессии — время с момента последнего пакета, после которого сессия удаляется;
  • Тайм-аут трансляции — время с момента удаления последней связанной сессии, после которого удаляется сама трансляция.

Параметры тайм-аутов устанавливаются в секции 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-операторы можно комбинировать последовательно. Пример:

    show session local 10.0.0.1 | include 6881 | count

Эта команда выведет количество сессий абонента 10.0.0.1, в которых присутствует порт 6881 (характерный для BitTorrent).

Удалённый доступ к сессиям

API для удалённого доступа к данным фильтра отсутствует. Однако можно получить информацию удалённо через SSH-команду:

    ssh admin@<IP-фильтра> "show session local 10.0.0.1"

Соединение с фильтром устанавливается, команда выполняется, результат возвращается на терминал. Дальнейшая обработка выполняется средствами операционной системы (bash-скрипты, grep и т.д.). Внутренние pipe-операторы фильтра при удалённом вызове через SSH могут не работать — в этом случае следует использовать внешние средства обработки вывода.


← Оглавление · ← Раздел 11: Фильтр: аппаратная платформа · Раздел 13: Фильтр: первоначальная настройка и CLI →