feat: support AmneziaWG 3.1
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Совместимость с upstream AmneziaWG
|
||||
|
||||
Этот документ — канонический источник сведений о версиях AmneziaWG, с которыми сверяется AWG2 Harness. Остальная документация не должна дублировать плавающий набор upstream-версий: она ссылается сюда.
|
||||
|
||||
## Статус релиза 0.3.1
|
||||
|
||||
AWG2 Harness 0.3.1 проверен по официальной документации и исходникам AmneziaWG 3.1 по состоянию на 28 августа 2026 года. Это означает **source-validated against AWG 3.1**, но не заменяет live-приёмку на production-сервере.
|
||||
|
||||
Основной сценарий:
|
||||
|
||||
- self-hosted AmneziaWG 3.1;
|
||||
- AmneziaVPN 5.0.1.5 или новее;
|
||||
- чистая установка AWG 3.1 через AmneziaVPN;
|
||||
- контейнер `amnezia-awg2`;
|
||||
- интерфейс `awg0`;
|
||||
- чтение состояния через `awg`, с fallback на `wg`.
|
||||
|
||||
AWG 3.0 и 2.x остаются regression compatibility. Контейнер `amnezia-awg` поддерживается как legacy fallback. Название AWG2 Harness является именем продукта и пакета, а не ограничением на версию протокола.
|
||||
|
||||
## Зафиксированная upstream-база
|
||||
|
||||
| Компонент | Версия или ревизия | Назначение |
|
||||
|---|---|---|
|
||||
| AmneziaVPN | `5.0.1.5`, tag `7d4f3e0f5090b74903609179653d1f669d2ad08a` | Self-hosted deployment AWG 3.1 и container contract |
|
||||
| `amneziawg-tools` | `v3.1.20260812`, commit `ee0f0a9aa34ff0a0da4b3433b9512781cfe02843` | CLI, `awg-quick`, формат `show all dump` |
|
||||
| `amneziawg-go` | `v3.1.20260814`, commit `1b86b2ae0e493e7ea93f8c1a0f0cb6735b1551f1` | userspace fallback и reference container image |
|
||||
|
||||
Официальные источники:
|
||||
|
||||
- [FAQ: установка AWG 3.1 на self-hosted-сервер](https://docs.amnezia.org/ru/faq/);
|
||||
- [поддерживаемые серверные ОС и архитектуры](https://docs.amnezia.org/ru/documentation/supported-linux-os-for-vps/);
|
||||
- [отображение `DockerContainer::Awg2` в `amnezia-awg2`](https://github.com/amnezia-vpn/amnezia-client/blob/7d4f3e0f5090b74903609179653d1f669d2ad08a/client/core/utils/containers/containerUtils.cpp);
|
||||
- [`show all dump` в tools v3.1.20260812](https://github.com/amnezia-vpn/amneziawg-tools/blob/v3.1.20260812/src/show.c);
|
||||
- [kernel-first и userspace fallback в `awg-quick`](https://github.com/amnezia-vpn/amneziawg-tools/blob/v3.1.20260812/src/wg-quick/linux.bash);
|
||||
- [Dockerfile `amneziawg-go v3.1.20260814`](https://github.com/amnezia-vpn/amneziawg-go/blob/v3.1.20260814/Dockerfile).
|
||||
|
||||
Клиентский Dockerfile AmneziaVPN использует `amneziavpn/amneziawg-go:latest`. Поэтому перечисленные теги являются воспроизводимой reference/source baseline, но не обещанием, что любой будущий контейнер с тегом `latest` содержит те же сборки. Фактические версии проверяются во время live-приёмки.
|
||||
|
||||
## Контракт контейнера и tools
|
||||
|
||||
Default discovery имеет такой порядок:
|
||||
|
||||
```toml
|
||||
container_names = ["amnezia-awg2", "amnezia-awg"]
|
||||
wg_binaries = ["awg", "wg"]
|
||||
```
|
||||
|
||||
Отдельного официального типа или имени `amnezia-awg3` в зафиксированной версии клиента нет. Оператор может вручную указать другое корректное имя контейнера в `amnezia.container_names`.
|
||||
|
||||
Reference image содержит `/usr/bin/awg`, `/usr/bin/awg-quick` и symlinks `/usr/bin/wg -> /usr/bin/awg`, `/usr/bin/wg-quick -> /usr/bin/awg-quick`.
|
||||
|
||||
## Kernel и userspace
|
||||
|
||||
`awg-quick` сначала выполняет `ip link add <interface> type amneziawg`. Если kernel implementation недоступна, запускается `amneziawg-go`.
|
||||
|
||||
Harness не выбирает реализацию и не требует конкретную из них. Peer state читается через `docker exec` официальным `awg` внутри контейнера. Это единая container-side точка доступа для kernel и userspace вариантов и не создаёт зависимости от версии host-side tools.
|
||||
|
||||
## Контракт `show all dump`
|
||||
|
||||
Исторические widths являются диагностикой:
|
||||
|
||||
| Producer | Interface-row | Peer-row |
|
||||
|---|---:|---:|
|
||||
| WireGuard tools | 5 | 9 |
|
||||
| AWG 2.x tools | 14 | 9 |
|
||||
| AWG 3.0 tools | 28 | 9 |
|
||||
| AWG 3.1 tools `v3.1.20260812` | 30 | 9 |
|
||||
|
||||
В AWG 3.1 поля `RandomTrailers` и `DisableCookies` добавлены перед `fwmark`. Peer representation осталось девятиполевым.
|
||||
|
||||
**Количество колонок interface-row никогда не используется harness для определения версии протокола или классификации peer.** Версия tools определяет ширину interface-row, а новые tools могут печатать широкую строку и для конфигурации со старыми параметрами. Parser классифицирует peer семантически по allowed IPs и числовым handshake/RX/TX полям.
|
||||
|
||||
Полный interface-row нельзя публиковать в отчётах: во второй колонке находится приватный ключ устройства. Для диагностики выводятся только номер строки, число полей и имя интерфейса.
|
||||
|
||||
## Переход с AWG 2.0
|
||||
|
||||
Официальная модель перехода на AWG 3.1 — удалить AmneziaWG с сервера, установить заново новый контейнер, повторно создать пользователей и выпустить новые connection keys/configuration files.
|
||||
|
||||
Harness не выполняет эту миграцию, не читает и не меняет `awg0.conf`, не генерирует ключи и не управляет протокольными параметрами. Основной документированный путь для 0.3.1 — clean installation. Live acceptance выполняется после того, как AmneziaVPN завершила установку AWG 3.1.
|
||||
Reference in New Issue
Block a user