AmneziaWG для amd64: установка и сборка с GitHub

Клонирование репозитория AmneziaWG с GitHub на машину с архитектурой amd64 начинается с проверки версии ядра Linux — модуль amneziawg собирается под конкретные заголовки ядра, и без пакета linux-headers компиляция завершится ошибкой. AmneziaWG — это форк протокола WireGuard с обфускацией пакетов, разработанный командой Amnezia для обхода систем глубокой инспекции трафика (DPI). Исходный код проекта опубликован на GitHub, что позволяет собрать его вручную под любой дистрибутив на архитектуре x86-64.

В этой статье разберём, где находятся официальные репозитории AmneziaWG, чем отличаются модуль ядра и userspace-реализация amneziawg-go, какие зависимости нужны для сборки на amd64 и какие ошибки возникают чаще всего. Материал ориентирован на пользователей Linux с базовым опытом работы в терминале.

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

AmneziaWG — модификация протокола WireGuard, в которой изменены сигнатуры handshake-пакетов. Классический WireGuard легко распознаётся системами DPI по характерным заголовкам, что позволяет блокировать его на уровне провайдера или сетевого оборудования. AmneziaWG маскирует эти сигнатуры с помощью дополнительных параметров: Jc, Jmin, Jmax, S1, S2, H1H4. Эти значения добавляют мусорные пакеты и изменяют «магические» байты заголовков.

Архитектура amd64 (она же x86-64) — самая распространённая платформа для серверов и десктопов, поэтому именно под неё чаще всего собирают AmneziaWG из исходников. Готовые пакеты есть не для всех дистрибутивов, и ручная сборка с GitHub остаётся рабочим вариантом.

  • 🔒 Обфускация — сокрытие сигнатур WireGuard от DPI-систем
  • ⚙️ Совместимость — конфиги AmneziaWG расширяют стандартный формат WireGuard
  • 🖥️ Два варианта — модуль ядра (быстрее) и userspace-версия на Go (проще в установке)
  • 📦 Открытый код — все репозитории доступны на GitHub организации amnezia-vpn

Репозитории AmneziaWG на GitHub

Проект распределён между несколькими репозиториями в организации amnezia-vpn на GitHub. Путать их не стоит: для серверной настройки на amd64 нужны конкретные два.

РепозиторийНазначениеЯзык
amneziawg-linux-kernel-moduleМодуль ядра Linux (DKMS)C
amneziawg-goUserspace-реализацияGo
amneziawg-toolsУтилиты awg и awg-quickC, shell
amnezia-clientГрафический клиент Amnezia VPNC++/Qt

Для сервера на amd64 обычно достаточно связки «модуль ядра + amneziawg-tools». Если сборка модуля невозможна (например, нестандартное ядро или контейнерное окружение), используют amneziawg-go — он работает в пространстве пользователя и не требует заголовков ядра, но уступает по производительности.

Подготовка системы amd64 к сборке

Перед клонированием репозиториев убедитесь, что в системе установлены инструменты сборки и заголовки текущего ядра. На Debian/Ubuntu это делается так:

sudo apt update

sudo apt install -y git build-essential linux-headers-$(uname -r) dkms

На Fedora или RHEL-подобных системах пакеты называются иначе: kernel-devel вместо linux-headers, а также потребуются gcc и make. Для сборки amneziawg-go дополнительно нужен компилятор Go актуальной версии — проверить её можно командой go version.

⚠️ Внимание: если версия заголовков ядра не совпадает с работающим ядром (uname -r), сборка модуля завершится ошибкой или модуль не загрузится. После обновления ядра перезагрузите сервер до начала сборки.
📊 Какой вариант AmneziaWG вы используете на amd64?
Модуль ядра (DKMS)
amneziawg-go (userspace)
Готовый пакет из репозитория
Только планирую установку

Сборка и установка модуля ядра

Клонируйте репозиторий модуля и перейдите в каталог исходников:

git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git

cd amneziawg-linux-kernel-module/src

Дальнейший порядок зависит от способа установки. Для DKMS-сборки нужно скопировать исходники в /usr/src и зарегистрировать модуль, либо использовать скрипты из репозитория — точные команды актуальной версии указаны в README проекта, и сверяться стоит именно с ним, так как структура репозитория может меняться. После установки проверьте, что модуль загружается:

sudo modprobe amneziawg

lsmod | grep amneziawg

☑️ Проверка после установки модуля

Выполнено: 0 / 5

Затем устанавливаются amneziawg-tools — аналог wireguard-tools, предоставляющий команды awg и awg-quick:

git clone https://github.com/amnezia-vpn/amneziawg-tools.git

cd amneziawg-tools/src

make

sudo make install

Конфигурация и параметры обфускации

Файл конфигурации AmneziaWG почти идентичен конфигу WireGuard, но содержит дополнительные поля. Пример секции интерфейса:

[Interface]

PrivateKey = <приватный ключ>

Address = 10.8.1.1/24

ListenPort = 51820

Jc = 4

Jmin = 40

Jmax = 70

S1 = 0

S2 = 0

H1 = 1

H2 = 2

H3 = 3

H4 = 4

Критичный момент: значения параметров обфускации должны полностью совпадать на сервере и на всех клиентах, иначе handshake не пройдёт и соединение не установится. Это самая частая причина ситуации «интерфейс поднялся, но трафик не идёт».

⚠️ Внимание: не копируйте значения S1, S2 и H1–H4 из чужих примеров бездумно. Для боевого сервера генерируйте собственные значения в допустимых диапазонах — публичные «типовые» сигнатуры со временем могут попасть в базы DPI.
Что означают параметры обфускации

Jc — количество мусорных пакетов перед handshake; Jmin/Jmax — диапазон их размера; S1/S2 — смещения для изменения сигнатур initiation/response; H1–H4 — замена стандартных «магических» значений заголовков WireGuard. Точные допустимые диапазоны указаны в документации репозитория.

Типичные ошибки при сборке на amd64

Большинство проблем при установке AmneziaWG из GitHub сводится к нескольким сценариям. Разберём их по порядку диагностики.

  • 🧱 Ошибка «linux-headers not found» — установите заголовки для текущего ядра и перезапустите сборку
  • 🔄 Модуль не загружается после обновления ядра — пересоберите его через DKMS или вручную
  • 🔑 Handshake не проходит — сверьте параметры обфускации и ключи на обеих сторонах
  • 🌐 Интерфейс поднят, но нет интернета — проверьте маршрутизацию, NAT (iptables/nftables) и форвардинг пакетов

Для диагностики полезно смотреть вывод sudo dmesg | grep amneziawg — туда модуль ядра пишет ошибки загрузки. Также проверьте, что файрвол пропускает UDP-трафик на порт, указанный в ListenPort.

Обновление до новых версий

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

cd amneziawg-linux-kernel-module

git pull origin master

После обновления исходников модуль необходимо пересобрать и переустановить, а затем перезагрузить его или перезагрузить сервер. Перед обновлением на боевом сервере имеет смысл сохранить копию рабочих конфигов из /etc/amnezia/ — сами они при сборке не затираются, но резервная копия лишней не бывает.

⚠️ Внимание: обновляйте серверную и клиентскую версии согласованно. Изменения формата параметров обфускации между версиями могут привести к потере соединения, если одна сторона осталась на старом релизе.

Часто задаваемые вопросы

Подходит ли AmneziaWG с GitHub для 32-битных систем?

Репозитории проекта кроссплатформенны, но запрос amd64 подразумевает 64-битную архитектуру x86-64 — именно она используется на большинстве серверов. Для других архитектур (ARM, 32-бит x86) сборка возможна, но требует отдельной проверки совместимости.

Чем модуль ядра лучше amneziawg-go?

Модуль ядра работает на уровне сетевого стека ОС и обеспечивает более высокую производительность при меньшей нагрузке на процессор. Версия на Go проще в установке и не зависит от заголовков ядра, что удобно в контейнерах и на нестандартных ядрах.

Почему handshake не проходит, хотя конфиги совпадают?

Проверьте три вещи: совпадение всех параметров обфускации (Jc, Jmin, Jmax, S1, S2, H1–H4), корректность пары ключей (публичный ключ клиента указан на сервере и наоборот) и доступность UDP-порта сервера извне — его может блокировать файрвол или NAT провайдера.

Можно ли использовать конфиги WireGuard с AmneziaWG?

Базовая структура совместима, но без параметров обфускации вы фактически получите обычный WireGuard, распознаваемый DPI. Для маскировки трафика параметры Jc, S1, S2 и H1–H4 нужно добавить явно на обеих сторонах.

Как удалить AmneziaWG, установленный из исходников?

Для модуля, установленного через DKMS, используйте команду удаления DKMS-модуля с указанием версии. Файлы, установленные через make install, удаляются вручную из каталогов, куда они были скопированы (обычно /usr/local/bin и системные каталоги модулей). Точные пути можно посмотреть в Makefile проекта.