AmneziaWG 2.0: как работает мимикрия трафика и что нового в протоколе

Разбираем AmneziaWG 2.0: signature-пакеты, динамические заголовки, padding S3/S4, язык CPS и практические сценарии настройки для обхода DPI.

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

AmneziaWG — это форк популярного протокола WireGuard, разработанный командой Amnezia VPN. Его главная задача — сохранить высокую скорость и простоту оригинального WireGuard, но при этом сделать трафик невидимым для систем глубокого анализа пакетов (DPI). Обычный WireGuard легко обнаружить по фиксированным заголовкам пакетов и предсказуемым размерам сообщений: handshake-пакет всегда 148 байт, ответ — 92, cookie — 64. DPI-системы, используемые провайдерами для блокировок, запоминают эти сигнатуры и мгновенно режут соединение.

Первая версия AmneziaWG появилась в 2023 году и позволяла менять заголовки, добавлять мусорные пакеты и изменять размеры handshake. Этого хватало против простых сигнатурных фильтров, но современные DPI научились анализировать статистические паттерны: размеры пакетов, временные интервалы, последовательности. Поэтому в 2025 году вышла версия 2.0, которая делает шаг от простой маскировки к полноценной мимикрии под легитимные UDP-протоколы — DNS, QUIC, SIP и другие.

Важно понимать: AmneziaWG не меняет криптографическое ядро WireGuard. Шифрование остаётся прежним — ChaCha20-Poly1305 с однопроходным AEAD. Это значит, что производительность и безопасность остаются на уровне оригинала, но сетевой трафик становится гораздо менее узнаваемым.

Эволюция: от AmneziaWG 1.0 к 2.0

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

Главная проблема фиксированных заголовков: если H1 всегда равен, скажем, 1234567890, DPI быстро запоминает этот паттерн и блокирует все пакеты с таким значением. Аналогично с размерами: handshake происходит раз в две минуты, но data-пакеты (основной трафик) имели стандартные размеры, что тоже позволяло вычислить VPN.

AmneziaWG 2.0 решает эти проблемы радикально:

  • Signature-пакеты (i1–i5) — перед каждым handshake клиент отправляет до пяти специальных пакетов, которые имитируют начало легитимного протокола (DNS, QUIC, SIP). DPI видит «обычный» трафик и пропускает его.
  • Расширенный padding (S3, S4) — теперь можно добавлять случайные байты не только к handshake, но и к cookie-reply и к каждому транспортному пакету. Это делает размеры всех пакетов непредсказуемыми.
  • Динамические заголовки (H1–H4 с диапазонами) — вместо фиксированного значения заголовок выбирается случайно из заданного диапазона. Например, H4 может быть любым числом от 1,7 до 1,8 миллиарда. DPI не может запомнить все варианты.

В совокупности эти изменения позволяют трафику AmneziaWG 2.0 выглядеть как обычный интернет-трафик, а не как VPN.

Signature-пакеты: как работает мимикрия

Signature-пакеты — это ключевое нововведение AmneziaWG 2.0. Идея проста: перед каждым настоящим WireGuard handshake (который происходит раз в 120 секунд) клиент отправляет серверу последовательность из одного-пяти UDP-пакетов, которые выглядят как начало какого-то легитимного протокола. Например, как DNS-запрос или QUIC Initial.

Технически это выглядит так:

  1. Клиент отправляет i1 — пакет, имитирующий начало DNS-запроса или QUIC-соединения.
  2. Затем i2, i3 и т.д. — дополнительные пакеты для увеличения энтропии.
  3. После них идёт junk-train (мусорные пакеты) и сам handshake с обфусцированными заголовками.

DPI-система видит первые пакеты, распознаёт в них знакомый протокол (например, DNS) и пропускает весь поток как легитимный. Настоящий handshake скрыт за маской.

Каждый signature-пакет описывается на языке CPS (Custom Protocol Signature). Это набор тегов, которые определяют, из чего собрать пакет:

  • ** — вставить точные байты (например, магические байты протокола).
  • `` — добавить временную метку Unix (4 байта).
  • `` — добавить N криптографически случайных байт.
  • `` — добавить N случайных букв/цифр (для текстовых протоколов).
  • `` — добавить N случайных цифр.

Пример сигнатуры QUIC:

i1 = **

Здесь ** — начало QUIC Initial пакета (тип 0xc7, версия 1), ` — 8 случайных символов для Connection ID, — временная метка, ` — 50 случайных байт payload. В результате пакет выглядит как легитимный QUIC-запрос, хотя на самом деле это часть VPN-туннеля.

Важно: если параметр i1 не настроен, signature-пакеты не отправляются вовсе — это обеспечивает обратную совместимость с версией 1.0.

Динамические заголовки H1–H4: уходим от статики

В WireGuard каждый пакет начинается с 4-байтового идентификатора типа: 1 — Handshake Initiation, 2 — Handshake Response, 3 — Cookie Reply, 4 — Transport Data. Эти значения фиксированы и являются лёгкой мишенью для DPI.

AmneziaWG 1.0 позволял заменить их на свои константы, но это не спасало: если H1 всегда равен 1234567890, DPI запоминает этот паттерн. Версия 2.0 вводит диапазоны — теперь заголовок выбирается случайно из заданного интервала.

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

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

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

Критическое ограничение: диапазоны H1, H2, H3 и H4 не должны пересекаться. Если они пересекутся, протокол не сможет определить тип пакета. Например, если H1 = 1000-2000, а H2 = 1500-2500, то пакет с заголовком 1700 будет непонятно к какому типу отнести.

Динамические заголовки особенно эффективны в сочетании с padding: даже если DPI попытается анализировать размеры пакетов, они будут разными из-за случайных добавок.

Padding S3 и S4: скрываем размеры data-пакетов

В WireGuard размеры служебных пакетов строго фиксированы: Init — 148 байт, Response — 92, Cookie — 64. Data-пакеты имеют переменный размер, но их распределение тоже предсказуемо. DPI-системы используют эту информацию для эвристического анализа.

AmneziaWG 1.0 позволял менять размеры только handshake-пакетов (S1, S2). Но handshake происходит редко — раз в две минуты. Основной объём трафика — это data-пакеты, и они оставались с характерными размерами.

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

  • S3 — padding для Cookie Reply. Этот пакет отправляется сервером только при высокой нагрузке (защита от DoS). Стандартный размер — ровно 64 байта, что является отличным индикатором для DPI. S3 добавляет случайное количество байт (например, 32) к этому пакету.
  • S4 — padding для всех транспортных (data) пакетов. Это самый важный параметр: он добавляет случайные байты к каждому зашифрованному пакету, несущему реальный интернет-трафик. Работает постоянно.

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

S1 = 68   # Handshake init padding
S2 = 149  # Handshake response padding
S3 = 32   # Cookie reply padding
S4 = 16   # Data padding

Важно понимать компромисс: чем больше padding, тем выше маскировка, но тем больше трафика уходит впустую. S4 = 16 байт на пакет — это разумный баланс, но для максимальной скрытности можно увеличить значение. Однако слишком большой padding может снизить скорость и увеличить расход трафика, особенно на мобильных устройствах.

Аналогия: представьте, что вы отправляете посылки. В версии 1.0 вы меняли размер только первой коробки, а остальные были стандартными. В версии 2.0 вы добавляете случайное количество упаковочного материала в каждую посылку — теперь все они разного размера, и понять, что внутри, гораздо сложнее.

Язык CPS: конструктор поддельных пакетов

CPS (Custom Protocol Signature) — это специальный формат для описания signature-пакетов. Он позволяет создавать «поддельные» пакеты, которые выглядят как начало легитимного протокола. Это своего рода конструктор: вы задаёте последовательность тегов, и протокол собирает пакет по вашему описанию.

Основные теги CPS:

| Тег | Описание | Пример | |-----|----------|--------| | ** | Вставляет точные байты (скелет сигнатуры) | ** | | ` | Вставляет Unix-временную метку (4 байта) | | | | Вставляет N случайных байт | | | | Вставляет N случайных букв/цифр [A-Za-z] | aB3dEf9H2k | | | Вставляет N случайных цифр [0-9] | 13654` |

Принцип работы на примере имитации DNS:

i1 = **

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

CPS даёт почти безграничные возможности: можно имитировать QUIC, SIP, DNS, любые другие UDP-протоколы. Главное — правильно подобрать магические байты и структуру пакета. Для популярных протоколов в документации Amnezia есть готовые примеры, которые можно адаптировать под свои нужды.

Важно: не стоит использовать примеры из документации как готовые сигнатуры — они приведены только для демонстрации синтаксиса. Для реального использования лучше создавать собственные сигнатуры на основе анализа реального трафика.

Практическая настройка: как развернуть AmneziaWG 2.0

Чтобы использовать AmneziaWG 2.0, необходимо:

  1. Установить или обновить приложение AmneziaVPN до версии 4.8.12.9 или выше. Скачать можно с официального сайта или зеркала. Для пользователей Free и Premium пока доступна версия 1.5, но поддержка 2.0 для этих продуктов появится позже. Self-hosted пользователи уже могут использовать 2.0.
  1. Развернуть VPN на собственном сервере. Для этого нужен VPS-сервер. В приложении AmneziaVPN есть мастер настройки, который автоматически установит и настроит протокол. Достаточно выбрать AmneziaWG в качестве протокола и следовать инструкциям.
  1. Настроить параметры обфускации. После установки протокола можно отредактировать конфигурацию, добавив параметры i1–i5, S1–S4, H1–H4 и другие. В приложении есть удобный интерфейс для этого, либо можно редактировать конфигурационный файл вручную.

Пример базовой конфигурации с мимикрией под QUIC:

[Interface]
PrivateKey = ...
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = ...
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0

# AmneziaWG параметры
Jc = 5
Jmin = 50
Jmax = 100
S1 = 68
S2 = 149
S3 = 32
S4 = 16
H1 = 471800590-471800690
H2 = 1246894907-1246895000
H3 = 923637689-923637690
H4 = 1769581055-1869581055

i1 = **

Для Windows существует отдельное приложение AmneziaWG, которое можно скачать с GitHub. Оно позволяет добавлять туннели из конфигурационных файлов и подключаться в один клик. Для Android также есть отдельное приложение AmneziaWG.

Важно: после обновления приложения необходимо заново установить протокол на сервере, чтобы активировать AWG 2.0. Дополнительная настройка не требуется — мастер сделает всё автоматически.

Сравнение с другими протоколами и ограничения

AmneziaWG 2.0 — не единственный протокол с обфускацией. Существуют также OpenVPN с обфускацией, Shadowsocks, XRay (VLESS, Trojan). Однако у AmneziaWG есть важные преимущества:

  • Высокая производительность — работает как модуль ядра Linux, использует быстрый ChaCha20-Poly1305 с SIMD-оптимизацией.
  • Энергоэффективность — Go-код работает в пользовательском пространстве без тяжёлой криптографии, что важно для мобильных устройств и роутеров.
  • Простота настройки — достаточно указать сигнатуру маскирующего протокола, остальные параметры заполняются автоматически.
  • Обратная совместимость — при отключении параметров маскировки конфигурация полностью совместима с WireGuard.

Однако есть и ограничения:

  • Только UDP — AmneziaWG работает только поверх UDP, что может быть проблемой в сетях, где UDP блокируется или ограничивается.
  • Не защищает от всех видов DPI — хотя мимикрия значительно усложняет детектирование, очень продвинутые системы могут анализировать поведение соединения в целом (частоту, размеры, тайминги).
  • Требуется собственный сервер — для использования AmneziaWG 2.0 нужен VPS, что требует некоторых технических навыков и затрат.

Также стоит помнить, что в некоторых странах использование VPN может быть ограничено законодательством. Перед использованием убедитесь, что это разрешено в вашей юрисдикции.

Будущее протокола: что дальше

Команда Amnezia продолжает развивать протокол. Уже анонсирована версия 3.1, которая была разработана в ответ на массовые блокировки в России в июне-июле 2026 года. Эта версия делает статистический анализ соединений ещё более сложным за счёт:

  • Header Protection — дополнительное скрытие незашифрованных служебных частей пакетов с помощью ChaCha20.
  • Content Padding — добавление случайных байт к транспортным пакетам для нарушения статистических паттернов.
  • Custom Timings — изменение фиксированных интервалов (re-handshake, keepalive) на случайные диапазоны.
  • Random Trailers — добавление случайных байт в конец пакетов для маскировки последовательностей.
  • DisableCookies — возможность отключить отправку Cookie Reply, чтобы не выдавать себя.

Эти нововведения показывают, что борьба с DPI — это постоянная гонка вооружений. Каждое новое поколение DPI требует новых методов обфускации. AmneziaWG 3.1 уже доступна в документации, и её поддержка в клиентах ожидается в ближайшее время.

Для пользователей, которые хотят оставаться на переднем крае, важно следить за обновлениями и вовремя обновлять приложения и протоколы на серверах.

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

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

AmneziaWG 2.0 — это форк WireGuard, который добавляет многоуровневую обфускацию трафика. В отличие от стандартного WireGuard с фиксированными заголовками и размерами пакетов, AmneziaWG 2.0 использует динамические заголовки (H1–H4 с диапазонами), случайный padding (S1–S4) и signature-пакеты (i1–i5), которые имитируют легитимные UDP-протоколы (DNS, QUIC, SIP). Криптографическое ядро остаётся прежним — ChaCha20-Poly1305, поэтому скорость и безопасность сохраняются.

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

Для этого нужно: 1) установить или обновить приложение AmneziaVPN до версии 4.8.12.9 или выше; 2) развернуть VPN на VPS-сервере через мастер приложения; 3) после установки протокола отредактировать конфигурацию, добавив параметры i1–i5, S1–S4, H1–H4. Подробная инструкция есть в документации Amnezia. Для Windows и Android существуют отдельные приложения AmneziaWG, которые позволяют импортировать конфигурации и подключаться в один клик.

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

CPS (Custom Protocol Signature) — это язык описания signature-пакетов. Он использует теги: ** для вставки точных байт, ` для временной метки, для случайных байт, для случайных букв/цифр, для случайных цифр. Например, сигнатура QUIC: i1 = **`. Чтобы создать свою сигнатуру, нужно изучить структуру реального протокола и воспроизвести её с помощью тегов. Готовые примеры есть в документации, но для надёжности лучше создавать уникальные сигнатуры.

Какие ограничения у AmneziaWG 2.0?

Основные ограничения: 1) работает только по UDP, что может быть проблемой в сетях с блокировкой UDP; 2) не гарантирует 100% защиту от самых продвинутых DPI, которые анализируют поведение соединения; 3) требует собственного VPS-сервера, что связано с затратами и техническими навыками; 4) диапазоны H1–H4 не должны пересекаться, иначе протокол не сможет определить тип пакета; 5) слишком большой padding (S4) может снизить скорость и увеличить расход трафика.

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

Да, AmneziaWG 2.0 поддерживается в клиенте AmneziaVPN для Android и десктопных приложений (Windows, macOS, Linux). Для Android также есть отдельное приложение AmneziaWG. Благодаря энергоэффективной реализации на Go, протокол подходит для мобильных устройств и роутеров. Пользователи Free и Premium пока используют версию 1.5, но поддержка 2.0 для этих продуктов будет добавлена позже.

Что делать, если AmneziaWG 2.0 заблокировали?

Если DPI всё же обнаружил трафик, можно попробовать: 1) изменить сигнатуру i1–i5 на другую (например, вместо QUIC использовать DNS или SIP); 2) увеличить диапазоны H1–H4 и padding S4; 3) обновить протокол до версии 3.1, которая добавляет Header Protection, Content Padding и Custom Timings для защиты от поведенческого анализа. Также стоит проверить, не пересекаются ли диапазоны H1–H4, и убедиться, что конфигурация корректна.