Перейти к основному содержимому

AmneziaWG

AmneziaWG — это форк WireGuard-Go, который унаследовал простоту архитектуры и высокую производительность оригинала, но избавился от характерных сетевых «подписей», благодаря которым WireGuard легко определяется системами DPI (Deep Packet Inspection). 

Версия 1.5 вывела маскировку на новый уровень: трафик стал маскироваться под наиболее распространённые UDP‑протоколы (QUIC, DNS и др.).

Версия 2.0 развивает этот подход до «мимикрии»: трафик становится ещё менее узнаваемым для DPI не только в момент подключения, но и во время передачи данных за счёт постоянно меняющихся заголовков и размеров пакетов данных. В результате снижается вероятность распознавания VPN-трафика по характерным признакам и усложняется его эвристический анализ.

Прародитель AmneziaWG — WireGuard зарекомендовал себя как быстрый и надежный VPN-протокол благодаря компактному коду и высокой эффективности. Однако его фиксированные заголовки пакетов и предсказуемые размеры образуют легко узнаваемую сигнатуру. DPI‑системы без труда идентифицируют такие пакеты и могут мгновенно разрывать соединение — серьёзная проблема в странах с интернет-цензурой.

AmneziaWG 1.5 решал эту проблему через многоуровневую обфускацию на транспортном уровне: модифицировал заголовки пакетов, рандомизировал размеры handshake-сообщений и позволял маскировать трафик под популярные UDP‑протоколы.

AmneziaWG 2.0 ещё больше усиливает обфускацию: использует динамические диапазоны для заголовков вместо статических, добавляет случайные байты информации к специальным Wireguard-пакетам, а также расширяет сигнатурные CPS-пакеты перед рукопожатием, чтобы ещё более правдоподобно имитировать UDP-протоколы. При этом базовое криптографическое ядро WireGuard остается неизменным, сохраняя его производительность и безопасность.


Ключевые преимущества

  • Невидимость для DPI — динамические заголовки из заданных диапазонов и рандомизация размеров всех пакетов.
  • Маскировка протоколов — имитация QUIC, DNS, SIP и других UDP-протоколов.
  • Высокая производительность — работает как модуль ядра Linux, а шифрование использует однопроходный AEAD-алгоритм ChaCha20‑Poly1305 с SIMD‑оптимизацией, что и у WireGuard.
  • Энергоэффективность — код на Go исполняется в пользовательском пространстве без тяжёлых шифров, то есть подходит для мобильных устройств и роутеров.
  • Кроссплатформенность — поддержка всех основных операционных систем.
  • UDP‑транспорт — весь трафик передаётся поверх UDP, что упрощает обход блокировок и снижает задержку.
  • Простота настроек — достаточно указать сигнатуру маскировочного протокола; остальные параметры заполняются автоматически.
  • Обратная совместимость — при отключенных параметрах маскировки конфигурация AmneziaWG полностью совместима с WireGuard.

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

Ниже — шаг за шагом о том, как AmneziaWG 2.0 превращает классический WireGuard‑трафик в неуловимый поток UDP‑пакетов.

  1. Динамические заголовки всех типов пакетов (H1-H4)

    При инициализации туннеля библиотека генерирует набор случайных значений из заданных диапазонов, которые применяются к каждому из четырёх форматов пакета WireGuard: Init, Response, Cookie и Data. Эти значения:

    • подставляются вместо предсказуемых идентификаторов пакетов WireGuard;
    • сдвигают офсеты полей Version/Type;
    • изменяют зарезервированные биты.

    При отправке каждого пакета из диапазона выбирается случайное значение; при приёме допускается любое значение из диапазона. Это делает заголовок непредсказуемым даже для одного и того же типа пакета.

    Важно: диапазоны H1-H4 не должны пересекаться между собой.

    Таким образом, у двух разных клиентов не бывает совпадающих заголовков — универсальное DPI‑правило написать невозможно.

  2. Рандомизация длины пакетов (S1-S4)

    В WireGuard пакет Init занимает ровно 148 байт, Response — 92 байта, Cookie — 64 байта, Data — переменный размер (payload). AmneziaWG добавляет к ним псевдослучайные префиксы S1, S2, S3 и S4 (от 0 до 32/64 байт):

    len(init) = 148 + S1
    len(resp) = 92 + S2
    len(cookie) = 64 + S3
    len(data) = payload + S4
  3. Маскировочные пакеты I1-I5 (Signature Chain) и CPS (Custom Protocol Signature)

    Перед рукопожатием (каждые 120 секунд) клиент может послать до пяти разных UDP‑пакетов, полностью описанных пользователем в формате CPS. Главный элемент — I1 — содержит hex‑снимок реального протокола (например, QUIC Initial handshake), который также можно рандомизировать. Остальные I2-I5 наращивают энтропию за счёт счётчика, метки времени и случайных данных.

    Данный формат мы назвали CPS — Custom Protocol Signature:

    i{n} = <tag1><tag2><tag3>...<tagN>

    Типы тегов

    ТегФорматОписаниеОграниченияПример
    b<b hex_data>Статические байты для имитации протоколовПроизвольная длина<b 0xf6ab3267fa>
    t<t>Unix timestamp (32-bit, network byte order)Уникален в рамках последовательностиUnix time
    r<r length>Криптостойкие случайные байтыlength ≤ 1000<r 20>
    rc<rc N>Случайные ASCII-буквы [A-Za-z] — для имитации текстовых протоколовN ≤ 1000<rc 10> → "aBcDeFgHiJ"
    rd<rd N>Случайные десятичные цифры [0-9] — для имитации числовых полейN ≤ 1000<rd 5> → "13654"

    Пример CPS-пакета:

    i1 = <b 0xd100000001><rc 8><t><r 50>

    Пример выше лишь демонстрирует синтаксис CPS и не является примером сигнатуры. Не используйте его в качестве значения параметров I1-I5.

    Пакеты I1-I5 отправляются независимо, по порядку от I1 до I5. Для каждого заданного параметра отправляется соответствующий пакет. Если один из параметров отсутствует, остальные заданные пакеты всё равно отправляются. Если не задан ни один из параметров I1-I5, CPS-пакеты не отправляются.

  4. Junk‑train (Jc)

    Сразу после цепочки I‑пакетов отправляется Jc псевдослучайных пакетов длиной от Jmin до Jmax. Они размывают начало сессии во времени и по габаритам, ещё сильнее затрудняя определение рукопожатия.

  5. Пакет Cookie Reply

    В WireGuard сообщения Cookie Reply используются, когда сервер находится под нагрузкой и отправляет cookie-challenge (защита от DoS). AmneziaWG маскирует эти пакеты так же, как и другие типы сообщений: 32-битный тип сообщения заменяется на настроенный «магический» заголовок H3 (значение из диапазона). После этого перед пакетом добавляется префикс фиксированной длины S3 байт. Содержимое префикса случайное, но его длина не меняется, поэтому размер Cookie Reply равен 64 + S3.

  6. UDP‑транспорт без изменений шифрования

    На уровне криптографии AmneziaWG идентичен WireGuard: Curve25519, ChaCha20‑Poly1305 и двусторонний key‑rotation. Обфускация работает строго на транспортном уровне; payload остаётся полностью совместимым с оригинальным протоколом. В AmneziaWG изменены заголовки всех пакетов.

    Итого: DPI видит хаотичную последовательность UDP‑пакетов с непредсказуемыми заголовками, длиной пакетов, размазанным рукопожатием и уникальной сигнатурой пользователя. При этом по скорости и надёжности туннель практически не отличается от WireGuard.


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

ПараметрДиапазонНазначение
I1-I5arbitrary hex‑blobСигнатурные пакеты для имитации протоколов
S1-S40-64 (S1-S3) или 0-32 (S4) байтаСлучайные префиксы для Init/Response/Cookie/Data пакетов
Jc0-10Количество junk-пакетов после I1‑I5
Jmin, Jmax64-1024 байтаДиапазон случайного размера junk‑пакетов
H1-H40-4,294,967,295Динамические заголовки пакетов данных

При нулевых значениях всех параметров поведение идентично WireGuard — это облегчает «мягкий» переход.


Безопасность

AmneziaWG 2.0 не меняет криптографию WireGuard, а значит наследует его доказанную безопасность (протокол обмена ключами Noise_IK с Curve25519, AEAD ChaCha20‑Poly1305). Маскировочные поля подписываются теми же MAC‑тегами, что и основные заголовки.

Аудит безопасности: поскольку криптографическое ядро не изменено, применимы все существующие анализы безопасности WireGuard.


Дальнейшие шаги

Подробные инструкции по развертыванию и настройке:


Дополнительные ресурсы

Нативные клиенты AmneziaWG

Конфигурации можно использовать не только в AmneziaVPN, но и в специализированных клиентах: