AmneziaWG на Arch Linux и OpenWRT: установка, настройка и обфускация трафика

Подробное руководство по AmneziaWG для Arch Linux и OpenWRT. Установка, настройка через LuCi и консоль, параметры обфускации, решение проблем с ядром и советы по использованию.

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

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

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

Установка AmneziaWG на Arch Linux

На Arch Linux AmneziaWG доступен в виде DKMS-модуля или предварительно собранного пакета для стандартного ядра. В AUR присутствует пакет amneziawg-linux, который собирает модуль под текущую версию ядра. Установка выполняется через AUR-помощник, например yay:

yay -S amneziawg-linux

Пакет зависит от linux и linux-headers. Важно: при обновлении ядра модуль нужно пересобрать, иначе AWG перестанет работать. Разработчики рекомендуют использовать LTS-версию ядра (linux-lts), чтобы избежать частых пересборок. Если после обновления ядра awg-quick не использует новый модуль, потребуется переустановить пакеты amneziawg-tools и amneziawg-go.

Для пользователей, которые не хотят возиться с DKMS, существует пакет amneziawg-dkms — он автоматически пересобирает модуль при каждом обновлении ядра. Однако на момент написания статьи в AUR доступен только предварительно собранный вариант.

Проблемы сборки модуля на новых ядрах

При сборке amneziawg-linux на ядрах версии 6.19 и выше могут возникать ошибки компиляции. Типичная проблема — несовместимость с обновлённым API криптографической библиотеки blake2s. В файле noise.c компилятор сообщает об ошибке «размер «blake» в памяти неизвестен» и несоответствии типов аргументов функции blake2s.

Решение — применить патч, исправляющий вызовы blake2s для нового ядра. Патч доступен в комментариях к пакету на AUR. Для ручного применения:

  1. Скачайте патч с GitHub-коммита AmneziaWG.
  2. Поместите его в директорию сборки.
  3. Добавьте в PKGBUILD в секцию source() и примените через patch -Np1.

Если вы не хотите патчить вручную, используйте LTS-ядро (linux-lts), где API blake2s остаётся стабильным. Также можно временно откатиться на ядро 6.18.x, но это не рекомендуется с точки зрения безопасности.

Установка AmneziaWG на OpenWRT

На OpenWRT пакеты AmneziaWG отсутствуют в официальном репозитории, поэтому установка выполняется через скрипт или вручную. Рекомендуемый способ — автоматический скрипт:

sh <(wget -O - https://raw.githubusercontent.com/Slava-Shchipunov/awg-openwrt/refs/heads/master/amneziawg-install.sh)

Скрипт устанавливает три пакета: kmod-amneziawg (модуль ядра), amneziawg-tools (утилиты) и luci-proto-amneziawg (интерфейс LuCi). На вопрос о настройке интерфейса отвечайте N, если планируете настраивать вручную.

Для ручной установки скачайте файлы под архитектуру вашего роутера. Узнать архитектуру можно в LuCi: System → Software, нажать Update lists и посмотреть строку вида aarch64_cortex-a53. Затем загрузите три .ipk-файла через Upload package или установите через консоль:

opkg install kmod-amneziawg.ipk amneziawg-tools.ipk luci-proto-amneziawg.ipk

После установки перезагрузите роутер.

Настройка AmneziaWG через LuCi (веб-интерфейс)

В LuCi настройка выполняется в разделе Network → Interfaces. Нажмите Add new interface, выберите протокол AmneziaWG VPN, задайте имя (например, awg0).

Импорт конфигурации:

  • Нажмите Load Configuration, перетащите файл конфигурации или вставьте его содержимое.
  • Нажмите Import Settings.
  • Важно: в OpenWRT ниже 24.10.1 данные на вкладке AmneziaWG Settings могут вставиться некорректно — проверьте их вручную.
  • Перейдите на вкладку Peers, нажмите Edit и установите Persistent Keep Alive = 25. Без этого туннель не установит соединение.
  • Если в конфиге были DNS-серверы, на вкладке Advanced Settings очистите поле Use custom DNS servers.
  • Нажмите Save → Save & Apply, затем Restart рядом с интерфейсом. Убедитесь, что значения RX и TX не равны нулю.

Ручной ввод:

  • В General Settings укажите Private Key и IP Addresses из секции [Interface].
  • На вкладке AmneziaWG Settings заполните поля S1, S2, Jc, Jmin, Jmax, H1H4.
  • На вкладке Peers добавьте пир, укажите Public Key, Allowed IPs (обычно 0.0.0.0/0), Endpoint Host, Endpoint Port и Persistent Keep Alive = 25.
  • Снимите галочку с опции Route Allowed IPs, если не хотите, чтобы весь трафик шёл через VPN.
  • Сохраните и перезапустите интерфейс.

Настройка AmneziaWG через консоль OpenWRT

Редактируйте файл /etc/config/network. Пример конфигурации:

config interface 'awg0'
    option proto 'amneziawg'
    option listen_port '51820'
    option private_key 'YOUR_PRIVATE_KEY'
    list addresses '172.16.0.2/32'
    option awg_s1 '0'
    option awg_s2 '0'
    option awg_jc '3'
    option awg_jmin '10'
    option awg_jmax '50'
    option awg_h1 '904321824'
    option awg_h2 '245411986'
    option awg_h3 '663334667'
    option awg_h4 '1944657114'

config amneziawg_awg0
    option name 'awg0_client'
    option route_allowed_ips '0'
    option persistent_keepalive '25'
    list allowed_ips '0.0.0.0/0'
    option endpoint_host 'YOUR_SERVER_IP'
    option endpoint_port '51820'
    option public_key 'SERVER_PUBLIC_KEY'
    option preshared_key 'YOUR_PRESHARED_KEY'

Замените значения, начинающиеся с YOUR_, на свои. Параметры обфускации (awg_*) обязательны — без них AmneziaWG не будет работать. После редактирования выполните:

/etc/init.d/network restart

Проверьте появление интерфейса:

ip a | grep awg0

Должна отобразиться строка с адресом и статусом UP.

Параметры обфускации AmneziaWG: что они значат

AmneziaWG использует несколько дополнительных параметров, которых нет в WireGuard:

  • Jc, Jmin, Jmax — управляют «мусорными» пакетами, отправляемыми перед началом VPN-сессии. Jc — количество пакетов, Jmin и Jmax — минимальный и максимальный размер каждого пакета. Это затрудняет DPI-анализ, так как трафик выглядит как случайный шум.
  • S1, S2 — изменяют размер пакетов рукопожатия, добавляя «мусор» в служебные сообщения. Это делает рукопожатие непохожим на стандартное WireGuard.
  • H1–H4 — дополнительные хеш-параметры, используемые для обфускации пакетов. Их точное назначение не раскрывается разработчиками, но они обязательны для работы протокола.

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

Использование AmneziaWG с WARP и другими сервисами

AmneziaWG можно комбинировать с Cloudflare WARP для дополнительной анонимизации. Если вы используете WARP и список подсетей Cloudflare, необходимо указать Firewall Mark в дополнительных настройках интерфейса. Это предотвращает конфликты маршрутизации и гарантирует, что трафик WARP не будет зациклен через AWG.

На OpenWRT настройка Firewall Mark выполняется в LuCi на вкладке Advanced Settings интерфейса AWG. Значение должно совпадать с тем, что используется в конфигурации WARP. Обычно это число от 1 до 255, например 0x01.

Также можно настроить AmneziaWG как клиент для сервера WireGuard. Для этого достаточно указать публичный ключ WireGuard-сервера и стандартные параметры, опустив AWG-специфичные опции (они будут проигнорированы). Однако в этом случае обфускация работать не будет.

Диагностика и проверка работы туннеля

После настройки важно убедиться, что туннель работает корректно.

Через LuCi:

  • Перейдите в Status → AmneziaWG.
  • В строке Latest Handshake должно быть значение менее 2 минут.
  • Data Received и Data Transmitted не должны быть равны 0.

Через консоль:

  • Выполните amneziawg show. Вывод должен содержать информацию о пире, времени последнего рукопожатия и объёме переданных данных.
  • Пример успешного вывода:
  peer: bmXOC+F1FxEM...
  endpoint: 1.2.3.4:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 49 seconds ago
  transfer: 1.08 KiB received, 340.04 KiB sent
  persistent keepalive: every 25 seconds

Если рукопожатие отсутствует или данные не передаются, проверьте:

  • Правильность параметров обфускации (особенно H1–H4).
  • Наличие Persistent Keep Alive = 25.
  • Отсутствие блокировок на файрволе (порт UDP 51820 должен быть открыт).
  • Совпадение версий модуля ядра и утилит.

Частые ошибки и их решение

1. Ошибка сборки модуля на Arch Linux Симптом: при установке amneziawg-linux возникает ошибка компиляции noise.c. Решение: используйте LTS-ядро или примените патч из AUR-комментариев.

2. Туннель не поднимается на OpenWRT Симптом: интерфейс создан, но RX/TX равны 0. Решение: убедитесь, что в настройках пира указан Persistent Keep Alive = 25. Также проверьте, что параметры обфускации скопированы без ошибок.

3. После обновления ядра AWG перестал работать Симптом: amneziawg show не выводит информацию. Решение: переустановите пакеты amneziawg-linux и amneziawg-tools. Если используется DKMS, проверьте, что модуль пересобрался.

4. Конфигурация не импортируется в LuCi Симптом: после импорта поля на вкладке AmneziaWG Settings пустые. Решение: в OpenWRT ниже 24.10.1 импорт работает некорректно — введите параметры вручную.

5. Не удаётся подключиться к серверу WireGuard через AWG Симптом: рукопожатие не происходит. Решение: убедитесь, что сервер поддерживает AmneziaWG. Если сервер использует обычный WireGuard, AWG-клиент не сможет подключиться из-за различий в протоколе.

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

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

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

Можно ли использовать AmneziaWG с сервером WireGuard?

Нет, напрямую — нельзя. AmneziaWG использует модифицированный протокол, несовместимый с WireGuard. Однако можно настроить AmneziaWG как клиент для сервера WireGuard, опустив AWG-специфичные параметры, но в этом случае обфускация работать не будет.

Какие параметры обфускации обязательны для AmneziaWG?

Обязательны все параметры: Jc, Jmin, Jmax, S1, S2, H1, H2, H3, H4. Они генерируются сервером и передаются в конфигурационном файле. Без них или с неверными значениями соединение не установится.

Почему на OpenWRT не импортируются параметры AmneziaWG через LuCi?

В версиях OpenWRT ниже 24.10.1 импорт конфигурации работает некорректно — данные на вкладке AmneziaWG Settings могут не заполниться. Рекомендуется вводить параметры вручную или обновить прошивку.

Как проверить, что AmneziaWG работает на OpenWRT?

В LuCi перейдите в Status → AmneziaWG — значение Latest Handshake должно быть менее 2 минут, а Data Received/Transmitted не равны нулю. В консоли выполните amneziawg show — должна отобразиться информация о пире и переданных данных.

Что делать, если после обновления ядра на Arch Linux AmneziaWG перестал работать?

Переустановите пакет amneziawg-linux — он соберётся под новое ядро. Если используется DKMS, модуль должен пересобраться автоматически. Также может потребоваться переустановка amneziawg-tools и amneziawg-go.

Можно ли использовать AmneziaWG вместе с Cloudflare WARP?

Да, можно. Для этого необходимо указать Firewall Mark в настройках интерфейса AmneziaWG, чтобы избежать конфликтов маршрутизации. Значение должно совпадать с тем, что используется в конфигурации WARP.