16 KiB
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
Логика жизненного цикла:
- Проходит первый пакет нового соединения → создаётся трансляция и одновременно с ней первая сессия;
- Если с того же локального адреса и порта устанавливаются соединения к другим ресурсам → создаются новые сессии в рамках той же трансляции;
- Сессии удаляются индивидуально по своим тайм-аутам;
- Трансляция удаляется только после того, как умерла последняя сессия в её рамках.
Пример: один абонентский порт может иметь одну трансляцию и сотни связанных сессий к различным ресурсам.
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 →