Dmitriy Petrov b1c8eea976
All checks were successful
Build and Deploy Gateway / build-and-deploy (push) Successful in 18s
style: отформатирован код для улучшения читаемости
2026-05-08 19:49:54 +03:00

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.

Быстрый старт

cp .env.example .env
docker compose -f docker-compose.gateway.yml up -d --build

UI будет доступен на хосте по http://<gateway-host>: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.
Description
No description provided
Readme 1.5 MiB
Server + Mac Latest
2026-05-19 14:48:00 +03:00
Languages
JavaScript 83.7%
CSS 8.5%
Shell 7.1%
Dockerfile 0.6%