8.5 KiB
8.5 KiB
E5 Требования: SingBox Protocols (UI tab + Go API)
Дата: 2026-03-07
Статус: planned (requirements fixed)
Владелец: Engineering
1) Цель
- Зафиксировать требования для реализации протоколов во вкладке
SingBoxбез архитектурной "мешанины". - Зафиксировать целевой Go API для
singboxс поддержкой "всех фишек" через typed-профили и raw-режим.
2) Архитектурные границы (чтобы не смешивать слои)
- Слой
Transport Engine:- lifecycle (
provision/start/stop/restart), health/metrics, runtime_mode/packaging. - уже реализован в
/api/v1/transport/clients/*.
- lifecycle (
- Слой
Routing Policy:validate -> confirm -> apply -> rollback.- уже реализован в
/api/v1/transport/policies/*.
- Слой
Protocol Profile(новый E5):- описание конфигов
sing-box(outbounds/rules/dns/tun и т.д.). - не дублирует lifecycle и не дублирует policy.
- описание конфигов
Правило:
Protocol Profileготовит/валидирует/рендеритsing-boxconfig.Transport Engineзапускает этот config.Routing Policyрешает, какой engine владеет трафиком.
3) Требования к вкладке SingBox (GUI)
3.1 Блоки UI (обязательные)
Profiles list:- список профилей, тип протокола, версия, последний apply, статус валидации.
Editor:- режим
Typed(форма) и режимRaw JSON(полный контроль).
- режим
Validation:- синтаксис, обязательные поля, совместимость с бинарём/features.
Apply:Validate->Preview->Apply.- при рисках/конфликтах — confirm flow.
Diagnostics:- last_error, warning, render-diff, health summary.
Rollback:- откат к предыдущей рабочей версии профиля.
3.2 Поведение
- Нельзя применять профиль без успешной валидации.
Applyпрофиля не должен неявно менять transport-policy ownership.- Секреты в UI маскируются, редактируются только write-only полями.
- Все mutating-операции идемпотентны и привязаны к ревизии.
3.3 Desktop layout freeze
- Вкладка
SingBoxна desktop фиксируется в 3 секции:Connection card (runtime),Profile settings (per profile),Global defaults.
- Для profile-параметров используется правило
Use global/Override. - Детальная спецификация:
docs/phase-e/E5_2_SINGBOX_DESKTOP_DASHBOARD_SPEC.md.
4) Требования к модели профилей (Go)
4.1 Поддерживаемые режимы профиля
typed:- структурированная схема под основные протоколы.
raw:- полный
sing-boxJSON для "всех фишек", не покрытых формой.
- полный
4.2 Минимальный набор протоколов для typed-режима
vless(в т.ч. reality/tls варианты),trojan,shadowsocks,wireguard,hysteria2,tuic.
Примечание:
- Для нестандартных/редких фич используется
rawбез потери совместимости.
4.3 Версионирование
schema_versionдля профиля.profile_revision(optimistic lock).render_revision(версия сгенерированного итогового конфига).
4.4 DNS (встроенный resolver sing-box)
- Профиль
singboxдолжен включать секцию DNS как часть единого конфига (dns.servers,dns.rules,strategy,finalи связанные поля). - В typed-режиме нужен базовый DNS-набор:
- выбор DNS-провайдеров/серверов,
- rule-based DNS routing (по доменам/гео/режимам),
- переключение стратегий резолва (например, prefer IPv4/IPv6 по профилю).
- Для расширенных сценариев (fakeip, cache tuning, нетиповые rules/actions) используется
rawрежим без ограничений формы. - Ограничение границ:
- DNS
sing-boxотвечает за резолв внутри transport-профиля, - системный selective routing policy (
/transport/policies/*) остаётся отдельным слоем и не дублируется в profile editor.
- DNS
5) Требования к Go API singbox
5.1 Новые endpoint-группы (target)
GET/POST /api/v1/transport/singbox/profilesGET/PATCH/DELETE /api/v1/transport/singbox/profiles/{id}POST /api/v1/transport/singbox/profiles/{id}/validatePOST /api/v1/transport/singbox/profiles/{id}/renderPOST /api/v1/transport/singbox/profiles/{id}/applyPOST /api/v1/transport/singbox/profiles/{id}/rollbackGET /api/v1/transport/singbox/profiles/{id}/historyGET /api/v1/transport/singbox/features
5.2 Контракт операций
validate:- возвращает ошибки схемы, ошибок протокола, неподдерживаемых фич по текущему binary.
render:- детерминированно строит финальный
sing-boxconfig + diff к текущему active.
- детерминированно строит финальный
apply:- атомарно: запись конфига -> backend provision -> optional restart/start -> health check.
- при fail: автоматический rollback.
rollback:- откат к последнему успешному render/apply snapshot.
5.3 Совместимость и безопасность
- Не ломать текущий
/api/v1/transport/*контракт. - Для mutating запросов:
Idempotency-Key,base_revision.
- Секреты:
- отдельное хранение, выдача в API только masked.
- запрет на логирование plain-secret в trace/events.
6) "Все фишки" sing-box: как закрываем требование
- Typed-форма покрывает частые production-сценарии.
- Raw-режим гарантирует доступ к полному синтаксису sing-box.
GET /transport/singbox/featuresотражает реальные возможности текущего binary:- поддерживаемые протоколы,
- transport/tls/reality/quic опции,
- ограничения версии.
7) Хранение и артефакты
- Профили:
/var/lib/selective-vpn/transport/singbox-profiles.json - История/snapshots:
/var/lib/selective-vpn/transport/singbox-history/*.json - Rendered configs:
/var/lib/selective-vpn/transport/singbox-rendered/{profile_id}.json - Secrets store:
/var/lib/selective-vpn/transport/secrets/singbox/{profile_id}.json(0600)
8) SSE-события (обязательные)
singbox_profile_savedsingbox_profile_validatedsingbox_profile_renderedsingbox_profile_appliedsingbox_profile_rollbacksingbox_profile_failed
9) Поэтапная реализация (рекомендуемый порядок)
E5.1Requirements freeze (этот документ).E5.2Go: state/model + CRUD + versioning + secrets storage.E5.3Go: validate/render/apply/rollback + SSE events.E5.4GUI: SingBox profiles tab (list/editor/validate/preview/apply/rollback).E5.5Совместимость web/mobile: reuse того же API-контракта.
10) Критерии готовности E5
- Можно создать/редактировать профиль
singboxбез ручного правки файлов на хосте. Applyпроходит через validate и имеет rollback safety.- Raw-режим позволяет применить фичи, которых нет в typed-форме.
- Наблюдаемость достаточна для диагностики (events + health + last_error + history).