feat: добавлены компоненты для управления конфигурацией и логами

Добавлены новые компоненты для отображения и управления конфигурацией, логами и правилами маршрутизации. Реализована логика для работы с API, включая запросы на получение и сохранение данных. Также добавлены шаблоны правил и утилиты для валидации.

Refs: None
This commit is contained in:
2026-05-08 18:23:29 +03:00
parent 7d41dd86e7
commit 8789496ae6
24 changed files with 2987 additions and 364 deletions

View File

@@ -1,20 +1,25 @@
# VPN Proxy Gateway
Новая версия проекта начинается с `gateway`-режима: контейнер поднимается в `network_mode: host`, применяет TProxy-правила на хосте и запускает `sing-box` как прозрачный gateway для устройств в локальной сети.
Контейнер запускается в `network_mode: host`, применяет TProxy-правила на хосте и
запускает `sing-box` как прозрачный gateway для устройств в локальной сети.
## Что уже заложено
## Возможности
- Web UI на Vite + React.
- Один простой Node control-server вместо отдельного backend framework.
- Web UI на Vite + React, всё на русском.
- Один Node control-server без отдельного backend framework.
- Парсинг subscription URL: JSON config, base64 список, plain-text VLESS links.
- Routing lists управляются из UI: можно отправлять отдельные домены/CIDR/порты в `direct`, `vpn` или `block`.
- Генерация `sing-box` config для gateway:
- `tproxy` inbound на `7895`;
- `mixed` inbound на `8080`;
- private IP ranges напрямую;
- RU rule sets напрямую;
- остальное через выбранный outbound.
- Подписка маскируется в 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`.
## Быстрый старт
@@ -25,10 +30,28 @@ docker compose -f docker-compose.gateway.yml up -d --build
UI будет доступен на хосте по `http://<gateway-host>:3456`.
## Важные ограничения v0.1
## 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.
- 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.
- Gateway не видит process name на клиентском ПК, поэтому правила для игр задаются через домены, suffix, IP CIDR и порты.