Перехват системного трафика

Как увести на порт трафик программы или всей машины, не настраивая прокси в приложении: привилегированная служба, её установка, управление из трея и поля API.

Что такое перехват

Обычный порт BlankTrail Proxy — это прокси: приложение должно знать его адрес и уметь через него ходить. Перехват решает обратную задачу — увести трафик на порт средствами самой системы, ничего не настраивая в приложении. Так работают программы, у которых настроек прокси нет вовсе.

Для этого нужна привилегированная служба Windows: сам продукт работает без прав администратора и менять маршрутизацию машины не может. Служба называется BlankTrailNetHelper, ставится отдельно и управляется из меню в трее.

ВниманиеОбласть перехвата по умолчанию — ВСЯ СИСТЕМА, а не выбранные программы. Порт, открытый с intercept без явного intercept_scope, уводит на себя весь трафик машины, включая удалённый рабочий стол и средства управления. Если вам нужны отдельные программы, задавайте scope «process» явно.

Что служба делает с машиной

Пока ни один порт не просит перехвата, служба ничего не меняет: она зарегистрирована и ждёт. Изменения появляются только когда открыт порт с перехватом, и снимаются, когда он закрыт.

  • Поднимает виртуальный сетевой адаптер (драйвер Wintun) и назначает ему адрес.
  • Добавляет два маршрута — 0.0.0.0/1 и 128.0.0.0/1. Вместе они перекрывают маршрут по умолчанию, НЕ удаляя его: чужой маршрут остаётся на месте и возвращается в дело, как только перехват снят.
  • Объявляет на этом адаптере свой резолвер DNS. Без этого имена продолжал бы видеть ваш провайдер, даже когда сам трафик уходит через выход прокси.
ВниманиеЗахват перекрывает только IPv4. Если у машины есть живой глобальный адрес IPv6 — его обычно выдаёт провайдер или домашний маршрутизатор, — служба отказывает в захвате ЦЕЛИКОМ, и в области system, и в области process, причём отказывает до первой правки сети. Выглядит это так: порт открывается, а перехвата нет; в карточке порта intercept_state становится degraded, а intercept_reason называет причину прямо. Лечится отключением IPv6 на сетевом адаптере машины, а не переустановкой службы, не сменой учётной записи и не переустановкой продукта. По той же причине отказывает и старт аудита утечек — кодом ipv6_present.
ПримечаниеСлужба обслуживает одну копию продукта за раз. Если запущены две копии BlankTrail Proxy, вторая получит отказ с кодом busy — это не конфликт с посторонним VPN или антивирусом, а именно ваша вторая копия. Закройте лишнюю.

Управлять перехватом может только та учётная запись Windows, из-под которой продукт устанавливали: канал управления службой открыт её владельцу, администраторам и SYSTEM. На машине с несколькими учётными записями второй пользователь увидит «служба не отвечает», хотя служба работает.

Когда служба устанавливается

  1. Во время установки продукта на странице задач есть пункт «Перехват трафика на уровне системы». Он регистрирует службу.
  2. Пункт виден ТОЛЬКО при установке «для всех пользователей». При установке для себя его нет вовсе — и это защита, а не недосмотр: продукт, установленный в свой профиль, лежит там, куда вы можете писать, а служба с автозапуском под SYSTEM на такой путь была бы готовым способом поднять права.
  3. Регистрация требует подтверждения администратора. Если отказаться, установка продолжится, а перехват останется недоступным — поставить службу можно позже из меню в трее.
ПримечаниеПри обновлении продукта служба перерегистрируется сама, если она стояла раньше, — иначе перехват тихо отваливался бы после каждого обновления. Снимается она при удалении продукта.
  • При обновлении продукта служба перерегистрируется, если стояла раньше, — даже если галку не трогали.
  • При удалении продукта снятие службы запрашивает права администратора ОТДЕЛЬНЫМ окном. Если в нём отказать, продукт удалится, а служба останется в системе — снять её потом можно, поставив продукт заново и удалив с подтверждением.

🔴 В административной установке этот пункт ОТМЕЧЕН заранее: администратор, который просто нажимает «Далее», регистрирует службу. Чтобы её не ставить, галку надо снять руками — установка от этого не прервётся, просто перехват останется недоступным до тех пор, пока службу не поставят из меню трея.

Управление из трея

В меню значка в трее есть группа «TUN helper». Её заголовок показывает состояние службы, а подпункты — то, что в этом состоянии имеет смысл. Состояние перечитывается каждые три секунды, поэтому упавшую или поднятую снаружи службу меню замечает само.

СостояниеЧто оно значитЧто доступно
не установленаСлужбы в системе нет.Установить
остановленаСлужба зарегистрирована, но не работает.Запустить
работаетСлужба готова принимать правила перехвата.Остановить, Перезапустить
приостановленаСлужба приостановлена диспетчером.Остановить, Перезапустить
запускается / останавливаетсяПереходное состояние: заявка принята, диспетчер её выполняет.Ничего — дождитесь окончания.
состояние неизвестноДиспетчер служб не ответил. Обычно это значит, что опрос не удался, а не что службы нет.Ничего.
ВниманиеКаждое из четырёх действий поднимает права: Windows покажет запрос администратора. Если закрыть его, ничего не произойдёт и ошибки не будет — меню останется прежним, а служба не запустится. Это ожидаемо: отказ от повышения прав не считается сбоем.

Кто может управлять перехватом

Канал управления службой открыт SYSTEM, администраторам машины и ТОЙ учётной записи, из-под которой службу ставили. Владелец записывается в момент регистрации службы.

ВниманиеОтсюда неочевидное следствие на машине с несколькими учётными записями и на терминальном сервере: второй пользователь запускает тот же продукт и видит «служба не отвечает» (код unreachable), хотя служба работает и первому пользователю подчиняется. Лечится переустановкой службы из-под нужной учётной записи — пунктом «Установить» в группе «TUN helper» меню трея.

Две области перехвата

ОбластьЧто попадает на портОграничения
systemВесь трафик машины. Это значение по умолчанию.Такую область может держать только ОДИН порт: второй получит отказ «системный перехват уже занят другим портом».
processТолько трафик перечисленных программ (intercept_apps — пути к исполняемым файлам).Одну программу может перехватывать только один порт. Сторожа обрыва выхода в этом режиме нет: при пропаже выхода страдает одно приложение, а не вся машина.
ПримечаниеПриложение, которое закрепляет сертификат сайтов (certificate pinning), на попроцессном порте перестанет работать: такой порт завершает TLS на себе и устанавливает соединение заново. Это следствие устройства, а не поломка.

Порт с перехватом

Такой порт НЕ слушает как прокси: снаружи на его номер подключиться нельзя, единственный вход — туннель. Приложение, которому вы вручную пропишете этот адрес прокси, получит отказ соединения; и наоборот, оставленная ручная настройка прокси уведёт приложение мимо перехвата.

Перехват нельзя включить, выключить или перенастроить у уже открытого порта — попытка отвечает 400. Закройте порт и откройте заново с нужными полями.

Состояние портаЧто означает
activeПравило принято службой, трафик идёт на порт.
degradedПорт открыт, но правило перехвата не встало: перехвата фактически нет. Самая частая причина — живой глобальный IPv6 у машины: захват перекрывает только IPv4 и отказывает целиком. Далее — недоступная или занятая служба. Точную причину называет поле intercept_reason.
releasedПравило снято — например, порт закрывается.
ПримечаниеЕсли выход недоступен подряд десять минут, сторож снимает перехват сам и возвращает трафик машине: без этого потерянный выход означал бы машину без сети. На простаивающей машине проверка редкая, поэтому на деле снятие занимает до пятнадцати минут. В попроцессном режиме сторожа нет.

Перехват через API

Доступность перехвата спрашивают у GET /api/v1/system/intercept, а список программ для области process — у GET /api/v1/system/processes; обе карточки со всеми полями и примерами лежат в справочнике API.

Поле code предназначено программе и не меняется, reason — человеку и меняться может. Значения code:

codeЧто случилосьЧто делать
offСборка или платформа перехват не поддерживает.Перехват доступен на Windows.
not_installedДиспетчер служб ответил, что службы нет.Установите её из группы «TUN helper» в трее или переустановите продукт для всех пользователей.
unreachableСлужба не отвечает на канал управления.Проверьте, что она запущена, и что вы работаете под той учётной записью, из-под которой ставили продукт.
busyСлужба жива, но каналом управления уже владеет другая копия продукта.Закройте вторую копию BlankTrail Proxy.

Сам перехват включается ПРИ ОТКРЫТИИ порта тремя полями тела POST /api/v1/ports/open:

ПараметрТипОбязательныйОписание
interceptboolНетВключить перехват для этого порта. По умолчанию выключено.
intercept_scopestringНет«system» — весь трафик машины, «process» — только перечисленные программы. Пустое значение равно «system».
intercept_appsstring[]НетПути к исполняемым файлам для scope «process».
Пример (curl)
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 — состояние правила и причина, если оно не поднялось.