# ProxyWarden ProxyWarden - это standalone Windows desktop-приложение для маршрутизации выбранных программ через SOCKS5-прокси. По сути это удобная оболочка управления над внешними компонентами: обязательным маршрутизатором приложений ProxiFyre и, опционально, локальным runtime `sing-box`. ProxyWarden сам не является VPN-драйвером, прокси-сервером или отдельным gateway/server. Он хранит настройки, показывает состояние компонентов, генерирует конфиги и запускает только явные действия пользователя: установить, запустить, остановить, удалить или применить конфиг. ## Главное - Работает как Windows-клиент: Tauri 2 + React/TypeScript UI + Rust backend. - Маршрутизирует не всю систему, а выбранные приложения: процесс, папку или конкретный `.exe`. - Не меняет глобальный proxy в Windows. - Для per-app routing нужен ProxiFyre. - Local sing-box нужен только для сценария с подпиской и локальным SOCKS5 endpoint. - Внешний SOCKS5-прокси работает без Local sing-box. - Применение профиля не устанавливает и не чинит компоненты скрыто. ## Из чего состоит | Компонент | Что это | Нужен когда | Откуда берется | | --- | --- | --- | --- | | ProxyWarden Control App | Окно управления, настройки, status/readiness, генерация конфигов | Всегда | Этот репозиторий | | [ProxiFyre](https://github.com/wiresock/proxifyre) | Windows-приложение/служба для перехвата трафика выбранных процессов и отправки его в SOCKS5 | Всегда для маршрутизации приложений | GitHub releases `wiresock/proxifyre` | | [Windows Packet Filter / NDISAPI](https://github.com/wiresock/ndisapi) | Сетевой драйвер, который нужен ProxiFyre | Устанавливается вместе с ProxiFyre, если отсутствует | GitHub releases `wiresock/ndisapi` | | [Microsoft Visual C++ Redistributable](https://learn.microsoft.com/cpp/windows/latest-supported-vc-redist) | Runtime-зависимость для `ProxiFyre.exe` | Устанавливается вместе с ProxiFyre, если отсутствует | Официальный `vc_redist` Microsoft | | [sing-box](https://github.com/SagerNet/sing-box) | Локальный proxy/VPN runtime, который слушает `127.0.0.1:1080` | Только для маршрута через subscription/выбранный сервер | GitHub releases `SagerNet/sing-box` | | [WinSW](https://github.com/winsw/winsw) | Wrapper, который запускает Local sing-box как Windows-службу | Только для Local sing-box | GitHub releases `winsw/winsw` | В UI и коде компонент ProxiFyre иногда проходит через внутренний id `proxyfier`. Это не отдельный продукт Proxifier; текущий backend adapter работает именно с ProxiFyre. ## Как идут маршруты Внешний SOCKS5-прокси: ```text выбранные приложения -> ProxiFyre -> внешний SOCKS5 proxy ``` Local sing-box: ```text выбранные приложения -> ProxiFyre -> Local sing-box 127.0.0.1:1080 -> выбранный сервер из подписки ``` Во втором сценарии ProxiFyre все равно обязателен: именно он делает маршрутизацию конкретных Windows-приложений. Local sing-box только дает локальный SOCKS5 endpoint и ходит дальше к выбранному серверу. ## Что устанавливается ### Control App Обычная сборка Tauri создает desktop-приложение ProxyWarden. Отдельный скрипт `scripts/install-control-app.ps1` сейчас подготавливает стандартные директории: ```text C:\Program Files\ProxyWarden\ControlApp C:\ProgramData\ProxyWarden\config C:\ProgramData\ProxyWarden\state C:\ProgramData\ProxyWarden\generated ``` ### ProxiFyre Явная установка ProxiFyre из приложения выполняется через elevated PowerShell и ставит/обновляет: ```text C:\Tools\ProxiFyre C:\Tools\ProxiFyre\ProxiFyre.exe C:\Tools\ProxiFyre\app-config.json Windows service: ProxiFyreService ``` Если на машине не найдены зависимости, установщик также скачивает и ставит Microsoft Visual C++ Redistributable и Windows Packet Filter / NDISAPI. ### Local sing-box Явная установка Local sing-box ставит: ```text C:\Program Files\ProxyWarden\sing-box\sing-box.exe C:\Program Files\ProxyWarden\sing-box\ProxyWardenSingBox.exe C:\Program Files\ProxyWarden\sing-box\ProxyWardenSingBox.xml C:\Program Files\ProxyWarden\sing-box\config.json Windows service: ProxyWardenSingBox ``` `ProxyWardenSingBox.exe` - это WinSW wrapper. Он нужен только чтобы запускать `sing-box.exe` как Windows-службу. ## Права администратора Без прав администратора можно открыть приложение, редактировать настройки, добавлять приложения, вводить внешний proxy, загружать/выбирать подписку и смотреть состояние. Права администратора или UAC confirmation нужны для операций, которые меняют систему: - установка или удаление ProxiFyre; - установка Windows Packet Filter / NDISAPI; - установка Microsoft Visual C++ Redistributable, если его нет; - установка или удаление Local sing-box; - создание, запуск и остановка Windows-служб; - удаление install folder для managed-компонентов. Применение профиля не запускает установку. Оно генерирует derived config и пытается записать его в найденную установку ProxiFyre. Если прав на запись в папку установки не хватает, операция должна завершиться ошибкой, а не устанавливать что-то скрыто. ## Поддержанная среда Подтверждено вручную сейчас: ```text Windows 11 PowerShell 7 как пользовательская shell для запуска команд разработки ``` Важно: Rust backend и elevated-операции сейчас запускают именно `powershell.exe` с `-NoProfile` и `-ExecutionPolicy Bypass`. На Windows это обычно Windows PowerShell 5.1. Скрипты используют стандартные команды вроде `Get-CimInstance`, `Invoke-WebRequest`, `Expand-Archive`, `Get-FileHash`, `Start-Service`, `Stop-Service`, `ConvertTo-Json`, поэтому должны быть близки к Windows PowerShell 5.1, но полный ручной тест пока был только на Windows 11 с PowerShell 7 в окружении разработки. Ожидаемая, но не полностью подтвержденная область: - Windows 10/11 desktop; - x64 как основной сценарий; - x86 и ARM64 частично учтены в installer-логике через выбор release assets, но не считаются проверенными; - обычный desktop/laptop без специальных требований к GPU; - доступ в интернет к GitHub releases и Microsoft download endpoints для установки компонентов. Linux/macOS не являются целевой платформой для этого клиента. ## Где лежат настройки Source of truth лежит в JSON под `C:\ProgramData\ProxyWarden`: ```text C:\ProgramData\ProxyWarden\config\profiles.json C:\ProgramData\ProxyWarden\config\targets.json C:\ProgramData\ProxyWarden\config\components.json C:\ProgramData\ProxyWarden\config\local-singbox.json C:\ProgramData\ProxyWarden\state\activity.json C:\ProgramData\ProxyWarden\state\singbox-subscription-cache.json ``` Сгенерированные файлы лежат отдельно и могут быть пересозданы: ```text C:\ProgramData\ProxyWarden\generated\proxifyre-app-config.json C:\ProgramData\ProxyWarden\generated\sing-box-config.json ``` Не редактируйте generated-файлы как основной источник правды. При следующей генерации они могут быть перезаписаны. Subscription URL считается секретом. UI и diagnostics должны показывать только редактированную/сокращенную версию ссылки. ## Типовые сценарии ### Внешний SOCKS5 1. Запустите ProxyWarden. 2. Установите или проверьте ProxiFyre. 3. На вкладке `VPN / Прокси` выберите внешний proxy. 4. Введите `host:port` или `socks5://host:port`. 5. На вкладке `ProxiFyre` добавьте приложения. 6. Нажмите `Применить в ProxiFyre`. Local sing-box для этого сценария не нужен. ### Local sing-box с подпиской 1. Запустите ProxyWarden. 2. Установите ProxiFyre. 3. Установите Local sing-box. 4. Вставьте subscription URL. 5. Загрузите список серверов и выберите сервер. 6. Добавьте приложения. 7. Сгенерируйте/примените маршрут. ## Установка и запуск из исходников Нужны: - Windows 11 для подтвержденного пути разработки; - Node.js и npm; - Rust через rustup; - Visual Studio Build Tools с MSVC и Windows SDK; - Microsoft Edge WebView2 Runtime; - PowerShell 7 удобно использовать как shell разработки, но elevated runtime-команды приложения запускаются через `powershell.exe`. Установка зависимостей и запуск: ```powershell cd D:\repos\ProxyWarden npm install npm run tauri -- dev ``` Собрать frontend: ```powershell npm run build ``` Собрать установочный пакет Tauri: ```powershell npm run tauri -- build ``` Запустить только browser-preview без нативных Tauri-команд: ```powershell npm run dev -- --host 127.0.0.1 ``` Browser-preview годится для проверки интерфейса, но не доказывает работу Windows-служб, elevated-операций и Tauri command handlers. ## Installer-скрипты В репозитории есть явные entrypoint-скрипты: ```powershell & .\scripts\install-control-app.ps1 -PlanOnly & .\scripts\install-proxyfier.ps1 -PlanOnly & .\scripts\install-singbox.ps1 -PlanOnly ``` `-PlanOnly` возвращает structured JSON и не должен иметь side effects. Реальная установка через эти скрипты требует прав администратора. `scripts/install-proxyfier.ps1` как standalone boundary сейчас ожидает локальный `-PackagePath`; путь установки из UI/backend использует отдельный elevated-скрипт, который скачивает ProxiFyre, Windows Packet Filter и runtime-зависимости сам. ## Проверка для разработчика Frontend/UI: ```powershell npm run build ``` Rust/backend: ```powershell cd D:\repos\ProxyWarden\src-tauri cargo test ``` Tauri/toolchain: ```powershell npm run tauri -- info npm run tauri -- dev npm run tauri -- build ``` Installer boundaries: ```powershell & .\scripts\install-control-app.ps1 -PlanOnly & .\scripts\install-proxyfier.ps1 -PlanOnly & .\scripts\install-singbox.ps1 -PlanOnly ``` ## Ограничения текущей версии - Основной поддержанный маршрут - SOCKS5. - ProxiFyre является текущим backend-слоем для per-app routing. - Local sing-box остается опциональным и не требуется для внешнего SOCKS5. - Elevated install/start/stop/uninstall операции считаются реализованными, но требуют дополнительной проверки на реальной Windows-машине с UAC/admin confirmation. - Windows 10, Windows PowerShell 5.1, ARM64 и x86 нужно отдельно подтвердить перед тем, как называть их официально поддержанными.