- Раздел 22: Балансировщик: мониторинг и диагностика - Раздел 23: Распознавание протоколов (DPI Engine) - Раздел 24: Траблшутинг Каждый раздел включает команды, описания и практические примеры для диагностики и мониторинга работы балансировщика и системы фильтрации.
192 lines
16 KiB
Markdown
192 lines
16 KiB
Markdown
# 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)
|