Перехват системного трафика
Как увести на порт трафик программы или всей машины, не настраивая прокси в приложении: привилегированная служба, её установка, управление из трея и поля API.
Что такое перехват
Обычный порт BlankTrail Proxy — это прокси: приложение должно знать его адрес и уметь через него ходить. Перехват решает обратную задачу — увести трафик на порт средствами самой системы, ничего не настраивая в приложении. Так работают программы, у которых настроек прокси нет вовсе.
Для этого нужна привилегированная служба Windows: сам продукт работает без прав администратора и менять маршрутизацию машины не может. Служба называется BlankTrailNetHelper, ставится отдельно и управляется из меню в трее.
Что служба делает с машиной
Пока ни один порт не просит перехвата, служба ничего не меняет: она зарегистрирована и ждёт. Изменения появляются только когда открыт порт с перехватом, и снимаются, когда он закрыт.
- Поднимает виртуальный сетевой адаптер (драйвер Wintun) и назначает ему адрес.
- Добавляет два маршрута — 0.0.0.0/1 и 128.0.0.0/1. Вместе они перекрывают маршрут по умолчанию, НЕ удаляя его: чужой маршрут остаётся на месте и возвращается в дело, как только перехват снят.
- Объявляет на этом адаптере свой резолвер DNS. Без этого имена продолжал бы видеть ваш провайдер, даже когда сам трафик уходит через выход прокси.
Управлять перехватом может только та учётная запись Windows, из-под которой продукт устанавливали: канал управления службой открыт её владельцу, администраторам и SYSTEM. На машине с несколькими учётными записями второй пользователь увидит «служба не отвечает», хотя служба работает.
Когда служба устанавливается
- Во время установки продукта на странице задач есть пункт «Перехват трафика на уровне системы». Он регистрирует службу.
- Пункт виден ТОЛЬКО при установке «для всех пользователей». При установке для себя его нет вовсе — и это защита, а не недосмотр: продукт, установленный в свой профиль, лежит там, куда вы можете писать, а служба с автозапуском под SYSTEM на такой путь была бы готовым способом поднять права.
- Регистрация требует подтверждения администратора. Если отказаться, установка продолжится, а перехват останется недоступным — поставить службу можно позже из меню в трее.
- При обновлении продукта служба перерегистрируется, если стояла раньше, — даже если галку не трогали.
- При удалении продукта снятие службы запрашивает права администратора ОТДЕЛЬНЫМ окном. Если в нём отказать, продукт удалится, а служба останется в системе — снять её потом можно, поставив продукт заново и удалив с подтверждением.
🔴 В административной установке этот пункт ОТМЕЧЕН заранее: администратор, который просто нажимает «Далее», регистрирует службу. Чтобы её не ставить, галку надо снять руками — установка от этого не прервётся, просто перехват останется недоступным до тех пор, пока службу не поставят из меню трея.
Управление из трея
В меню значка в трее есть группа «TUN helper». Её заголовок показывает состояние службы, а подпункты — то, что в этом состоянии имеет смысл. Состояние перечитывается каждые три секунды, поэтому упавшую или поднятую снаружи службу меню замечает само.
| Состояние | Что оно значит | Что доступно |
|---|---|---|
| не установлена | Службы в системе нет. | Установить |
| остановлена | Служба зарегистрирована, но не работает. | Запустить |
| работает | Служба готова принимать правила перехвата. | Остановить, Перезапустить |
| приостановлена | Служба приостановлена диспетчером. | Остановить, Перезапустить |
| запускается / останавливается | Переходное состояние: заявка принята, диспетчер её выполняет. | Ничего — дождитесь окончания. |
| состояние неизвестно | Диспетчер служб не ответил. Обычно это значит, что опрос не удался, а не что службы нет. | Ничего. |
Кто может управлять перехватом
Канал управления службой открыт SYSTEM, администраторам машины и ТОЙ учётной записи, из-под которой службу ставили. Владелец записывается в момент регистрации службы.
Две области перехвата
| Область | Что попадает на порт | Ограничения |
|---|---|---|
system | Весь трафик машины. Это значение по умолчанию. | Такую область может держать только ОДИН порт: второй получит отказ «системный перехват уже занят другим портом». |
process | Только трафик перечисленных программ (intercept_apps — пути к исполняемым файлам). | Одну программу может перехватывать только один порт. Сторожа обрыва выхода в этом режиме нет: при пропаже выхода страдает одно приложение, а не вся машина. |
Порт с перехватом
Такой порт НЕ слушает как прокси: снаружи на его номер подключиться нельзя, единственный вход — туннель. Приложение, которому вы вручную пропишете этот адрес прокси, получит отказ соединения; и наоборот, оставленная ручная настройка прокси уведёт приложение мимо перехвата.
Перехват нельзя включить, выключить или перенастроить у уже открытого порта — попытка отвечает 400. Закройте порт и откройте заново с нужными полями.
| Состояние порта | Что означает |
|---|---|
active | Правило принято службой, трафик идёт на порт. |
degraded | Порт открыт, но правило перехвата не встало: перехвата фактически нет. Самая частая причина — живой глобальный IPv6 у машины: захват перекрывает только IPv4 и отказывает целиком. Далее — недоступная или занятая служба. Точную причину называет поле intercept_reason. |
released | Правило снято — например, порт закрывается. |
Перехват через API
Доступность перехвата спрашивают у GET /api/v1/system/intercept, а список программ для области process — у GET /api/v1/system/processes; обе карточки со всеми полями и примерами лежат в справочнике API.
- Справочник API — порты и трафикКарточки обеих системных ручек и все поля открытия порта.
Поле code предназначено программе и не меняется, reason — человеку и меняться может. Значения code:
| code | Что случилось | Что делать |
|---|---|---|
off | Сборка или платформа перехват не поддерживает. | Перехват доступен на Windows. |
not_installed | Диспетчер служб ответил, что службы нет. | Установите её из группы «TUN helper» в трее или переустановите продукт для всех пользователей. |
unreachable | Служба не отвечает на канал управления. | Проверьте, что она запущена, и что вы работаете под той учётной записью, из-под которой ставили продукт. |
busy | Служба жива, но каналом управления уже владеет другая копия продукта. | Закройте вторую копию BlankTrail Proxy. |
Сам перехват включается ПРИ ОТКРЫТИИ порта тремя полями тела POST /api/v1/ports/open:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
intercept | bool | Нет | Включить перехват для этого порта. По умолчанию выключено. |
intercept_scope | string | Нет | «system» — весь трафик машины, «process» — только перечисленные программы. Пустое значение равно «system». |
intercept_apps | string[] | Нет | Пути к исполняемым файлам для scope «process». |
curl -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"port":8080,"intercept":true,"intercept_scope":"process",
"intercept_apps":["C:/Program Files/MyApp/app.exe"]}' \
http://127.0.0.1:8891/api/v1/ports/open
Карточка порта (GET /api/v1/ports) возвращает эти же поля, а к ним intercept_state и intercept_reason — состояние правила и причина, если оно не поднялось.