Клонирование репозитория 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, H1–H4. Эти значения добавляют мусорные пакеты и изменяют «магические» байты заголовков.
Архитектура 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-go | Userspace-реализация | Go |
amneziawg-tools | Утилиты awg и awg-quick | C, shell |
amnezia-client | Графический клиент Amnezia VPN | C++/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), сборка модуля завершится ошибкой или модуль не загрузится. После обновления ядра перезагрузите сервер до начала сборки.
Сборка и установка модуля ядра
Клонируйте репозиторий модуля и перейдите в каталог исходников:
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
☑️ Проверка после установки модуля
Затем устанавливаются 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 проекта.