Amnezia Self-Hosted AWG 2.0: Полное руководство по развертыванию и настройке

Подробное руководство по AmneziaWG 2.0 для self-hosted VPN: установка, настройка обфускации, CPS-сигнатуры, параметры конфигурации и ответы на частые вопросы.

Что такое AmneziaWG 2.0 и зачем он нужен

AmneziaWG 2.0 — это модифицированная версия протокола WireGuard, разработанная для обхода систем глубокого анализа трафика (DPI). В отличие от стандартного WireGuard, который легко детектируется по фиксированным заголовкам и размерам пакетов, AWG 2.0 предлагает механизмы полной мимикрии под легитимные UDP-протоколы, такие как DNS, QUIC или SIP.

Основная задача AWG 2.0 — сделать VPN-трафик неотличимым от обычного интернет-трафика. Это достигается за счет нескольких нововведений: signature packets (i1-i5), которые имитируют начало легитимного протокола, range-based заголовки (H1-H4), делающие каждый пакет уникальным, и расширенный padding (S3, S4), изменяющий размеры всех пакетов.

Протокол доступен только для self-hosted установок через клиент AmneziaVPN версии 4.8.12.9 и выше. Пользователям Free и Premium версий поддержка AWG 2.0 будет добавлена позже.

Как развернуть AmneziaWG 2.0 на собственном сервере

Для развертывания AWG 2.0 на собственном сервере необходимо выполнить несколько шагов:

  1. Установите или обновите клиент AmneziaVPN до версии 4.8.12.9 или выше. Скачать его можно с официального сайта или зеркала.
  2. Подключитесь к вашему серверу через приложение и выберите протокол AmneziaWG.
  3. Заново установите протокол — приложение автоматически загрузит и настроит AWG 2.0. Дополнительная ручная настройка не требуется.
  4. Проверьте соединение — после установки протокол будет использовать все новые возможности обфускации.

Важно: если вы ранее использовали AWG 1.0 или 1.5, необходимо переустановить протокол, чтобы активировать версию 2.0. Обновление приложения также принесет исправления ранее найденных ошибок и новые функции.

Signature Packets (i1-i5): мимикрия под легитимные протоколы

Signature packets — это ключевое нововведение AWG 2.0. Они представляют собой до пяти специальных пакетов, которые отправляются перед каждым handshake WireGuard (происходит раз в 2 минуты). Эти пакеты имитируют начало легитимного протокола, например DNS-запроса или QUIC-соединения.

Как это работает:

  • Обычный WireGuard: клиент сразу отправляет handshake, DPI видит характерные заголовки и блокирует трафик.
  • AWG 2.0: сначала отправляются signature packets, которые выглядят как обычный трафик (например, DNS). DPI пропускает их, а затем идет уже замаскированный handshake.

Каждый signature packet описывается на языке CPS (Custom Protocol Signature). Если параметр i1 не настроен, signature packets не отправляются, что обеспечивает обратную совместимость с AWG 1.0.

Пример простой конфигурации для имитации DNS:

i1 = **

Этот пакет начинается с фиксированных байт, характерных для DNS-запроса, затем добавляет временную метку и случайные данные.

Язык CPS: как создавать собственные сигнатуры

CPS (Custom Protocol Signature) — это специальный формат для описания signature packets. Он состоит из тегов, каждый из которых генерирует определенную часть пакета.

Доступные теги:

  • ** — вставляет точные байты (например, магические байты протокола).
  • `` — добавляет 4-байтовый Unix timestamp (big-endian).
  • `` — N случайных байт.
  • `` — N случайных букв/цифр (a-zA-Z0-9).
  • `` — N случайных цифр (0-9).
  • `` — pass-through (копия входных данных).
  • `` — Base64-кодированные входные данные.
  • `` — длина входных данных в big-endian.

Пример сигнатуры для имитации QUIC:

i1 = **

Здесь:

  • ** — начало QUIC Initial пакета (тип и версия).
  • `` — 8 случайных символов для Connection ID.
  • `` — временная метка.
  • `` — 50 случайных байт payload.

DPI видит первые байты 0xc7 0x00000001, характерные для QUIC, и пропускает трафик.

Range-based заголовки (H1-H4): динамические идентификаторы пакетов

В стандартном WireGuard каждый пакет начинается с 4-байтового идентификатора типа (1 — Handshake Init, 2 — Response, 3 — Cookie Reply, 4 — Transport Data). AWG 1.0 позволял заменить их на фиксированные значения, но DPI мог запомнить эти паттерны.

AWG 2.0 вводит range-based заголовки: вместо фиксированного числа можно задать диапазон значений. При отправке каждого пакета случайно выбирается значение из этого диапазона, что делает каждый пакет уникальным.

Пример:

H1 = 471800590-471800690  # 101 возможный вариант
H4 = 1769581055-1869581055  # 100 миллионов вариантов

Важное ограничение: диапазоны H1, H2, H3 и H4 не должны пересекаться, иначе невозможно определить тип пакета. При пересечении протокол выдаст ошибку "headers must not overlap".

По умолчанию заголовки равны стандартным значениям WireGuard (1, 2, 3, 4), поэтому AWG 2.0 без конфигурации полностью совместим с обычным WireGuard.

Расширенный padding: S3 и S4 для всех типов пакетов

В AWG 1.0 padding (добавление случайных байт) применялся только к handshake пакетам (S1, S2). Однако handshake происходит редко (раз в 2 минуты), а основной трафик — data пакеты — оставались с предсказуемыми размерами.

AWG 2.0 добавляет два новых параметра:

  • S3 (Cookie Reply Padding) — добавляет случайные байты к Cookie Reply пакетам, которые отправляются только при нагрузке на сервер. Стандартный размер Cookie Reply — 64 байта, что является хорошим индикатором для DPI. S3 делает размер случайным.
  • S4 (Transport Data Padding) — самый важный параметр. Добавляет случайные байты к каждому data-пакету (основной трафик). Это делает все пакеты разного размера, что затрудняет их идентификацию.

Пример конфигурации:

S1 = 68   # Handshake init padding
S2 = 149  # Handshake response padding
S3 = 32   # Cookie reply padding (новое)
S4 = 16   # Data padding (новое)

Важно: S4 не применяется к keepalive-пакетам (32 байта). При больших значениях padding может превысить MTU, что приведет к фрагментации.

Порядок отправки пакетов в AmneziaWG 2.0

Понимание последовательности отправки пакетов помогает правильно настроить обфускацию. Вот полный порядок при установке соединения:

  1. Signature packets (i1-i5) — отправляются только если настроены, перед каждым handshake.
  2. Junk packets — мусорные пакеты (Jc штук, размер от Jmin до Jmax).
  3. Handshake Initiation — [S1 padding | H1(random) 4 bytes | Handshake Initiation 144 bytes].
  4. Handshake Response — [S2 padding | H2(random) 4 bytes | Handshake Response 88 bytes].
  5. Cookie Reply (только при нагрузке) — [S3 padding | H3(random) 4 bytes | Cookie Reply 60 bytes].
  6. Transport Data (постоянно) — [S4 padding | H4(random) 4 bytes | Transport Data payload].

Ключевые моменты:

  • Signature packets и junk packets отправляются только при handshake (раз в 2 минуты).
  • S4 применяется к каждому data-пакету, что составляет основной объем трафика.
  • Range-based заголовки делают каждый пакет уникальным.

Такая многоуровневая защита делает трафик практически неотличимым от легитимного.

Практические примеры конфигураций для разных сценариев

Рассмотрим несколько готовых конфигураций для разных задач.

Имитация DNS-трафика:

i1 = **
Jc = 5
Jmin = 40
Jmax = 128
S1 = 68
S2 = 149
S4 = 16
H1 = 471800590-471800690
H2 = 1246894907-1246895000
H3 = 923637689-923637690
H4 = 1769581055-1869581055

Имитация QUIC (HTTP/3):

i1 = **
Jc = 7
Jmin = 50
Jmax = 1000
S1 = 32
S2 = 64
S3 = 16
S4 = 32
H1 = 100-200
H2 = 300-400
H3 = 500-600
H4 = 700-800

Минимальная конфигурация для совместимости с AWG 1.0:

Jc = 4
Jmin = 40
Jmax = 128
S1 = 68
S2 = 149

Важно: при выборе значений H1-H4 убедитесь, что диапазоны не пересекаются. Для signature packets используйте только теги, поддерживаемые вашей реализацией (go-движок или модуль ядра).

Ограничения и совместимость AmneziaWG 2.0

Несмотря на мощные возможности, AWG 2.0 имеет ряд ограничений:

  1. Только self-hosted — на момент написания AWG 2.0 доступен только для пользователей, которые разворачивают VPN на собственном сервере. Пользователи Free и Premium используют AWG 1.5.
  2. Различия в реализациях — go-движок (userspace) и модуль ядра Linux поддерживают разные наборы тегов CPS. Например, теги `, , не поддерживаются в модуле ядра, а тег (счетчик пакетов) — только в модуле ядра. Переносимые рецепты должны использовать только **, , , , `.
  3. Отсутствие защиты от replay — тег `` не проверяет значение timestamp, поэтому возможна атака повторного воспроизведения.
  4. Фрагментация — при больших значениях padding (особенно S4) пакеты могут превысить MTU, что приведет к фрагментации и потенциальному детектированию.
  5. Производительность — добавление случайных данных и множества пакетов увеличивает нагрузку на процессор и пропускную способность.

Перед использованием в критических сценариях рекомендуется протестировать конфигурацию в реальных условиях.

Вопросы и ответы

Чем AmneziaWG 2.0 отличается от обычного WireGuard?

AmneziaWG 2.0 — это модифицированная версия WireGuard с расширенной обфускацией. В отличие от стандартного WireGuard, который использует фиксированные заголовки и размеры пакетов, AWG 2.0 добавляет signature packets для мимикрии под легитимные протоколы, range-based заголовки для уникальности каждого пакета и padding для всех типов пакетов. Это делает трафик неотличимым от обычного UDP-трафика, что позволяет обходить современные DPI-системы.

Как установить AmneziaWG 2.0 на свой сервер?

Для установки AWG 2.0 необходимо:

  1. Скачать или обновить клиент AmneziaVPN до версии 4.8.12.9 или выше.
  2. Подключиться к серверу через приложение.
  3. Выбрать протокол AmneziaWG и заново установить его — приложение автоматически настроит AWG 2.0.

Дополнительная ручная настройка не требуется. Подробная инструкция доступна в официальном гайде.

Что такое signature packets и как они работают?

Signature packets (i1-i5) — это до пяти специальных пакетов, которые отправляются перед каждым handshake WireGuard. Они имитируют начало легитимного протокола, например DNS-запроса или QUIC-соединения. DPI видит эти пакеты и пропускает трафик, не замечая последующий замаскированный handshake. Каждый пакет описывается на языке CPS, что позволяет гибко настраивать имитацию.

Какие теги CPS поддерживаются в AmneziaWG 2.0?

В go-движке AWG 2.0 поддерживаются 8 тегов: ** (фиксированные байты), ` (timestamp), (случайные байты), (случайные буквы/цифры), (случайные цифры), (pass-through), (Base64), (длина данных). В модуле ядра Linux поддерживаются только **, , , , и дополнительный ` (счетчик). Для совместимости используйте только первые пять тегов.

Как настроить range-based заголовки и избежать ошибок?

Range-based заголовки задаются в формате N-M, где N и M — uint32 значения. Например, H1 = 100-200. Важно, чтобы диапазоны H1, H2, H3 и H4 не пересекались, иначе протокол выдаст ошибку "headers must not overlap". Хороший пример: H1=100-200, H2=300-400, H3=500-600, H4=700-800. По умолчанию заголовки равны стандартным значениям WireGuard (1, 2, 3, 4).

Влияет ли padding на скорость соединения?

Да, padding (особенно S4, который применяется к каждому data-пакету) увеличивает объем передаваемых данных и может незначительно снизить скорость. Однако это компромисс между маскировкой и производительностью. Рекомендуется начинать с небольших значений (например, S4=16) и увеличивать их при необходимости, тестируя скорость в реальных условиях.

Поддерживается ли AmneziaWG 2.0 на мобильных устройствах?

Да, AWG 2.0 поддерживается в клиенте AmneziaVPN для Android у пользователей self-hosted. Для iOS поддержка может быть добавлена позже. На данный момент десктопные приложения (Windows, macOS, Linux) и Android полностью поддерживают AWG 2.0.