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

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

192 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)