# Roadmap: VPN Proxy rebuild ## Целевая модель Проект должен стать multi-mode системой вокруг `sing-box`: | Режим | Назначение | Runtime | Статус | | --- | --- | --- | --- | | `gateway` | LXC/VPS как gateway для роутера и всей сети | Docker `network_mode: host` + TProxy | делаем первым | | `desktop-proxy` | Mac/Linux локальный HTTP/SOCKS proxy с fallback | Docker bridged ports | позже переносим из старой реализации | | `windows-gaming` | Windows для игр/Discord/Vesktop | standalone Tauri 2 app + ProxiFyre adapter + optional native `sing-box.exe` | активное направление: `docs/goals/windows-modular-client/PLAN.md` | ## Gateway mode Цель: контейнер, который становится прозрачным gateway для сети. Требования: - `sing-box` внутри контейнера. - `network_mode: host`. - `CAP_NET_ADMIN` и `CAP_NET_RAW`. - TProxy inbound на `7895`. - Mixed HTTP/SOCKS inbound на `8080`. - Web UI на `3456`. - Subscription URL вводится в UI, парсится, пользователь выбирает сервер. - Пользовательские routing lists управляются из UI. - Генерируется `/etc/sing-box/config.json`. - `sing-box check` перед применением. - Restart `sing-box` после применения. - Idempotent iptables setup. - Cleanup iptables/ip rule/ip route при остановке контейнера. Маршрутизация v1: - private IP ranges -> `direct`. - пользовательские списки -> `direct`, `vpn` или `block`. - `geoip-ru` -> `direct`. - `geosite-category-ru` -> `direct`. - все остальное -> выбранный VPN outbound. Порядок правил: 1. safety private-direct, чтобы не ломать LAN. 2. custom routing lists из UI. 3. RU direct rules. 4. default VPN outbound. Формат пользовательского списка: - `name`. - `enabled`. - `outbound`: `direct`, `vpn`, `block`. - `domains`: exact domains. - `domainSuffixes`: доменные suffix, удобно для игр/сервисов. - `domainKeywords`: keyword matching. - `ipCidrs`: CIDR ranges. - `ports`: TCP/UDP ports. - `networks`: `tcp`, `udp`. - UI должен автосохранять списки с debounce, чтобы polling state не затирал незавершенное редактирование. Важно: gateway не видит process name на клиентском ПК. Для сценария вроде "League of Legends всегда direct" нужны домены, CIDR и порты Riot, а не имя процесса. Отдельно решить позже: - DNS strategy: DHCP DNS, DNS redirect или local DNS inbound. - IPv6 TProxy. - nftables backend. - health checks и smoke diagnostics. - secret storage через Infisical/Vault/env. ## Desktop proxy mode Цель: сохранить удобный Docker-сценарий для Mac/Linux без TProxy. Требования: - UI на `3456`. - Mixed inbound на `8080`. - Subscription parser. - Выбор сервера. - Fallback proxy через `urltest`. - Direct mode toggle. - Не требует `NET_ADMIN`. ## Windows gaming mode Цель: отдельное Windows desktop-приложение для Discord/Vesktop/игр, где Control App, Proxyfier Layer и Local sing-box являются независимыми компонентами. Current checkpoint: - MVP slice exists under `apps/windows-client`. - Frontend build passes with `npm run build`. - Rust/Tauri native verification requires installing Rust/rustup and Visual Studio Build Tools with MSVC/Windows SDK. - Local sing-box is optional; external SOCKS5 targets remain the first verified path. Требования: - Standalone Tauri 2 + React/TypeScript + Rust app under `apps/windows-client`. - Profiles for process/folder/exe app routing. - External SOCKS5/HTTP targets first; local `sing-box` is optional. - Proxyfier adapter boundary with ProxiFyre as the first engine. - Explicit installers for Control App, Proxyfier Layer, and Local sing-box. - Privileged helper/install operations return structured JSON. Source docs: - Product/tech brief: `docs/windows-client-product-tech-brief.md`. - Execution plan: `docs/goals/windows-modular-client/PLAN.md`. Superseded: - The old Node `APP_MODE=windows` plan in `docs/superpowers/plans/2026-05-21-windows-client.md` is historical context, not the active implementation path. ## Рабочий порядок 1. Сделать новый gateway root. 2. Реализовать Docker image + entrypoint TProxy lifecycle. 3. Реализовать маленький control-server. 4. Реализовать Vite + React UI для subscription -> server select -> apply. 5. Добавить gateway docs/install script. 6. Потом переносить desktop-proxy. 7. Потом реализовать standalone Windows Tauri client по `docs/goals/windows-modular-client/PLAN.md`.