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

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 + random(0..S1)
    len(resp) = 92 + random(0..S2)
    len(cookie) = 64 + random(0..S3)
    len(data) = payload + random(0..S4)

    Для корректной работы рекомендуется соблюдать правила:

    • S1 + 56 ≠ S2
    • S4 ≤ 32
  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>
    c<c>Счетчик пакетов (32-bit, network byte order)Уникален в рамках последовательностиАвтоматически: 1, 2, 3...
    t<t>Unix timestamp (32-bit, network byte order)Уникален в рамках последовательностиUnix time
    r<r length>Криптостойкие случайные байтыlength ≤ 1000<r 20>
    rc<rc N>Случайные ASCII-символы [A-Za-z0-9] — для имитации текстовых протоколовN ≤ 1000<rc 10> → "aB3dEf9H2k"
    rd<rd N>Случайные десятичные цифры [0-9] — для имитации числовых полейN ≤ 1000<rd 5> → "13654"

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

    i1 = <b 0xc7000000010><rc 8><c><t><r 50>

    Важно: Если параметр I1 отсутствует, то вся цепочка (I2-I5) пропускается и AmneziaWG ведёт себя как AmneziaWG 1.0 — это упрощает совместимость.

  4. Junk‑train (Jc)

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

  5. Пакет Cookie Reply

    В WireGuard сообщения Cookie Reply используются, когда сервер находится под нагрузкой и отправляет cookie‑challenge (защита от DoS). AmneziaWG маскирует эти пакеты так же, как и другие типы сообщений: 32-битный тип сообщения заменяется на настроенный «магический» заголовок H3 (значение из диапазона), после чего к пакету добавляется префикс из случайного количества байт 0..S3 (то есть размер становится 64 + random(0..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, но и в специализированных клиентах:

Обращайтесь в чат за помощью, если что-то не получается