AmneziaWG 2.0: мимикрия трафика и обход DPI — полный разбор протокола

Разбираем AmneziaWG 2.0: сигнатурные пакеты, CPS, динамические заголовки, padding. Как настроить self-hosted VPN и защититься от DPI.

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

AmneziaWG — это форк протокола WireGuard, разработанный командой Amnezia для обхода систем глубокого анализа трафика (DPI). WireGuard, при всех своих достоинствах — скорости, простоте, криптографической надёжности, — имеет фиксированные заголовки пакетов и предсказуемые размеры сообщений. Эти признаки позволяют DPI-системам легко идентифицировать WireGuard-трафик и блокировать его. AmneziaWG решает эту проблему, модифицируя транспортный уровень: изменяет заголовки, добавляет случайные данные и имитирует легитимные UDP-протоколы.

Первая версия AmneziaWG вышла в 2023 году (по данным Habr) или в 2024 году (по данным блога Amnezia), что отражает разные даты публикаций. Версия 1.0 умела отправлять «мусорные» пакеты перед handshake, изменять размеры handshake-пакетов и заменять стандартные заголовки WireGuard на фиксированные значения. Этого хватало против простых сигнатурных DPI, но современные системы анализируют статистические паттерны, размеры пакетов и временные характеристики, поэтому потребовалось более серьёзное решение.

AmneziaWG 2.0, выпущенный в 2025 году, стал ответом на ужесточение интернет-цензуры. Он не просто маскирует трафик, а заставляет его мимикрировать под легитимные UDP-протоколы — DNS, QUIC, SIP и другие. Это достигается за счёт нескольких ключевых нововведений: сигнатурных пакетов, системы CPS, динамических диапазонов заголовков и расширенного padding. В 2026 году вышла версия 3.1, которая дополнительно усложняет статистический анализ соединения, но в этой статье мы сосредоточимся на AmneziaWG 2.0 как на важном этапе эволюции.

Проблема DPI: почему WireGuard легко блокируется

Системы DPI (Deep Packet Inspection) анализируют содержимое пакетов, а не только заголовки IP/TCP/UDP. Они ищут сигнатуры протоколов — характерные последовательности байтов, размеры пакетов, временные интервалы между ними. WireGuard имеет четыре типа пакетов: Handshake Initiation (148 байт), Handshake Response (92 байта), Cookie Reply (64 байта) и Transport Data (переменный размер). Каждый тип начинается с фиксированного 4-байтового идентификатора: 1, 2, 3 и 4 соответственно.

Эти константы — лёгкая добыча для DPI. Система видит пакет с заголовком 4 и размером, кратным 16, и сразу понимает: это WireGuard. Даже если зашифровать полезную нагрузку, заголовки остаются открытыми. Кроме того, handshake происходит каждые 2 минуты, что создаёт регулярный паттерн, который можно выявить статистически.

AmneziaWG 1.0 пытался решить эту проблему, заменяя фиксированные заголовки на произвольные значения (параметры H1-H4). Но эти значения были статическими для всех пакетов одного типа. DPI могла запомнить паттерн: например, все data-пакеты имеют заголовок 1234567890. Через некоторое время блокировка возвращалась.

Версия 2.0 использует динамические диапазоны: для каждого пакета заголовок выбирается случайно из заданного диапазона. Например, H4 может быть диапазоном от 1769581055 до 1869581055 — это 100 миллионов возможных значений. DPI не может запомнить все варианты, а проверка каждого пакета на соответствие огромному диапазону требует слишком много ресурсов. Важно, чтобы диапазоны H1-H4 не пересекались, иначе невозможно определить тип пакета.

Сигнатурные пакеты I1-I5: имитация легитимных протоколов

Ключевое нововведение AmneziaWG 2.0 — сигнатурные пакеты (signature packets). Перед каждым handshake (который происходит раз в 2 минуты) клиент отправляет до пяти специальных пакетов, которые выглядят как начало легитимного UDP-протокола. DPI видит, например, DNS-запрос или QUIC-соединение, и пропускает трафик, не подозревая, что за ним следует настоящий WireGuard handshake.

Параметры i1, i2, i3, i4, i5 определяют содержимое этих пакетов. Если i1 не настроен, сигнатурные пакеты не отправляются вовсе — это обеспечивает обратную совместимость с AmneziaWG 1.0. Каждый пакет описывается в формате CPS (Custom Protocol Signature), который мы рассмотрим ниже.

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

i1 = **

Здесь ** вставляет точные байты — начало DNS-запроса, ` добавляет timestamp, ` — 15 случайных байт. В результате пакет выглядит как настоящий DNS-запрос.

Важно понимать: сигнатурные пакеты отправляются только перед handshake, то есть каждые 2 минуты. Основной объём трафика — это data-пакеты, которые передаются постоянно. Для их маскировки используются другие механизмы, такие как padding и динамические заголовки.

CPS — язык описания сигнатур

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

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

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

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

i1 = **

Разбор: ** — начало QUIC Initial packet, ` — 8 случайных букв/цифр (имитация Connection ID), — текущее время, ` — 50 случайных байт (payload). DPI видит пакет, похожий на начало QUIC-соединения (HTTP/3), и пропускает его.

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

Важно: сигнатурные пакеты не должны быть слишком длинными — DPI анализирует первые 50-200 байт. Поэтому оптимальная длина — до 200 байт.

Расширенный padding: S3 и S4

В AmneziaWG 1.0 padding применялся только к handshake-пакетам (параметры S1 и S2). Это позволяло изменять размеры Init и Response, но data-пакеты оставались с предсказуемыми размерами, что позволяло DPI выявлять их по статистике.

AmneziaWG 2.0 добавляет padding для всех типов пакетов:

  • S3 — padding для Cookie Reply (64 байта стандартно). Добавляет случайные байты, когда сервер отправляет cookie reply (обычно при нагрузке).
  • S4 — padding для Transport Data. Это самый важный параметр, так как data-пакеты составляют основной объём трафика. S4 добавляет случайное количество байт к каждому data-пакету, делая их размеры непредсказуемыми.

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

S1 = 68
S2 = 149
S3 = 32
S4 = 16

Здесь S4 = 16 означает, что к каждому data-пакету добавляется от 0 до 16 случайных байт. Это создаёт разброс размеров, что затрудняет статистический анализ.

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

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

Динамические заголовки H1-H4: диапазоны вместо констант

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

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

Пример:

H1 = 471800590-471800690
H2 = 1246894907-1246895000
H3 = 923637689-923637690
H4 = 1769581055-1869581055

Диапазоны не пересекаются, что критически важно: иначе невозможно определить тип пакета. Хорошая практика — использовать широкие диапазоны для H4 (data-пакеты), так как их больше всего.

Аналогия: раньше у всех был пропуск с номером 1234567890 — охрана запомнила и начала проверять. Теперь каждый получает пропуск со случайным номером из диапазона 1000000000-1000000100. Охрана не может запомнить все 101 вариант, а проверять каждый — слишком долго.

Важно: при использовании Header Protection (механизм из AmneziaWG 3.1) рекомендуется оставлять H1-H4 стандартными (1, 2, 3, 4), так как скрытие типа сообщения выполняет Header Protection. Но в AmneziaWG 2.0 этот механизм отсутствует, поэтому динамические диапазоны — основной способ защиты заголовков.

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

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

  1. Обновить приложение AmneziaVPN до версии 4.8.12.9 или выше. Скачать можно с официального сайта или зеркала.
  2. В приложении выбрать подключение к серверу, нажать на иконку с шестерёнкой.
  3. В списке протоколов найти AmneziaWG и нажать на иконку загрузки, затем «Установить».
  4. После установки протокол появится в списке доступных — можно подключаться.

Важно: AmneziaWG 2.0 несовместим с предыдущими версиями (1.0 и 1.5). Для подключения по новому протоколу необходимо сгенерировать новые гостевые конфигурации. Старые конфигурации продолжат работать, но только с AmneziaWG Legacy (так теперь отображается версия 1.0).

Новые серверы по умолчанию используют AWG 2.0, и установить на них Legacy уже нельзя. Поэтому при обновлении существующего сервера нужно быть готовым к пересозданию конфигураций.

Дополнительная настройка не требуется: параметры маскировки выставляются автоматически. Однако вы можете изменить их вручную, чтобы точнее имитировать нужный протокол. Подробные инструкции есть в документации Amnezia.

После установки вы можете поделиться доступом с друзьями и близкими, сгенерировав гостевые конфигурации. Это делает self-hosted вариант особенно привлекательным для тех, кто хочет обеспечить свободный доступ к интернету для своей семьи.

Производительность и безопасность AmneziaWG 2.0

AmneziaWG 2.0 сохраняет криптографическое ядро WireGuard, что обеспечивает высокую производительность и безопасность. Используется однопроходный AEAD-алгоритм ChaCha20-Poly1305 с SIMD-оптимизацией, что делает шифрование быстрым даже на мобильных устройствах.

Код написан на Go и исполняется в пользовательском пространстве, что упрощает кроссплатформенность и энергоэффективность. AmneziaWG поддерживает все основные операционные системы: Windows, macOS, Linux, Android, iOS, а также роутеры (Keenetic, OpenWrt).

Весь трафик передаётся поверх UDP, что снижает задержку и упрощает обход блокировок. При отключённых параметрах маскировки конфигурация AmneziaWG полностью совместима с WireGuard, что обеспечивает обратную совместимость.

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

Безопасность AmneziaWG 2.0 не уступает WireGuard: шифрование остаётся неизменным, а обфускация добавляет дополнительный уровень защиты от DPI. Важно помнить, что ни один VPN не гарантирует 100% анонимность, но AmneziaWG 2.0 значительно усложняет детекцию.

Ограничения и рекомендации по использованию

AmneziaWG 2.0 — мощный инструмент, но у него есть ограничения. Во-первых, сигнатурные пакеты отправляются только перед handshake (раз в 2 минуты). Если DPI анализирует весь поток, а не отдельные пакеты, имитация может быть недостаточной. В таких случаях помогает padding и динамические заголовки, но полностью скрыть факт VPN-соединения сложно.

Во-вторых, CPS-сигнатуры требуют аккуратной настройки. Если вы используете готовые примеры, убедитесь, что они соответствуют вашему региону и провайдеру. Например, DNS-запросы в разных странах могут иметь разные особенности.

В-третьих, диапазоны H1-H4 не должны пересекаться. Это критическое требование, иначе протокол перестанет работать. Рекомендуется использовать широкие диапазоны для H4, так как data-пакеты составляют большинство.

Также стоит помнить, что AmneziaWG 2.0 несовместим с предыдущими версиями. При обновлении сервера все клиенты должны перейти на новую версию приложения и новые конфигурации.

Наконец, в условиях жёсткой цензуры (например, в России после блокировок 2026 года) может потребоваться более продвинутая версия — AmneziaWG 3.1, которая добавляет Header Protection и усложняет статистический анализ. Рекомендуется следить за обновлениями и использовать последнюю версию протокола.

Будущее AmneziaWG: версия 3.1 и борьба с ИИ-цензурой

AmneziaWG 2.0 стал важным шагом, но разработка не остановилась. В 2026 году вышла версия 3.1, которая отвечает на новые вызовы, включая анализ трафика с помощью ИИ-систем. Массовые блокировки в России в июне и июле 2026 года показали, что одной маскировки отдельных признаков недостаточно.

AmneziaWG 3.1 усложняет статистический анализ соединения: меняются размеры, последовательность и интервалы между пакетами, а также часть служебных данных. Это делает поведение разных сессий менее повторяемым и снижает вероятность распознавания по совокупности признаков.

Ключевое нововведение — Header Protection, который скрывает незашифрованные служебные части WireGuard-пакетов с помощью ChaCha20. Nonce берётся из первых 12 байт префикса S1-S4, а ключ задаётся параметром HeaderProtectionKey. При использовании Header Protection рекомендуется оставлять H1-H4 стандартными, так как скрытие типа сообщения выполняет этот механизм.

Версия 3.1 также снижает узнаваемость cookie-поведения WireGuard, которое может использоваться при активном зондировании как дополнительный fingerprint. Это усложняет распознавание протокола DPI-системами и поведенческим анализом.

Для пользователей Amnezia Free и Premium поддержка AWG 2.0 и 3.1 добавляется постепенно. На момент выхода 2.0 Free и Premium использовали AWG 1.5, но в 2026 году ситуация изменилась. Рекомендуется следить за обновлениями и использовать последние версии для максимальной защиты.

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

Чем AmneziaWG 2.0 отличается от WireGuard?

AmneziaWG 2.0 — это форк WireGuard, который добавляет обфускацию трафика для обхода DPI. В отличие от WireGuard, у которого фиксированные заголовки и размеры пакетов, AmneziaWG 2.0 использует динамические диапазоны заголовков (H1-H4), случайный padding (S1-S4) и сигнатурные пакеты (I1-I5) для имитации легитимных UDP-протоколов. Криптографическое ядро остаётся неизменным, поэтому производительность и безопасность сохраняются.

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

Для настройки нужно обновить приложение AmneziaVPN до версии 4.8.12.9 или выше, затем в настройках подключения выбрать AmneziaWG и нажать «Установить». После установки протокол появится в списке доступных. Дополнительная настройка не требуется, но вы можете изменить параметры маскировки вручную. Важно: AmneziaWG 2.0 несовместим с предыдущими версиями, поэтому нужно сгенерировать новые конфигурации.

Что такое CPS и как он работает?

CPS (Custom Protocol Signature) — это язык описания сигнатурных пакетов. Он использует теги: ** для вставки точных байт, ` для timestamp, для случайных байт, для случайных букв/цифр, ` для случайных цифр. С помощью CPS вы можете создать пакет, который выглядит как начало DNS-запроса, QUIC-соединения или другого протокола, чтобы обмануть DPI.

Какие параметры padding доступны в AmneziaWG 2.0?

В AmneziaWG 2.0 доступны четыре параметра padding: S1 (для handshake init), S2 (для handshake response), S3 (для cookie reply) и S4 (для transport data). S3 и S4 — новые в версии 2.0. S4 особенно важен, так как добавляет случайные байты к каждому data-пакету, делая их размеры непредсказуемыми. Рекомендуется начинать с S4 = 16 и увеличивать при необходимости.

Почему диапазоны H1-H4 не должны пересекаться?

Диапазоны H1-H4 определяют заголовки для разных типов пакетов: Init, Response, Cookie и Data. Если диапазоны пересекаются, протокол не сможет определить тип пакета при приёме, что приведёт к ошибкам соединения. Поэтому важно задавать непересекающиеся диапазоны, например, H1 = 471800590-471800690, H2 = 1246894907-1246895000 и так далее.

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

Да, AmneziaWG 2.0 поддерживает Android и iOS. Код написан на Go и исполняется в пользовательском пространстве, что обеспечивает энергоэффективность. Используется алгоритм ChaCha20-Poly1305 с SIMD-оптимизацией, который быстр даже на мобильных процессорах. Приложение AmneziaVPN доступно для всех основных платформ.

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

Если AmneziaWG 2.0 не справляется с блокировками, рекомендуется обновиться до версии 3.1, которая добавляет Header Protection и усложняет статистический анализ. Также можно попробовать изменить сигнатуры I1-I5, чтобы имитировать другой протокол, или увеличить padding. В крайнем случае, используйте альтернативные протоколы, такие как XRay.