feat: support AmneziaWG 3.1

This commit is contained in:
2026-08-28 00:28:26 +05:00
parent 3912b91bc4
commit 185991504a
16 changed files with 282 additions and 110 deletions
+12 -4
View File
@@ -4,8 +4,8 @@
- [ ] Хост — Debian 13 amd64.
- [ ] Сервер выделенный, без соседних сервисов.
- [ ] AmneziaWG/AWG 2.0 или AmneziaWG/AWG 1.5 установлена официальным способом.
- [ ] Контейнер `amnezia-awg2` или `amnezia-awg` запущен (`amnezia-awg3` — резерв на будущее, в AmneziaVPN 5.0 такого типа контейнера ещё нет).
- [ ] AmneziaWG 3.1 установлена официальным self-hosted способом через AmneziaVPN 5.0.1.5 или новее.
- [ ] Контейнер `amnezia-awg2` запущен; `amnezia-awg` допустим только как осознанный legacy fallback.
- [ ] `docker ps` видит контейнер.
- [ ] Можно получить PID контейнера.
- [ ] `/proc/<pid>/ns/net` существует.
@@ -15,6 +15,12 @@
## B. Обнаружение peers
- [ ] `C=amnezia-awg2` соответствует фактически запущенному контейнеру.
- [ ] `docker exec "$C" awg --version` зафиксирован в acceptance evidence.
- [ ] `docker exec "$C" ip -o link show awg0` находит основной интерфейс.
- [ ] `docker exec "$C" ip -d link show awg0` фиксирует фактический kernel/userspace runtime без требования конкретной реализации.
- [ ] `docker exec "$C" awg show all dump | awk -F '\t' '{print NR, NF, $1}'` для reference AWG 3.1 tools показывает 30 полей interface-row и 9 полей peer-row.
- [ ] Width используется только как acceptance evidence; parser не определяет по нему версию и не классифицирует peer.
- [ ] `awg2-harness status` показывает найденный контейнер.
- [ ] `awg2-harness status` показывает PID/netns контейнера.
- [ ] `awg2-harness status` показывает найденный интерфейс.
@@ -171,7 +177,8 @@
- [ ] Есть chain `forward_antitorrent` с hook `forward` и policy `accept`.
- [ ] Правило ограничивает `ip saddr <peer_ipv4_cidr>`, default `10.8.1.0/24`.
- [ ] Лимит считается per source VPN IP через meter/set, а не глобально по всей подсети.
- [ ] Порог совпадает с `anti_torrent.max_connections_per_peer`; текущий пример config использует `150`, более строгий вариант — `100`.
- [ ] Порог совпадает с `anti_torrent.max_connections_per_peer`; shipped production baseline — `500`.
- [ ] В фактической nft rule присутствует `ct count over 500` для shipped config.
- [ ] Drop counter виден в `status`.
- [ ] На first-run без table `awg2-harness apply-firewall` создаёт `table inet awg2_harness`, а не падает.
- [ ] При превышении порога новые flows дропаются, established flows ниже порога не ломаются.
@@ -193,6 +200,7 @@
- [ ] Package собирается на отдельной Debian 13 amd64 build-machine.
- [ ] Production host не требует Rust/cargo/source tree.
- [ ] `./tools/build.sh --package` создаёт `dist/awg2-harness_<version>_amd64.deb`.
- [ ] Release package без `--version` получает версию `0.3.1` из `traffic_core/Cargo.toml`.
- [ ] `dist/SHA256SUMS` валидирует checksum пакета.
- [ ] Пакет ставит бинарь в `/usr/sbin/awg2-harness`.
- [ ] Пакет ставит unit в `/lib/systemd/system/awg2-harness.service`.
@@ -219,7 +227,7 @@
- [ ] AmneziaDNS установлен из приложения AmneziaVPN.
- [ ] Контейнер `amnezia-dns` в состоянии healthy.
- [ ] `docker inspect amnezia-dns` показывает `"53/tcp":null` и `"53/udp":null`.
- [ ] `amnezia-dns` и активный AWG-контейнер (`amnezia-awg2`, `amnezia-awg3` или `amnezia-awg`) подключены к одной Amnezia DNS Docker-сети.
- [ ] `amnezia-dns` и активный AWG-контейнер (`amnezia-awg2` или осознанный legacy `amnezia-awg`) подключены к одной Amnezia DNS Docker-сети.
- [ ] Публичный DNS-запрос к `<server-public-ip>:53` не резолвит домены; допустимы `connection refused`, `timeout` или `no servers could be reached`.
- [ ] DNS-резолвинг у VPN-клиента работает при активном подключении.
- [ ] AWG2 host firewall не открывает `53/tcp` и `53/udp`.