Files
AWG2_harness/docs/UPSTREAM_COMPATIBILITY.md

82 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Совместимость с 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`, commit `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.
Поддерживаемый harness-контракт соответствует официальной self-hosted server topology Amnezia/AWG 3.1: один IPv4 host route `/32` на peer. Generic client config может содержать `0.0.0.0/0` и `::/0`, а Docker — публиковать AWG UDP port на внешних IPv4 и IPv6 адресах; это не server-side peer addressing. IPv6/mixed/multiple server `AllowedIPs` harness отвергает до traffic и anti-torrent mutation.
## Контракт `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.