Yandex Metrika

TCP Traffic Inspector

Описание

Общее описание функционала

Инспектор TCP-трафика даёт владельцу TCP-туннеля просматривать историю TCP-соединений, проходящих через туннель: адреса клиента и цели, длительность, объём трафика, состояние завершения и при необходимости укороченный захват потока в текстовом или шестнадцатеричном виде. Данные доступны в дашборде на странице инспектора туннеля (вкладка TCP) и через API с поддержкой потоковой подписки (SSE) для живых обновлений.

Как пользователь может использовать

  • Разработчик отлаивает нестабильное TCP-приложение: открывает инспектор, сортирует соединения по времени, находит обрывы и ошибки.
  • Пользователь проверяет, что внешний клиент действительно доходит до указанного целевого адреса, сверяя IP и порты в списке.
  • Пользователь переключает отображение текст/hex для просмотра коротких текстовых протоколов поверх TCP.
  • Пользователь фильтрует соединения по состоянию (активные, закрытые, ошибка) для фокуса на проблемных сессиях.
  • Администратор при поддержке пользователя просматривает те же метаданные в рамках полномочий продукта.
  • Инженер подписывается на SSE-поток, чтобы видеть новые соединения в реальном времени во время теста.

Как это реализовано в сервисе

При установке и закрытии TCP-соединения через туннель сервис фиксирует событие и сохраняет его в базе вместе с ограниченным объёмом перехваченных байт. Запросы из интерфейса дашборда или API проходят проверку владельца туннеля (или права администратора), затем возвращают страницу списка или одну запись. Поток событий рассылает новые записи подписчикам; частота опроса ограничивается лимитами сервера. В публичном развёртывании инспектор доступен только при корректной аутентификации и настройке режима работы, отличного от небезопасной отладочной конфигурации.

Справочник API

Список соединений

GET /api/v1/inspector/tcp/connections

Параметры:

  • tunnel_id (обязательный) — ID туннеля
  • from — начало периода (RFC3339)
  • to — конец периода (RFC3339)
  • state — фильтр по состоянию: active, closed, error
  • limit — лимит (по умолчанию 50)
  • offset — смещение

Ответ: { "connections": [...], "pagination": { "limit", "offset", "count", "has_more" } }

Получение соединения

GET /api/v1/inspector/tcp/connections/:id

Параметры:

  • format — text | hex (опционально, для формата stream_capture)

Ответ: объект TCPConnectionEvent с полями id, tunnel_id, client_ip, client_port, target_addr, started_at, ended_at, duration_ms, bytes_in, bytes_out, state, error_msg, stream_capture / stream_capture_text / stream_capture_hex

SSE-поток

GET /api/v1/inspector/tcp/connections/stream?tunnel_id=...

События: { "type": "tcp_connection", "data": TCPConnectionEvent }

Ошибки

Справочник ошибок

| Код | Сообщение | Условие |

|-----|-----------|---------|

| 401 | Unauthorized | Отсутствует или недействительна авторизация |

| 403 | Forbidden | Пользователь не имеет доступа к туннелю |

| 404 | TCP connection not found | Соединение не найдено |

| 503 | Service Unavailable | Сервис инспектора недоступен |

Ограничения

Известные ограничения

  • Захват потока ограничен (по умолчанию 32 КБ на соединение)
  • Guest-пользователи не имеют доступа к TCP-инспектору
  • Клиентский IP в dataplane-пути может быть недоступен (отображается как «dataplane»)
  • Отображение потока в текстовом формате может содержать замены для невалидного UTF-8

Риски конфигурации

  • tls_insecure_skip_verify: При создании/изменении HTTPS-туннелей можно отключить проверку TLS-сертификата бэкенда. Это делает трафик уязвимым к MITM. Использовать только для доверенных внутренних целей (localhost, dev-сертификаты). Никогда не включать для ненадёжных или публичных бэкендов.