Эпик: awg-dash — приложение управления VPN-шлюзом AmneziaWG с интеллектуальной маршрутизацией #15
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Цель
Превратить PoC (
embeddevio/amneziawg-docker-gateway: bash + iptables, всё через CLI) в продукт: один Docker-образ = шлюз AmneziaWG + policy routing + split-tunnel + REST API + Web UI (тёмная тема) + метрики.Источники:
docs/technical-specification.md(репозиторий PoC),entrypoint.shиDockerfileоттуда же — референс поведения, подлежащий переписыванию на управляемый код.Scope (in)
FR-1..FR-5 из ТЗ целиком: управление туннелем, интеллектуальная маршрутизация (GeoIP / DNS / All-VPN / Direct-only), Web UI (6 страниц), мониторинг и метрики, REST API v1 + WebSocket, Docker HEALTHCHECK, CI/CD и публикация образа в registry.
Scope (out, v1)
Мультитуннель (>1 активного .conf), multi-tenant и роли пользователей, кластеризация/HA, мобильное приложение, автоконфигурация клиентских устройств (ZeroTier-подобное), proxy-ARP-режим шлюза.
Ключевые решения (ADR, принимает TechLead)
amneziawg-go+amneziawg-toolsсобираются в multi-stage Dockerfile (как в PoC). Полный переход на Go не даёт выигрыша в производительности маршрутизации (её делает ядро), но удорожает frontend-контракт и найм.awg-agentпод root — сеть/iptables/ipset/awg;apiпод непривилегированным пользователем — FastAPI+REST+WS+статика UI). Обмен — unix-socket/run/awg/agent.sock+ общий SQLite/файлы. Микросервисы отклонены: один хост, один шлюз, привилегии всё равно нужны только агенту; сетевые вызовы и координация добавили бы отказа без пользы.-Cперед-A) → rollback при ошибке. Императивные скрипты PoC не переиспользуем как есть.GeoProvider(задел под ip2location/MaxMind). При недоступности API — работаем на кэше, но в режиме Direct-only fallback запрещён (иначе утечка трафика)./config(конфиги .conf, 0600) +/data(кэш GeoIP, история метрик). Тома обязательны, иначе конфигурация не переживёт рестарт.PrivateKey/PresharedKeyв API, логах и на странице конфигурации, bind по умолчанию на LAN-интерфейс с предупреждением.Что в ТЗ отсутствует и добавлено в объём (обязательно к реализации)
/metricsPrometheus, ротация логов, экспорт истории метрик (SQLite → retention).amneziawg/wireguard, fallback на userspaceamneziawg-go.Definition of Done (продукт 1.0)
docker runс --network=host, /dev/net/tun, NET_ADMIN, SYS_MODULE)Риски
amneziawg-goсборка в образеПоглощает
Эпик #9 «панель состояния VPN-туннеля» и его подзадачи #10–#13 — входят в объём Sprint 1/2 этого эпика (статус туннеля, UI-индикатор, e2e, healthcheck). Отдельно закрывать не нужно, закроем по мере выполнения.
Порядок работ и доска
Милстоуны: Sprint 0 (фундамент) → Sprint 1 (ядро шлюза) → Sprint 2 (API+UI) → Sprint 3 (QA+релиз). Приоритеты P0 (критично для релиза) / P1 / P2. Состояние задачи выражается лейблами
status/backlog → status/ready → status/in-progress → status/review → status/blocked. Владелец и оценка указаны в каждой подзадаче. Merge вmainи деплой в prod — только через TechLead по гейтам (CI green, coverage ≥70%, security scan low/none, ревью владельца роли).Декомпозиция эпика #15 (TechLead)
Создано 31 подзадача (#16–#46), распределены по 4 милстоунам. Роль владельца, оценка и приоритет — в теле каждой задачи.
Итого: 167 SP (Sprint 0 — 24, Sprint 1 — 54, Sprint 2 — 50, Sprint 3 — 39).
Статусы на доске
status/ready(можно брать в работу): #16–#21.status/backlog: остальные 25 задач.Маппинг старого эпика #9
Правила работы
1 задача = 1 ветка
feat/<N>-slug= 1 PR. Гейты мержа: CI green + coverage ≥70% + security low/none + ревью владельца роли. Merge вmainи деплой в prod — только TechLead после гейтов. Первое действие: при отсутствии Gitea Actions runner — эскалация (#17) как блокер.