AmneziaWG

Anonymizers ★ Рекомендуемый v0.2.19 · 17.06.2026 активный

Форк WireGuard с защитой от определения протокола DPI-системами. Оригинальный WireGuard легко детектируется и блокируется (уникальные заголовки UDP-пакетов). AmneziaWG добавляет: динамические заголовки из случайных диапазонов, рандомизированные размеры пакетов, маскировку под QUIC / DNS / SIP / другие UDP-протоколы. Параметры Jc, Jmin, Jmax, S1, S2, H1-H4 настраиваются в конфиге, полностью совместим с обычным WireGuard-клиентом если включить режим совместимости. Используется в AmneziaVPN (open-source VPN-клиент для всех платформ). Особенно эффективен против российских провайдеров и DPI Ростелекома.

v0.2.19
17.06.2026 current
Добавлен 24.06.2026 · Обновлён 24.06.2026 · Anonymizers
Установка
# Ядро (Linux kernel module)
apt install amneziawg-dkms

# Go-реализация (userspace)
go install github.com/amnezia-vpn/amneziawg-go@latest

# Установщик сервера (Debian/Ubuntu)
bash <(curl -fsSL https://raw.githubusercontent.com/bivlked/amneziawg-installer/main/install.sh)

# Конфиг — пример с обфускацией
# [Interface]
# Jc = 4
# Jmin = 40
# Jmax = 70
# S1 = 0
# S2 = 0
переведено ИИ

Реализация AmneziaWG на Go

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

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

Использование

Просто запустите:

$ amneziawg-go wg0

Это создаст интерфейс и перейдёт в фоновый режим. Чтобы удалить интерфейс, используйте обычную команду ip link del wg0, или если ваша система не поддерживает прямое удаление интерфейсов, вы можете удалить управляющий сокет через rm -f /var/run/amneziawg/wg0.sock, что приведёт к завершению работы amneziawg-go.

Чтобы запустить amneziawg-go без перехода в фоновый режим, передайте -f или --foreground:

$ amneziawg-go -f wg0

Когда интерфейс запущен, вы можете использовать amneziawg-tools для его настройки, а также обычные команды ip(8) и ifconfig(8).

Для запуска с более подробным логированием можно установить переменную окружения LOG_LEVEL=debug.

Платформы

Linux

Будет работать на Linux; рекомендуется использовать amnezia-wg вместо стандартного модуля ядра Linux.

macOS

Это работает на macOS с использованием драйвера utun. В настоящее время не поддерживает привязку к сокетам (sticky sockets) и не будет поддерживать fwmarks из-за ограничений Darwin. Поскольку драйвер utun не позволяет задавать произвольные имена интерфейсов, вы должны либо использовать utun[0-9]+ для явного указания имени интерфейса, либо utun, чтобы ядро выбрало имя автоматически. Если вы выбрали utun в качестве имени интерфейса и переменная окружения WG_TUN_NAME_FILE определена, то фактическое имя интерфейса, выбранного ядром, будет записано в файл, указанный этой переменной. Это работает в MacOS, его следует использовать из amneziawg-apple

Windows

Это работает в Windows, его следует использовать из amneziawg-windows, который использует его как модуль.

Сборка

Требуется установка последней версии Go.

$ git clone https://github.com/amnezia-vpn/amneziawg-go
$ cd amneziawg-go
$ make

Конфигурация

[!NOTE] Если значение не указано (для любого параметра), AWG считает его равным 0

Пакеты-мусор (Junk packets)

Указанное параметром Jc количество пакетов-мусора со случайным размером от Jmin до Jmax генерируется и отправляется перед каждым рукопожатием

  • Jc: int, рекомендуемый диапазон — 4-12
  • Jmin: int <= Jmax:int

[!TIP] Пакеты-мусор не несут никаких реальных данных, поэтому нет необходимости указывать их на обеих сторонах. Общая рекомендация — использовать их только на стороне клиента

[!IMPORTANT] Если Jmax >= системный MTU (не указанный в AWG), то система может разбить этот пакет на фрагменты, что выглядит подозрительно со стороны цензора

Заполнение сообщений (Message paddings)

  • S1: int — заполнение начального сообщения рукопожатия
  • S2: int — заполнение ответного сообщения рукопожатия
  • S3: int — заполнение сообщения с.cookie рукопожатия
  • S4: int — заполнение транспортных сообщений

Заголовки сообщений

Каждое сообщение в WireGuard имеет тип uint32 в начале пакета. Этим полем можно управлять, указав следующие параметры:

  • H1: string — диапазон заголовка начального сообщения рукопожатия
  • H2: string — диапазон заголовка ответного сообщения рукопожатия
  • H3: string — диапазон заголовка сообщения с.cookie рукопожатия
  • H4: string — диапазон заголовка транспортного сообщения

Значения могут быть указаны как: - диапазон: x-y, x <= y; например 123-456 - одно значение 1234

Пакеты с пользовательской подписью (Custom signature packets)

Эти пакеты отправляются перед каждым рукопожатием, так же, как пакеты-мусор. Порядок отправки: I1, I2, I3, I4, I5. Если значение не указано, пакет пропускается.

  • I1: string
  • I2: string
  • I3: string
  • I4: string
  • I5: string

Значение — это последовательность тегов, указанных ниже: - <b 0x[seq]> — тег статических байтов. Записывает [seq] как есть в пакет. [seq] — это кодированная в шестнадцатеричном формате последовательность, представляющая набор байтов (2 шестнадцатеричные цифры на байт) и всегда чётного размера - <r [size]> — тег случайных байтов. Записывает [size] количество случайно сгенерированных байтов в пакет - <rd [size]> — тег случайных цифр. Записывает [size] количество случайно сгенерированных байтов из набора [0-9] в пакет - <rc [size]> — тег случайных символов. Записывает [size] количество случайно сгенерированных байтов из набора [a-zA-Z] в пакет - <t> — тег временной метки. Записывает 4-байтовое текущее системное время в формате UNIX

[!TIP] Пакеты с пользовательской подписью не несут никаких реальных данных, поэтому нет необходимости указывать их на обеих сторонах. Общая рекомендация — использовать их только на стороне клиента

[!IMPORTANT] Если итоговый размер любого пакета превышает системный MTU, он будет разбит на фрагменты, что выглядит подозрительно

Комментарии
Войдите, чтобы оставить комментарий