embeddevio f0847001ee netns: вход в namespace через nsenter при отказе ip netns exec (#56)
- lib.sh: ns_exec()/ns_prefix() с автоопределением режима (AWG_NS_EXEC_MODE),
  stand_fail() для кода 4; cleanup в run.sh больше не оставляет мок и sink.
- run.sh/topology.sh: коды возврата нормализованы к 0/1/3/4 (255 от iproute2 -> 4).

Refs #21, Refs #15, Refs #56
2026-10-28 21:30:01 +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%