Сборка и установка AmneziaWG на Debian из исходного кода
AmneziaWG состоит из двух частей: модуля ядра Linux, утилит awg и awg-quick для управления туннелями. В официальном репозитории Debian отсутствует AmneziaWG. Для установки можно использовать сторонний репозиторий ppa, но я покажу в статье полностью ручной процесс сборки. Это даст контроль и безопасность, ведь неизвестно, собран ли в репозитории пакет из исходного кода с github'а или нет.
В статье принято следующее обозначение: если перед командой находится символ $, её можно выполнять от имени обычного пользователя; если перед командой находится символ #, её необходимо выполнять от имени пользователя root или с использованием sudo.
<- выполнять от обычного пользователя
<- выполнять от root-пользователя или с его привилегиями через sudo
1. Подготовка к сборке и установке AmneziaWG
1.1. Установка необходимых утилит
Устанавливаем утилиту git для клонирования репозиториев с github, компилятор gcc и сборщик make
apt install git make gcc
1.2. Установка заголовков ядра
Для сборки модуля необходимы заголовки ядра Linux установленной системы
apt install linux-headers-$(uname -r)
Чтобы заголовки ядра автоматически загружались при обновлении ядра, можно установить мета-пакет с указанием архитектуры компьютера
apt install linux-headers-amd64
2. Модуль ядра AmneziaWG
2.1. Загрузка исходного кода модуля ядра AmneziaWG
Создаем для удобства каталог git в домашней директории пользователя и переходим в него
mkdir -p ~/git && cd ~/git
Клонируем репозиторий amneziawg-linux-kernel-module
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git

2.2. Сборка и установка модуля ядра через DKMS
Заходим под root-пользователем или выполняем команды через sudo
su -
2.2.1. Установка DKMS
Dynamic Kernel Module Support (DKMS) используется для того чтобы при обновлении ядра Linux до новой версии, происходила автоматическая сборка дополнительных моделей ядра из исходных кодов.
Устанавливаем DKMS
apt install dkms
Дожидаемся окончания установки.
2.2.2. Подготовка исходного кода для DKMS
Создаем каталог amneziawg-1.0.0 в каталоге /usr/src/
mkdir -p /usr/src/amneziawg-1.0.0/
Переходим в каталог клонированного репозитория amneziawg-linux-kernel-module
cd amneziawg-linux-kernel-module
Копируем содержимое каталога src в каталог /usr/src/amneziawg-1.0.0/ который ранее создали
cp -r src/* /usr/src/amneziawg-1.0.0/
Копируем скрипты загрузки исходных кодов ядра Linux для модуля AmneziaWG в каталог /usr/src/amneziawg-1.0.0/
install -m 755 kernel-tree-scripts/*-sources.sh /usr/src/amneziawg-1.0.0/
Копирование через утилиту install позволяет сразу установить необходимые права для выполнения скриптов.

2.2.3. Сборка и установка модуля ядра
Добавляем модуль ядра amneziawg в DKMS
dkms add -m amneziawg -v 1.0.0
Собираем модуль ядра amneziawg через DKMS
dkms build -m amneziawg -v 1.0.0
Устанавливаем модуль ядра amneziawg через DKMS
dkms install -m amneziawg -v 1.0.0

Модуль ядра amneziawg теперь будет автоматически собиратся при каждом обновлении ядра Linux.
Через встроенный скрипт он будет предварительно скачивать исходный код ядра Linux, а после сборки удалит скачанные и временные файлы.
2.3. Сборка и установка модуля ядра вручную
2.3.1. Загрузка исходного кода ядра Linux
Для сборки модуля ядра AmneziaWG необходим исходный код ядра Linux установленной системы.
Загружаем исходный код ядра Linux.
apt install linux-source
linux-source — это мета-пакет который включает исходный код ядра Linux текущей системы.
Исходный код будет загружен в каталог /usr/src/ в формате tar.xz архива.
Переходим в каталог /usr/src/
cd /usr/src/
Находим имя архива с исходным кодом ядра (оно будет иметь имя в зависимости от версии ядра установленной системы)
ls | grep linux-source
Извлекаем содержимое архива (в моем случае это linux-source-6.1.tar.xz)
tar -xJf linux-source-6.1.tar.xz
2.3.2. Сборка модуля ядра
Переходим в каталог клонированного репозитория amneziawg-linux-kernel-module
cd amneziawg-linux-kernel-module
Переходим в каталог src
cd src
Добавляем символьную ссылку на исходный код ядра Linux установленной системы
ln -s /usr/src/linux-source-<версия ядра> kernel
Вместо <версия ядра> необходимо указать версию ядра Linux установленной системы.
Например, в моем случае это версия 6.1 и команда будет выглядеть следующим образом:
ln -s /usr/src/linux-source-6.1 kernel
Собираем модуль ядра amneziawg
make
Дожидаемся окончания сборки, если все успешно будет выведено true.
2.3.3. Установка модуля ядра
Устанавливаем модуль ядра amneziawg
make install
Загружаем модуль ядра amneziawg
modprobe amneziawg
Проверяем что модуль amneziawg загружен
lsmod | grep amneziawg
3. Утилиты awg и awg-quick для управления AmneziaWG
Для управления собранным модулем ядра AmneziaWG необходимы утилиты с той же модификацией протокола WireGuard, что и модуль ядра.
Утилиты имеют имена awg, awg-quick и они по командам, способом управления аналогичны утилитам wg, wg-quick из WireGuard.
3.1. Загрузка исходного кода утилит AmneziaWG
Создаем для удобства каталог git в домашней директории пользователя и переходим в него
mkdir -p ~/git && cd ~/git
Клонируем репозиторий amneziawg-tools
git clone https://github.com/amnezia-vpn/amneziawg-tools.git

3.2. Сборка утилит awg и awg-quick
Переходим в каталог клонированного репозитория amneziawg-tools
cd amneziawg-tools
Переходим в каталог src
cd src
Запускаем процесс сборки утилит awg и awg-quick
make

Дожидаемся окончания сборки.
3.3. Установка утилит awg и awg-quick
Заходим под root-пользователем или выполняем команды через sudo
su -
Устанавливаем утилиты awg и awg-quick
make install

- в каталог /usr/bin/ будут скопированы утилиты awg и awg-quick;
- в каталог /usr/share/bash-completion/completions/ будут скопированы скрипты для bash-окружения;
- в каталог /usr/lib/systemd/system/ будут скопированы файлы для работы AmneziaWG в качестве службы systemd.
4. Конфигурация AmneziaWG и перенос файлов WireGuard
В AmneziaWG каталог с конфигурационными файлами находится по пути /etc/amnezia/amneziawg/ и утилита awg-quick будет искать там файлы для создания туннеля.
Если необходимо скопировать конфигурационные файлы WireGuard в AmneziaWG используем следующею команду
cp /etc/wireguard/*.conf /etc/amnezia/amneziawg/
Переходим в каталог конфигурации AmneziaWG
cd /etc/amnezia/amneziawg/
Создадим, например, файл конфигурации с именем awg0-client.conf или откроем любой из перенесенных файлов конфигураций
nano awg0-client.conf
Настройка, конфигурация и управление AmneziaWG происходит аналогично Wireguard. Можно использовать статью Настройка VPN сервера WireGuard в Linux (Debian/Ubuntu), только вместо команды wg использовать awg, a вместо wg-quick использовать awg-quick.
5. Удаление AmneziaWG
Если возникнет необходимость удалить AmneziaWG, нужно удалить модуль ядра и утилиты с их файлами.
Удаляем модуль ядра amneziawg через DKMS
dkms remove -m amneziawg -v 1.0.0
Удаляем каталог /usr/src/amneziawg-1.0.0/
rm -rf /usr/src/amneziawg-1.0.0/
Утилиты awg и awg-quick устанавливались простым копированием, поэтому удаляем их с их файлами по списку
rm -v /usr/bin/awg /usr/share/man/man8/awg.8 /usr/share/bash-completion/completions/awg /usr/bin/awg-quick /usr/share/man/man8/awg-quick.8 /usr/share/bash-completion/completions/awg-quick /usr/lib/systemd/system/awg-quick.target /usr/lib/systemd/system/awg-quick@.service