embeddevio 63e75e4b7f netns: снос топологии с повторами на случай ленивого umount (#56)
В контейнере `ip netns delete` иногда возвращает успех, но namespace остаётся
в `ip netns list` — из-за этого run.sh отдавал код 4 на зелёных тестах (флак
1 из 3). Теперь удаление повторяется до 5 раз с проверкой ns_exists.

Refs #21, Refs #56
2026-10-28 21:35:27 +03:00
2026-10-16 22:45:47 +03:00

awg-dash

VPN-шлюз AmneziaWG с интеллектуальной маршрутизацией: один Docker-образ = туннель + policy routing + split-tunnel (GeoIP / DNS) + REST API v1 + Web UI (тёмная тема).

  • Эпик и декомпозиция: Gitea issue #15 (embeddevio/awg-dash).
  • Исполнение: Hermes Kanban, борда awg-dash (hermes kanban --board awg-dash list).
  • PoC-референс: embeddevio/amneziawg-docker-gateway (bash + iptables, docs/technical-specification.md).

Архитектура

Два процесса в одном образе:

Процесс Пользователь Ответственность
awg-agent root awg/wg-интерфейс, iptables/ipset, dnsmasq, policy routing, метрики
awg-api непривилегированный FastAPI: REST API v1, WebSocket, статика UI

Обмен — unix-socket /run/awg/agent.sock; состояние — SQLite в /data, конфиги .conf в /config. Принятые решения зафиксированы в docs/adr/.

Быстрый старт (после релиза 1.0)

docker run -dit --name=vpn-gateway \
  --network=host \
  --device=/dev/net/tun:/dev/net/tun \
  --cap-add=NET_ADMIN --cap-add=SYS_MODULE \
  --restart always \
  -v /srv/awg/config:/config -v /srv/awg/data:/data \
  registry.example.com/vpn-gateway:latest

Web UI: http://<host>:8080. До релиза образ собирается локально: make build.

Разработка

make venv    # локальное окружение (.venv)
make lint    # ruff + mypy
make test    # pytest + coverage (порог 70%)
make build   # docker build образа (задача #18)
make dev-up  # dev-стенд (задача #21)

Сетевые тесты выполняются в netns-стенде (tests/netns/), без реального VPN-провайдера.

Структура репозитория

Путь Назначение
backend/awg_agent/ привилегированный агент: туннель, маршрутизация, GeoIP, DNS, метрики
backend/awg_api/ FastAPI-приложение (REST + WS + статика UI)
backend/tests/ unit/integration-тесты (pytest)
ui/ React + TypeScript + Tailwind + shadcn-ui
deploy/ Dockerfile, compose-профили, entrypoint, Grafana-дашборд
docs/adr/ архитектурные решения
tests/netns/ сетевой тестовый стенд

Процесс разработки

1 задача = 1 issue = 1 ветка feat/<issue>-slug = 1 PR.

Гейты мержа: CI green, coverage нового кода ≥ 70 %, security scan low/none, ревью владельца роли. Merge в main и деплой в prod — только TechLead после гейтов. Все операции с репозиторием — через Gitea MCP.

S
Description
awg-dash 🚀
Readme MIT 537 KiB
Languages
Python 85.4%
Shell 12.3%
Makefile 2.3%