Инспектор трафика

Инспектор сохраняет разрешённые политикой захвата сведения о запросах через туннель и показывает их владельцу в дашборде.

Описание

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

Инспектор HTTP-трафика сохраняет события HTTP/HTTPS-запросов, прошедших через туннель: метод, путь, код ответа, длительность и доступные по правилам захвата заголовки и тело. Владелец туннеля просматривает журнал в дашборде, открывает отдельное событие и при необходимости повторяет запрос с безопасными ограничениями на путь и заголовки.

Для события также определяется IP клиента. Заголовки переадресации учитываются только тогда, когда запрос пришёл через настроенный доверенный промежуточный сервер. В остальных случаях Инспектор показывает адрес прямого соединения. Чтобы адрес не повторялся на каждом небольшом экране, мобильные карточки и компактный список его не показывают. На широком экране он доступен в подробном списке, а у выбранного события — отдельной строкой IP клиента.

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

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

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

Когда запрос проходит через публичный адрес туннеля, сервис определяет адрес клиента, проверяет правила доверия к промежуточному серверу и сохраняет событие Инспектора. Если адрес клиента передал доверенный посредник, порт соединения посредника не приписывается клиенту. Если доверенного посредника нет или заголовок содержит некорректный адрес, используется адрес прямого соединения.

Список и карточки получают те же данные события, но показывают их с разной плотностью. Подробный вид подходит для сравнения, а выбранное событие содержит одну основную строку IP клиента. Сохранённые заголовки переадресации остаются в разделе заголовков запроса и не подменяют эту строку. Доступ к списку и деталям проверяется по учётной записи и туннелю. Перед повтором запроса сервис отдельно проверяет допустимые изменения пути, заголовков и тела.

Справочник API

Список событий

GET /api/v1/inspector/events

Параметры (имена уточняйте по ответу сервера): tunnel_id, фильтры времени, пагинация limit / offset или курсор.

Ответ: JSON со списком событий и метаданными пагинации.

IP клиента
  • source_ip — определённый сервисом IP клиента. Имя поля сохраняется для новых и ранее записанных событий.
  • source_port — порт прямого соединения, если он был корректно определён. Для адреса, полученного от доверенного промежуточного сервера, поле отсутствует или равно null: порт такого соединения принадлежит посреднику, а не клиенту.
  • Заголовки X-Forwarded-For и X-Real-IP, если они попали в захват, остаются отдельными элементами списка заголовков запроса. Они не заменяют source_ip и сами по себе не означают, что сервис им доверял.

Фильтр по IP клиента в дополнении «Расширенный журнал инспектора» продолжает передавать параметр source_ip.

Одно событие

GET /api/v1/inspector/events/{id}

id должен быть URL-encoded в клиенте.

Поток SSE

GET /api/v1/inspector/events/stream?tunnel_id=...

Подписка на новые события; tunnel_id в query также передавать в закодированном виде при необходимости.

Повтор запроса

POST /api/v1/inspector/events/{eventId}/replay

Тело JSON: { "mode": "cloud" | "local", "overrides": { ... опционально } }.

  • cloud — повтор выполняется на сервере Fortunnels и уходит через публичный edge туннеля (как внешний клиент). Подходит для проверки маршрута end-to-end на fortunnels.ru.
  • local — повтор отправляется непосредственно в настроенную цель туннеля без нового внешнего обращения к публичному адресу.

Поля overrides (правки метода, пути, заголовков и тела) ограничены сервером: нельзя подставить абсолютный URL в path, запрещённые заголовки и слишком большое тело (лимит порядка десятков килобайт).

Ошибки

401 Unauthorized

Нет сессии или токена для инспектора (в боевом режиме).

403 Forbidden

Нет доступа к туннелю события.

400 Bad Request

Некорректные параметры списка или недопустимые правки запроса при повторе (путь, заголовки, размер тела).

404 Not Found

Событие не найдено или недоступно.

503 Service Unavailable

Инспектор отключён или хранилище недоступно.

Ограничения

  • Захват может не включать полное тело запроса/ответа или маскировать чувствительные поля по политике сервера.
  • Повтор запроса не гарантирует идентичный побочный эффект на бэкенде; использовать только на тестовых стендах с осторожностью.
  • Большие журналы требуют фильтрации по времени и туннелю.
  • В dev-режиме сервера правила аутентификации к инспектору могут быть слабее, чем в продакшене.