# VPN Proxy Gateway Контейнер запускается в `network_mode: host`, применяет TProxy-правила на хосте и запускает `sing-box` как прозрачный gateway для устройств в локальной сети. ## Возможности - Web UI на Vite + React, всё на русском. - Один Node control-server без отдельного backend framework. - Парсинг subscription URL: JSON config, base64 список, plain-text VLESS links. - Подписка маскируется в UI после загрузки, кнопка «Забыть подписку» — стирает кэш, останавливает sing-box и удаляет конфиг. - Управление жизненным циклом sing-box из UI: остановить, перезапустить, сбросить конфиг, посмотреть сгенерированный `config.json` (read-only). - Live-логи sing-box через SSE (фильтр по уровню, пауза, очистка). - Routing lists с автосохранением, drag-n-drop порядка (first match wins), валидацией CIDR/портов/доменов и шаблонами (LoL, Discord, Telegram, YouTube, Steam, реклама). - Генерация sing-box config с safety private-direct, кастомными правилами и RU geosite/geoip direct. - Docker entrypoint с idempotent TProxy setup/cleanup. - Healthcheck в compose: `curl http://127.0.0.1:${PORT}/api/state`. ## Быстрый старт ```bash cp .env.example .env docker compose -f docker-compose.gateway.yml up -d --build ``` UI будет доступен на хосте по `http://:3456`. ## REST API | Метод | Путь | Назначение | | --------- | ----------------------------------- | ------------------------------------------------------------------ | | GET | `/api/state` | состояние, список серверов, кастомные правила, masked subscription | | GET | `/api/config` | текущий sing-box config | | GET | `/api/logs` | последние 200 строк логов | | GET | `/api/logs/stream` | SSE-поток логов sing-box | | GET / PUT | `/api/rules` | список кастомных правил | | POST | `/api/subscription/fetch` | загрузить подписку | | DELETE | `/api/subscription` | удалить подписку, остановить sing-box | | POST | `/api/apply` | применить выбранный сервер | | POST | `/api/singbox/{stop,restart,clear}` | управление процессом | ## Важные ограничения - IPv4 TProxy first. IPv6 routing будет отдельным этапом. - DNS-перехват пока не включен. Для корректного gateway-сценария лучше выдать клиентам DNS через роутер/DHCP. - Контейнер должен запускаться с `network_mode: host`, `NET_ADMIN`, `NET_RAW`. - Mixed proxy по умолчанию слушает `127.0.0.1` (для дома). Чтобы открыть для LAN, установи `PROXY_BIND_IP=0.0.0.0` в `.env`. - Gateway не видит process name на клиентском ПК, поэтому правила для игр задаются через домены, suffix, IP CIDR и порты. - `_archive/` игнорируется git, потому что там лежит старая реализация и runtime state.