AmneziaWG 2.0 и 3.1: Полное руководство по мимикрии VPN-трафика

Подробный обзор протокола AmneziaWG: от версии 2.0 с CPS-сигнатурами до версии 3.1 с защитой от поведенческого анализа. Как настроить, какие параметры использовать и как это помогает обходить DPI.

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

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

Основная проблема WireGuard в том, что его пакеты легко идентифицируются DPI-системами по статическим сигнатурам: размер handshake-пакета (148 байт), фиксированные 4-байтовые идентификаторы типа (Type=1,2,3,4) и регулярные интервалы переподключения. AmneziaWG решает эту проблему, добавляя случайные префиксы, динамические заголовки и цепочки маскировочных пакетов перед каждым рукопожатием.

Протокол доступен в нескольких версиях: 1.5 (базовая маскировка), 2.0 (полная мимикрия с CPS) и 3.1 (защита от поведенческого анализа). Все версии сохраняют криптографическое ядро WireGuard (ChaCha20-Poly1305) и высокую производительность.

Эволюция версий: от маскировки к мимикрии

Первая версия AmneziaWG (1.0) умела отправлять мусорные пакеты перед handshake (параметры Jc, Jmin, Jmax), изменять размеры handshake-пакетов через padding (S1, S2) и заменять стандартные заголовки на фиксированные значения (H1-H4). Этого было достаточно против простых signature-based DPI.

Версия 1.5 добавила возможность маскировать трафик под популярные UDP-протоколы, но всё ещё использовала статические заголовки. Версия 2.0, выпущенная в 2025 году, стала революционным шагом: она ввела динамические диапазоны для заголовков (H1-H4 теперь выбираются случайно из заданного интервала), расширенный padding для всех типов пакетов (S3 для Cookie Reply и S4 для Transport Data) и, самое главное, систему CPS (Custom Protocol Signature) для создания поддельных пакетов, имитирующих начало легитимных протоколов.

Версия 3.1, появившаяся в 2026 году как ответ на массовые блокировки, добавила защиту от поведенческого анализа: меняются не только заголовки и размеры, но и последовательность, интервалы между пакетами, а также часть служебных данных. Также был введён механизм Header Protection, который шифрует незашифрованные служебные части пакетов с помощью ChaCha20.

Как работает CPS: язык создания сигнатур

CPS (Custom Protocol Signature) — это специальный формат для описания поддельных пакетов, которые отправляются перед каждым настоящим WireGuard handshake. DPI-система видит начало пакета, распознаёт в нём, например, DNS-запрос, и пропускает трафик, не проверяя, что идёт дальше.

Формат CPS состоит из тегов:

  • ** — вставляет точные байты (скелет сигнатуры, магические байты протокола).
  • `` — вставляет текущий Unix timestamp (4 байта), что делает каждый пакет уникальным.
  • `` — вставляет N криптостойких случайных байт (до 1000).
  • `` — вставляет N случайных букв латинского алфавита (A-Z, a-z), полезно для имитации текстовых протоколов.
  • `` — вставляет N случайных цифр (0-9), полезно для имитации числовых полей.

Пример сигнатуры, имитирующей QUIC Initial packet:

i1 = **

Здесь ** — это начало QUIC Initial handshake, ` — 8 случайных букв (имитация Connection ID), — метка времени, ` — 50 случайных байт payload. DPI видит это как начало QUIC-соединения и пропускает.

Можно настроить до 5 таких пакетов (i1-i5), которые отправляются последовательно перед каждым handshake (раз в 2 минуты). Если i1 не настроен, CPS-пакеты не отправляются.

Динамические заголовки и расширенный padding

В WireGuard каждый пакет начинается с 4-байтового идентификатора типа. AmneziaWG 2.0 позволяет задавать для каждого типа пакета не фиксированное значение, а диапазон. Например:

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

При отправке каждого пакета из диапазона выбирается случайное значение, при приёме допускается любое значение из диапазона. Это делает заголовки непредсказуемыми даже для одного и того же типа пакета. Важно: диапазоны H1-H4 не должны пересекаться, иначе невозможно будет определить тип пакета.

Расширенный padding добавляет случайные байты к пакетам:

  • S1 — к Handshake Init (было в 1.0)
  • S2 — к Handshake Response (было в 1.0)
  • S3 — к Cookie Reply (новое в 2.0, применяется только когда сервер под нагрузкой)
  • S4 — к Transport Data (новое в 2.0, применяется ко всем data-пакетам постоянно)

Например, стандартный Data-пакет WireGuard имеет размер payload + 16 байт заголовка. С S4=16 к каждому data-пакету добавляется 16 случайных байт, что делает размеры пакетов непредсказуемыми.

Полный порядок отправки пакетов в AmneziaWG 2.0

При установке соединения последовательность выглядит так:

  1. Если настроены, отправляются CPS-пакеты i1 → i2 → i3 → i4 → i5 (до 5 пакетов, имитирующих легитимный протокол).
  2. Отправляется Jc мусорных пакетов (junk train) длиной от Jmin до Jmax — они размывают начало сессии.
  3. Отправляется Handshake Init: [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. Весь последующий data-трафик: [S4 padding | H4(random) 4 bytes | Transport Data payload].

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

  • CPS-пакеты отправляются только если настроены.
  • Junk packets отправляются всегда перед handshake.
  • S1/S2 применяются только к handshake-пакетам.
  • S3 применяется редко (только под нагрузкой).
  • S4 применяется к каждому data-пакету — это основной механизм маскировки постоянного трафика.
  • H1-H4 с диапазонами делают каждый пакет уникальным.

AmneziaWG 3.1: защита от поведенческого анализа

Версия 3.1 появилась как ответ на массовые блокировки в России в июне-июле 2026 года, которые показали, что одной маскировки отдельных признаков трафика уже недостаточно. DPI-системы начали использовать поведенческий анализ: они анализируют не только заголовки и размеры пакетов, но и последовательность, интервалы между пакетами, cookie-поведение и другие статистические паттерны.

Основные нововведения 3.1:

  • Header Protection — шифрование незашифрованных служебных частей WireGuard-пакетов с помощью ChaCha20. Nonce берётся из первых 12 байт соответствующего префикса S1-S4, а ключ задаётся параметром HeaderProtectionKey. При использовании этого механизма рекомендуется оставлять H1-H4 в стандартных значениях (H1=1, H2=2, H3=3, H4=4), так как скрытие типа сообщения теперь выполняет Header Protection.
  • Изменение таймингов — интервалы между служебными событиями (handshake, cookie reply) варьируются, что делает поведение разных сессий менее повторяемым.
  • Скрытие cookie-поведения — WireGuard имеет характерное поведение при отправке cookie reply, которое может использоваться для активного зондирования. В 3.1 это поведение маскируется.

Важно: криптографическое ядро WireGuard остаётся неизменным, сохраняя производительность и безопасность.

Как настроить AmneziaWG на собственном сервере

Для использования AmneziaWG 2.0 на собственном сервере (self-hosted) необходимо:

  1. Скачать или обновить приложение AmneziaVPN до версии 4.8.12.9 и выше (доступно на официальном сайте или зеркалах).
  2. Установить протокол AmneziaWG 2.0 через приложение — дополнительная настройка не требуется, все параметры заполняются автоматически.
  3. Для тонкой настройки можно отредактировать конфигурацию вручную, указав параметры H1-H4, S1-S4, i1-i5 и Jc/Jmin/Jmax.

Для Windows существует отдельное приложение AmneziaWG Client, доступное на GitHub. После установки нужно добавить туннель (импортировать конфигурацию) и нажать "Подключить".

Важные ограничения:

  • Диапазоны H1-H4 не должны пересекаться.
  • CPS-пакеты (i1-i5) должны быть корректно составлены — неправильная сигнатура может не пройти DPI или вызвать ошибки.
  • S4 padding увеличивает объём трафика, что может незначительно снизить скорость (компромисс между маскировкой и производительностью).
  • Версия 3.1 пока доступна только для self-hosted пользователей; поддержка в Free и Premium версиях будет добавлена позже.

Практические примеры конфигураций

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

i1 = **

Здесь ** — это начало DNS-запроса (Transaction ID, флаги, вопросы). ` добавляет уникальную метку времени, ` — 15 случайных байт для имитации остальной части запроса.

Пример конфигурации с диапазонами заголовков и padding:

H1 = 471800590-471800690
H2 = 1246894907-1246895000
H3 = 923637689-923637690
H4 = 1769581055-1869581055
S1 = 68
S2 = 149
S3 = 32
S4 = 16
Jc = 5
Jmin = 50
Jmax = 100

Для версии 3.1 с Header Protection:

H1 = 1
H2 = 2
H3 = 3
H4 = 4
HeaderProtectionKey = <32-байтовый ключ в hex>
S1 = 32
S2 = 32
S3 = 16
S4 = 8

Важно: не используйте примеры сигнатур из документации напрямую — они могут быть уже известны DPI-системам. Рекомендуется создавать собственные сигнатуры на основе реального трафика легитимных протоколов.

Ограничения и рекомендации

AmneziaWG — мощный инструмент, но он не даёт 100% гарантии обхода блокировок. DPI-системы постоянно эволюционируют, и то, что работает сегодня, может быть заблокировано завтра.

Основные ограничения:

  • CPS-пакеты добавляют задержку при установке соединения (до 5 дополнительных пакетов перед handshake).
  • S4 padding увеличивает объём трафика на 8-64 байта на каждый data-пакет, что может быть заметно при большом объёме передачи.
  • Неправильно настроенные диапазоны H1-H4 (пересечение) приведут к неработоспособности туннеля.
  • Header Protection в 3.1 требует генерации и безопасного хранения ключа.

Рекомендации:

  • Используйте разные сигнатуры для разных серверов, чтобы DPI не могла создать универсальное правило.
  • Регулярно обновляйте приложение AmneziaVPN до последней версии.
  • Комбинируйте AmneziaWG с другими методами обфускации (например, XRay) для повышения надёжности.
  • Для максимальной защиты используйте версию 3.1 с Header Protection и динамическими таймингами.

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

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

WireGuard имеет фиксированные заголовки пакетов (4 байта типа) и предсказуемые размеры (handshake 148 байт, response 92 байта и т.д.), что позволяет DPI-системам легко его идентифицировать. AmneziaWG модифицирует эти параметры: добавляет случайные префиксы (padding), динамические заголовки из диапазонов, цепочки маскировочных CPS-пакетов перед handshake, а в версии 3.1 — ещё и шифрует служебные части пакетов (Header Protection) и меняет тайминги. При этом криптографическое ядро (ChaCha20-Poly1305) остаётся неизменным.

Что такое CPS и как создать свою сигнатуру?

CPS (Custom Protocol Signature) — это формат для описания поддельных пакетов, которые имитируют начало легитимных UDP-протоколов. Сигнатура состоит из тегов: ** (точные байты), ` (timestamp), (случайные байты), (случайные буквы), (случайные цифры). Чтобы создать свою сигнатуру, нужно захватить реальный пакет нужного протокола (например, DNS-запрос) с помощью Wireshark, взять первые 50-200 байт, заменить динамические поля (ID, timestamp) на соответствующие теги и добавить случайные данные в конец. Пример для QUIC: i1 = **`.

Какие версии AmneziaWG сейчас актуальны?

На данный момент актуальны три версии: 1.5 (базовая маскировка, используется в Free и Premium версиях AmneziaVPN), 2.0 (полная мимикрия с CPS и динамическими заголовками, доступна для self-hosted) и 3.1 (защита от поведенческого анализа, также для self-hosted). Версия 2.0 поддерживается в клиенте AmneziaVPN для десктопов и Android начиная с версии 4.8.12.9. Версия 3.1 появилась в 2026 году и пока доступна только для self-hosted пользователей.

Как настроить AmneziaWG на Windows?

Для Windows нужно скачать приложение AmneziaWG Client с GitHub (релизы), установить его, затем добавить туннель, импортировав конфигурационный файл (например, полученный от self-hosted сервера). После этого нажать "Подключить". Приложение автоматически применит все настройки маскировки, указанные в конфигурации. Если вы используете AmneziaVPN (основное приложение), то протокол устанавливается автоматически при выборе сервера.

Может ли AmneziaWG полностью гарантировать обход блокировок?

Нет, ни один VPN-протокол не может дать 100% гарантии. DPI-системы постоянно совершенствуются, и методы обфускации, которые работают сегодня, могут быть скомпрометированы завтра. AmneziaWG значительно усложняет детекцию за счёт мимикрии под легитимные протоколы и динамических параметров, но для максимальной надёжности рекомендуется комбинировать его с другими методами (например, XRay, Shadowsocks) и регулярно обновлять конфигурации.

Что такое Header Protection в AmneziaWG 3.1?

Header Protection — это механизм шифрования незашифрованных служебных частей WireGuard-пакетов (Init, Response, Cookie, первые 16 байт Data) с помощью алгоритма ChaCha20. Nonce берётся из первых 12 байт соответствующего префикса S1-S4, а ключ задаётся параметром HeaderProtectionKey. При использовании этого механизма рекомендуется отключать пользовательские заголовки H1-H4 (оставить стандартные значения 1,2,3,4), так как скрытие типа сообщения теперь выполняет шифрование. Это защищает от DPI, которые анализируют не только заголовки, но и содержимое служебных полей.

Какие параметры padding влияют на скорость соединения?

Основное влияние на скорость оказывает параметр S4 (Transport Data padding), так как он применяется к каждому data-пакету. Добавление 8-64 случайных байт к каждому пакету увеличивает объём трафика и может незначительно снизить пропускную способность, особенно на медленных соединениях. Параметры S1, S2, S3 применяются только к служебным пакетам (handshake, cookie reply), которые отправляются редко (раз в 2 минуты), поэтому их влияние на скорость минимально. Junk train (Jc) также отправляется только перед handshake и не влияет на постоянный трафик.