Files
ProxyWarden/README.md

260 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 нужно отдельно подтвердить перед тем, как называть их официально поддержанными.