AmneziaWG
Профили AmneziaWG 3.1 и 2.0, их параметры и виды маскировки, бэкенды ноды (userspace и модуль ядра) и ключи на каждое устройство, которые люди импортируют в AmneziaVPN.
На этой странице
AmneziaWG — это WireGuard с обфускацией: тот же быстрый туннель, но пакеты в сети не похожи на WireGuard. В отличие от Hysteria2, у каждого устройства свой ключ: человек получает ключ на каждый телефон или компьютер и импортирует его в AmneziaVPN (или другое приложение AmneziaWG). На этой странице — профиль AmneziaWG, бэкенд ноды и устройства; как профиль создаётся и ставится на ноды, описано в разделе Профили.
Один профиль — одна версия, один порт#
- Профиль — это один интерфейс AmneziaWG на одном UDP-порту с одной версией протокола.
- Устройство (ключ) принадлежит одному профилю и работает на всех нодах, где этот профиль стоит. Конфиги для разных нод отличаются только адресом и публичным ключом ноды.
- У каждой ноды свой серверный ключ для профиля: взломанная нода не выдаёт остальные.
- Кому нужны обе версии или профиль с WARP и без, получает по устройству на каждый профиль.
Версии протокола#
| Версия | Для кого | Что в ней есть |
|---|---|---|
| AmneziaWG 3.1 | Актуальные клиенты (по умолчанию) | Защита заголовков, случайные хвосты, настраиваемые таймеры, всё из 2.0. |
| AmneziaWG 2.0 | Только старые клиенты | Мусорные пакеты, добавки, диапазоны заголовков, сигнатурные пакеты. Защиты версии 3.1 выключены. |
Более старые версии (1.5, 1.0) не предлагаются. Смена версии строит для неё новый блок обфускации (поля 3.1 версия 2.0 не принимает), поэтому это критичное изменение.
Редактор показывает Самый старый клиент, который работает для выбранной версии. Старый клиент не откажется от конфига, а молча выбросит незнакомые ключи, и рукопожатие не пройдёт.
| Версия | Самый старый клиент |
|---|---|
| 3.1 | AmneziaVPN 5.0.1.5, AmneziaWG Android v3.1.20260814, AmneziaWG Windows 3.1.0, AmneziaWG Apple v3.1.3, Mihomo v1.19.30 |
| 2.0 | AmneziaVPN 4.8.12.9, AmneziaWG 2.0.0, Mihomo v1.19.14 |
Тот же список показывается рядом с каждым конфигом, который получает человек.
Редактор профиля#
Над обычной формой у профиля AmneziaWG две свои карточки.
Версия протокола — выбор версии, самые старые клиенты и Вставить .conf: вставьте конфиг из AmneziaVPN или другого клиента AmneziaWG, и форма возьмёт из него версию, MTU и значения обфускации. Это происходит в браузере; ключи самого конфига не берутся и не сохраняются. Конфиг 1.5 или 1.0 переключит форму на 2.0; в обычном WireGuard брать нечего.
Как выглядят первые пакеты — каким рукопожатие видится со стороны:
| Вид | Похож на | Обычный порт |
|---|---|---|
| QUIC | QUIC Initial. Большой первый пакет: около 2,4 КБ конфига, в QR-код не поместится. | 443 |
| QUIC (curl) | QUIC в варианте curl, тот же размер. | 443 |
| DNS (по умолчанию) | DNS-запрос. | 53 |
| STUN | Binding-запрос, как в звонках. | любой |
| WebRTC | STUN с атрибутами ICE. | любой |
| SIP | Сообщение SIP. | 5060 |
| NTP | Запрос времени на 48 байт. | 123 |
| RTP | Пакет голосового потока. | любой |
| SSDP | Поиск устройств в сети. | 1900 |
| DTLS | Приветствие DTLS. | любой |
| Свой | Пакеты, которые вы пишете в I1–I5. | любой |
Вид на порту, где такого трафика обычно не бывает, заметнее, и редактор об этом скажет. Выбор вида меняет только сигнатурные пакеты I1–I5: их клиент шлёт перед рукопожатием, а нода игнорирует. Ни один выданный конфиг от этого не ломается.
- Домен в пакетах — имя хоста, которое несут пакеты QUIC, DNS и SIP. Пусто — у каждого устройства своё случайное имя из встроенного списка (Случайный, Список).
- Своя подпись у каждого устройства — у каждого устройства свои сигнатурные пакеты этого вида, при каждом показе конфига одни и те же. Выключено — у всех устройств один набор. У STUN, WebRTC и DTLS пакеты у всех одинаковые, для них переключатель ничего не меняет.
- Новые значения всего блока заменяет мусор, S, H, таймеры и ключ защиты заголовков свежими случайными значениями. Клиентам тогда нужны новые параметры, поэтому при сохранении устройствам перевыпускаются конфиги.
- Маскировка N/100 оценивает настройки, а не цензора: высокое число значит, что в настройках не осталось известных примет. По щелчку видно стартовую оценку версии и каждую причину, по которой баллы убавились или прибавились.
Настройки#
Критичные настройки должны совпадать на ноде и у каждого клиента; их смена делает все устройства профиля устаревшими (см. Профили).
Основное
| Настройка | Диапазон и значение по умолчанию | Критичная | Что делает |
|---|---|---|---|
| UDP-порт | 1–65535; новому профилю выдаётся случайный из 10000–60000 (никогда 51820, 51821 или 55424) | да | Здесь слушает нода. Случайный порт вытягивает другой. |
| MTU | 1200–1420, по умолчанию 1280 | нет | MTU туннеля на ноде и в .conf. MTU + S4 + 80 должно помещаться в 1500. |
| Выход | Напрямую или WARP | нет | См. WARP. |
| Сеть клиентов (IPv4) | частная сеть от /16 до /24 | да | Нода — .1, каждому устройству по адресу. Не меняется, когда профиль уже на ноде или у него есть устройства. |
| Сеть клиентов (IPv6) | /64 из fc00::/7 или пусто | да | Пусто — без IPv6 внутри туннеля. Закрепляется так же, как IPv4. |
Обфускация
| Настройка | Диапазон | Критичная | Что делает |
|---|---|---|---|
| Мусорные пакеты (Jc) | 0–128 | нет | Клиент шлёт их перед каждым рукопожатием; обычно 4–12. |
| Размер мусора, мин. (Jmin) / макс. (Jmax) | 0–1280 байт | нет | Держите Jmax ниже MTU. |
| Добавка к init (S1), Добавка к ответу (S2) | 0–150 байт | да | Байты, добавляемые к сообщениям рукопожатия. |
| Добавка к cookie (S3), Добавка к данным (S4) | 0–64 байта | да | S4 прибавляется к каждому пакету данных: держите небольшой. |
| Заголовок init (H1) … Заголовок данных (H4) | число или диапазон lo-hi | да | Значения типа сообщения. 1, 2, 3, 4 — обычный WireGuard. Четыре диапазона не должны пересекаться. |
| Сигнатурный пакет 1 (I1) … (I5) | до 3500 символов каждый | нет | Теги b, r, rc, rd, t. Заполняются выбранным видом; если писать сюда вручную, вид станет Свой. |
Продвинутое (поля 3.1 в версии 2.0 не действуют)
| Настройка | Критичная | Что делает |
|---|---|---|
| Зерно подписи | нет | Не секрет. Вместе с id устройства даёт воспроизводимые пакеты; новое зерно меняет их при следующем показе конфига. |
| Ключ защиты заголовков | да | Только 3.1. Одни и те же 32 байта на ноде и у каждого клиента. Хранится зашифрованным. |
| Случайные хвосты | да | Только 3.1. Должны совпадать с обеих сторон. |
| Выключить ответы с cookie | нет | Только 3.1, сторона ноды. Включённое снимает защиту от потока рукопожатий. |
| Дополнительная добавка | нет | Только 3.1. Диапазон случайных байт, который добавляется к пакетам данных. |
| Смена ключей через, Таймаут смены ключей, Отбрасывать после, Таймаут keepalive, Попыток рукопожатия | нет | Только 3.1. Таймеры: число или диапазон. |
| Постоянный keepalive | нет | Пишется в клиент; держите меньше 30 с — это UDP-таймаут многих NAT. В 2.0 одно число; Mihomo берёт первое. |
По ходу правки редактор предупреждает о допустимых, но рискованных значениях: слишком много мусорных пакетов, Jmax не меньше MTU, S4 не помещается в 1500 при этом MTU (с подсказкой подходящего MTU), значения H обычного WireGuard, узкий диапазон H, выключенные ответы с cookie, keepalive дольше таймаута NAT, вид на необычном порту.
Сети клиентов и адреса#
У каждого профиля AmneziaWG свои сети клиентов, и сети двух профилей AmneziaWG не должны пересекаться. Слоты панели — 10.66.4.0/22 с fd66:66:0:1::/64, потом 10.66.8.0/22 с fd66:66:0:2::/64 и так далее: в 10.66.0.0/16 их 63. Профиль, созданный без указания сетей (через API или как двойник), берёт первый свободный слот. Редактор подставляет первый слот; если его уже занял другой профиль, поле скажет «overlaps the network of profile …»: впишите свободную сеть, например следующий слот.
Нода занимает .1; каждое устройство получает следующий свободный адрес профиля. Когда сеть заполнена, новое устройство не создаётся («Сеть клиентов профиля заполнена»): удалите ненужные устройства или возьмите другой профиль. Как только профиль встал на ноду или у него появилось устройство, его сети закреплены: в каждом выданном конфиге адрес из них.
Бэкенд ноды: userspace или модуль ядра#
Нода запускает AmneziaWG одним из двух способов — это одна настройка на все её профили AmneziaWG. Она находится в карточке Бэкенд AmneziaWG в Настройках ноды, а первый профиль AmneziaWG, который ставят на ноду, задаёт тот же вопрос.
| Бэкенд | Что это |
|---|---|
| Авто | Модуль ядра, если он уже загружен, иначе userspace. Нода ничего не устанавливает. |
| Модуль ядра | Быстрее. Нужен модуль amneziawg на хосте; без него профили AmneziaWG этой ноды не запустятся. |
| Userspace | amneziawg-go внутри агента. Работает везде, где есть /dev/net/tun, чуть медленнее. |
Смена применяется сразу; подключённые устройства переподключаются. Работает сейчас показывает, что сообщает нода, например «userspace · amneziawg-go v3.1…».
Подготовка модуля ядра#
Модуль собирается из исходников на самой ноде, а для этого ставятся пакеты от root. Есть два пути.
Из панели (для агентов, которые это умеют). Выберите Модуль ядра и нажмите Сохранить. Панель сначала спросит ноду:
- модуль уже загружен — настройка просто переключится;
- его можно собрать — окно Собрать модуль ядра на …? объяснит, что будет. Нода сама установит всё для сборки (dkms на Ubuntu, make, gcc и заголовки своего ядра: несколько сотен МБ), соберёт и загрузит модуль. Обычно это 1–5 минут, жёсткий предел — 15. Всё это время AmneziaWG работает как раньше. Когда модуль готов, нода переключается на него, и подключённые устройства переподключаются один раз;
- здесь его не собрать — карточка скажет почему и покажет команду для ручного запуска.
Карточка следит за сборкой: «Готовлю модуль… (идёт N мин)», потом Модуль готов или Не удалось с причиной и кнопкой Повторить. Неудачная сборка ничего не меняет: нода остаётся на прежнем бэкенде. Журнал сборки — на ноде:
journalctl -u mistgate-awg-prepareВручную, на ноде от root. Без --yes команда только печатает план:
mistgate-node awg prepare-kernel # напечатать план, ничего не запускать
mistgate-node awg prepare-kernel --yes # выполнить (жёсткий предел 15 минут)
mistgate-node awg prepare-kernel --verify-only # проверить уже установленный модульДля сборки нужны Ubuntu или Debian, версия ядра, которую нода может определить, systemd и выключенный Secure Boot (ядро не пустит неподписанный модуль). В контейнере (OpenVZ, LXC, Docker и подобных) это невозможно: там выберите Userspace. Окно добавления профиля по проверке заголовков ядра у доктора говорит, готова ли нода к модулю.
Запускать сборку модуля может только владелец.
Строка состояния профиля на ноде#
На вкладке Профили ноды у каждого профиля AmneziaWG видно, что нода сообщила в последний раз: бэкенд, число устройств, сколько из них онлайн (рукопожатие за последние 190 с), сколько ни разу не подключались и когда было последнее рукопожатие. Когда никто не проходит, две подсказки указывают на причину:
- «До порта не дошёл ни один пакет»: хостер или фаервол режет этот UDP-порт. Попробуйте другой порт.
- «Пакеты приходят, но рукопожатие не завершается»: параметры обфускации на ноде и в конфиге различаются, обычно из-за устаревшего конфига.
Остальное покрывает проверка доктора Бэкенд AmneziaWG: нет рабочего бэкенда, /dev/net/tun спрятан старым юнитом службы (один раз выполните mistgate-node install текущим бинарником), нет модуля ядра или фаервол хоста (часто политика FORWARD у Docker) отбрасывает то, что клиенты шлют в интернет. См. Здоровье.
Устройства и ключи#
Устройство создаёт админ в карточке пользователя или сам человек на своей странице, если включено самообслуживание (см. Страница пользователя).
В карточке пользователя, в разделе Устройства → Ключи AmneziaVPN, кнопка Добавить устройство открывает окно Добавить устройство для …:
- Профиль — если в группе несколько профилей AmneziaWG, стоящих на нодах;
- Платформа — iPhone / iPad, Android, Windows, Mac, Linux или Другое;
- Название — до 40 символов; пусто — название платформы.
Создать делает пару ключей и адрес в туннеле, и сразу открывается окно с конфигом. Устройство считается в лимите устройств человека. Создание откажет, если лимит исчерпан, пользователь отключён, ключи AmneziaVPN у него выключены, профиля нет в его группе или он не стоит ни на одной доступной ему ноде, либо сеть клиентов заполнена.
Показать ключ открывает то же окно для существующего устройства:
- QR-код файла
.conf(«В AmneziaWG или AmneziaVPN: «+» → сканировать QR-код»); если конфиг слишком длинный для QR-кода, окно так и скажет; - Нода — если профиль стоит на нескольких нодах: по конфигу на каждую ноду;
- Скачать .conf, Скопировать ключ vpn://, Скопировать текст .conf;
- Самый старый клиент и заметки об этом конфиге;
- Заменить ключ — новая пара ключей для того же устройства и адреса. Старый ключ сразу перестаёт работать, новый нужно заново добавить в приложение;
- Удалить — удаляет устройство; его ключ перестаёт работать на всех нодах.
Открытие конфига отмечает, что у устройства актуальная версия: значок устарел (после критичного изменения профиля или смены порта на ноде) пропадает, когда человек импортировал новый конфиг.
в конфиге приватный ключ устройства. Отправляйте его только владельцу и никогда не вставляй в общий чат.
Ключи vpn:// и файлы .conf#
Файл .conf |
Ключ vpn:// |
|
|---|---|---|
| Куда импортируется | AmneziaVPN и приложения AmneziaWG (в том числе QR-кодом) | AmneziaVPN |
| MTU | Сохраняется | Десктопный AmneziaVPN ставит свой |
| Размер | В QR-код помещается почти любой вид; виды QUIC — нет | Одна строка текста |
На компьютере импортируйте файл, а не ключ: с ключом MTU может оказаться неверным, и соединение не заработает.
В конфиге AllowedIPs = 0.0.0.0/0, ::/0 (всё через туннель) и два DNS-сервера. Это первые два обычных IPv4-сервера из DNS-пресета человека; если в пресете таких нет, записываются встроенные 1.1.1.1 и 8.8.8.8, и окно об этом предупредит. AmneziaWG не умеет раздельный DNS: для всех доменов используются основные серверы. См. DNS.
Приложение AmneziaVPN#
На телефоне: открыть AmneziaVPN, нажать «+», вставить ключ (или отсканировать QR-код), нажать «Продолжить». На компьютере: AmneziaVPN → «+» → «Файл с настройками подключения» → выбрать скачанный .conf. Страница человека даёт эти шаги на его языке и для его платформы.
AmneziaWG через подписку#
Приложения на ядре mihomo тоже умеют AmneziaWG. Если у человека включены ключи AmneziaVPN, а его приложение получает формат Mihomo, в подписку попадают и его серверы AmneziaWG. У приложения Mihomo нет своего идентификатора устройства, поэтому все приложения Mihomo одного человека делят один ключ на профиль, созданный при первом запросе подписки, и считаются в лимите одним устройством подписки. См. Подписки.