# Сборка и установка AmneziaWG на Debian из исходного кода

AmneziaWG состоит из двух частей: модуля ядра Linux, утилит awg и awg-quick для управления туннелями. В официальном репозитории Debian отсутствует AmneziaWG. Для установки можно использовать сторонний репозиторий ppa, но я покажу в статье полностью ручной процесс сборки. Это даст контроль и безопасность, ведь неизвестно, собран ли в репозитории пакет из исходного кода с github'а или нет.

В статье принято следующее обозначение: если перед командой находится символ **$**, её можно выполнять от имени обычного пользователя; если перед командой находится символ **\#**, её необходимо выполнять от имени пользователя root или с использованием sudo.

```
```
<- выполнять от обычного пользователя
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

```
```
<- выполнять от root-пользователя или с его привилегиями через sudo
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<nav class="toc" id="bkmrk-%D0%9E%D0%B3%D0%BB%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8%3A-1"><span class="text-big">Оглавление статьи:</span>1. [1. Подготовка к сборке и установке AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#1)
2. [1.1. Установка необходимых утилит](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#1-1)
3. [1.2. Установка заголовков ядра](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#1-2)
4. [2. Модуль ядра AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#2)
5. [2.1. Загрузка исходного кода модуля ядра AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#2-1)
6. [2.2. Сборка и установка модуля ядра через DKMS](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#2-2)
7. [2.3. Сборка и установка модуля ядра вручную](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#2-3)
8. [3. Утилиты awg и awg-quick для управления AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#3)
9. [3.1. Загрузка исходного кода утилит AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#3-1)
10. [3.2. Сборка утилит awg и awg-quick](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#3-2)
11. [3.3. Установка утилит awg и awg-quick](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#3-3)
12. [4. Конфигурация AmneziaWG и перенос файлов WireGuard](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#4)
13. [5. Удаление AmneziaWG](https://notby.net/sborka-i-ustanovka-amneziawg-na-debian-iz-iskhodnogo-koda#5)

</nav>## 1. Подготовка к сборке и установке AmneziaWG

### 1.1. Установка необходимых утилит

Устанавливаем утилиту **git** для клонирования репозиториев с github, компилятор **gcc** и сборщик **make**

```
```
apt install git make gcc
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

### 1.2. Установка заголовков ядра

Для сборки модуля необходимы заголовки ядра Linux установленной системы

```
```
apt install linux-headers-$(uname -r)
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

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

```
```
apt install linux-headers-amd64
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

## 2. Модуль ядра AmneziaWG

### 2.1. Загрузка исходного кода модуля ядра AmneziaWG

Создаем для удобства каталог **git** в домашней директории пользователя и переходим в него

```
```
mkdir -p ~/git && cd ~/git
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Клонируем репозиторий **amneziawg-linux-kernel-module**

```
```
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk-">![Репозиторий amneziawg-linux-kernel-module скопирован с github командой “git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git” в консоли Debian, выведены сообщения процесса клонирования репозитория](https://notby.net/images/06/debian-console-git-clone-https-github-com-amnezia-vpn-amneziawg-linux-kernel-module-git.webp)</figure>### 2.2. Сборка и установка модуля ядра через DKMS

Заходим под root-пользователем или выполняем команды через sudo

```
```
su -
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

#### 2.2.1. Установка DKMS

**Dynamic Kernel Module Support (DKMS)** используется для того чтобы при обновлении ядра Linux до новой версии, происходила автоматическая сборка дополнительных моделей ядра из исходных кодов.

Устанавливаем **DKMS**

```
```
apt install dkms
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Дожидаемся окончания установки.

#### 2.2.2. Подготовка исходного кода для DKMS

Создаем каталог **amneziawg-1.0.0** в каталоге **/usr/src/**

```
```
mkdir -p /usr/src/amneziawg-1.0.0/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Переходим в каталог клонированного репозитория **amneziawg-linux-kernel-module**

```
```
cd amneziawg-linux-kernel-module
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Копируем содержимое каталога **src** в каталог **/usr/src/amneziawg-1.0.0/** который ранее создали

```
```
cp -r src/* /usr/src/amneziawg-1.0.0/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Копируем скрипты загрузки исходных кодов ядра Linux для модуля AmneziaWG в каталог **/usr/src/amneziawg-1.0.0/**

```
```
install -m 755 kernel-tree-scripts/*-sources.sh /usr/src/amneziawg-1.0.0/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

*Копирование через утилиту **install** позволяет сразу установить необходимые права для выполнения скриптов.*

<figure class="image" id="bkmrk--1">![В консоли Debian последовательно выполнены команды: “cd /home/user/git/”, “mkdir -p /usr/src/amneziawg-1.0.0/”, “cd amneziawg-linux-kernel-module”, “cp -r src/* /usr/src/amneziawg-1.0.0/”, “install -m 755 kernel-tree-scripts/*-sources.sh /usr/src/amneziawg-1.0.0/”](https://notby.net/images/06/debian-console-copy-amneziawg-source-to-usr-src-amneziawg-1-0-0.webp)</figure>#### 2.2.3. Сборка и установка модуля ядра

Добавляем модуль ядра **amneziawg** в **DKMS**

```
```
dkms add -m amneziawg -v 1.0.0
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Собираем модуль ядра **amneziawg** через **DKMS**

```
```
dkms build -m amneziawg -v 1.0.0
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Устанавливаем модуль ядра **amneziawg** через **DKMS**

```
```
dkms install -m amneziawg -v 1.0.0
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk--2">![Модуль ядра AmneziaWG успешно собран и установлен при помощи DKMS в Debian, использовались следующие команды в терминале: “dkms add -m amneziawg -v 1.0.0”, “dkms build -m amneziawg -v 1.0.0”, “dkms install -m amneziawg -v 1.0.0”](https://notby.net/images/06/debian-console-dkms-add-build-install-m-amneziawg-v-1-0-0.webp)</figure>Модуль ядра amneziawg теперь будет автоматически собиратся при каждом обновлении ядра Linux.

Через встроенный скрипт он будет предварительно скачивать исходный код ядра Linux, а после сборки удалит скачанные и временные файлы.

### 2.3. Сборка и установка модуля ядра вручную

#### 2.3.1. Загрузка исходного кода ядра Linux

Для сборки модуля ядра AmneziaWG необходим исходный код ядра Linux установленной системы.

Загружаем исходный код ядра Linux.

```
```
apt install linux-source
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

**linux-source** — это мета-пакет который включает исходный код ядра Linux текущей системы.

Исходный код будет загружен в каталог **/usr/src/** в формате **tar.xz** архива.

Переходим в каталог **/usr/src/**

```
```
cd /usr/src/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Находим имя архива с исходным кодом ядра (*оно будет иметь имя в зависимости от версии ядра установленной системы*)

```
```
ls | grep linux-source
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Извлекаем содержимое архива (*в моем случае это linux-source-6.1.tar.xz*)

```
```
tar -xJf linux-source-6.1.tar.xz
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

#### 2.3.2. Сборка модуля ядра

Переходим в каталог клонированного репозитория **amneziawg-linux-kernel-module**

```
```
cd amneziawg-linux-kernel-module
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Переходим в каталог **src**

```
```
cd src
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Добавляем символьную ссылку на исходный код ядра Linux установленной системы

```
```plaintext
ln -s /usr/src/linux-source-<версия ядра> kernel
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Вместо **&lt;версия ядра&gt;** необходимо указать версию ядра Linux установленной системы.

Например, в моем случае это версия 6.1 и команда будет выглядеть следующим образом:

```
```
ln -s /usr/src/linux-source-6.1 kernel
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Собираем модуль ядра **amneziawg**

```
```
make
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Дожидаемся окончания сборки, если все успешно будет выведено **true**.

#### 2.3.3. Установка модуля ядра

Устанавливаем модуль ядра **amneziawg**

```
```
make install
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Загружаем модуль ядра **amneziawg**

```
```
modprobe amneziawg
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Проверяем что модуль **amneziawg** загружен

```
```
lsmod | grep amneziawg
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

## 3. Утилиты awg и awg-quick для управления AmneziaWG

Для управления собранным модулем ядра AmneziaWG необходимы утилиты с той же модификацией протокола WireGuard, что и модуль ядра.

Утилиты имеют имена **awg**, **awg-quick** и они по командам, способом управления аналогичны утилитам **wg**, **wg-quick** из WireGuard.

### 3.1. Загрузка исходного кода утилит AmneziaWG

Создаем для удобства каталог **git** в домашней директории пользователя и переходим в него

```
```
mkdir -p ~/git && cd ~/git
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Клонируем репозиторий **amneziawg-tools**

```
```
git clone https://github.com/amnezia-vpn/amneziawg-tools.git
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk--3">![Репозиторий amneziawg-tools скопирован с github командой “git clone https://github.com/amnezia-vpn/amneziawg-tools.git” в консоли Debian, выведены сообщения процесса клонирования репозитория](https://notby.net/images/06/debian-console-git-clone-https-github-com-amnezia-vpn-amneziawg-tools-git.webp)</figure>### 3.2. Сборка утилит awg и awg-quick

Переходим в каталог клонированного репозитория **amneziawg-tools**

```
```
cd amneziawg-tools
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Переходим в каталог **src**

```
```
cd src
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Запускаем процесс сборки утилит **awg** и **awg-quick**

```
```
make
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk--4">![В консоли Debian последовательно выполнены команды: “cd amneziawg-tools”, “cd src”, “make”. Показан процесс сборки утилиты из исходного кода.](https://notby.net/images/06/debian-console-cd-amneziawg-tools-cd-src-make.webp)</figure>Дожидаемся окончания сборки.

### 3.3. Установка утилит awg и awg-quick

Заходим под root-пользователем или выполняем команды через sudo

```
```
su -
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Устанавливаем утилиты **awg** и **awg-quick**

```
```
make install
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk--5">![Утилиты awg и awg-quick успешно установлены при помощи команды “sudo make install” в терминале операционной системе Debian, выведен список установленных файлов и их пути](https://notby.net/images/06/debian-console-git-amneziawg-tools-src-sudo-make-install.webp)</figure>- в каталог **/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/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Переходим в каталог конфигурации AmneziaWG

```
```
cd /etc/amnezia/amneziawg/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Создадим, например, файл конфигурации с именем **awg0-client.conf** или откроем любой из перенесенных файлов конфигураций

```
```
nano awg0-client.conf
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Настройка, конфигурация и управление AmneziaWG происходит аналогично Wireguard. Можно использовать статью [Настройка VPN сервера WireGuard в Linux (Debian/Ubuntu)](https://notby.net/nastroyka-vpn-servera-wireguard-v-linux), только вместо команды **wg** использовать **awg**, a вместо **wg-quick** использовать **awg-quick**.

## 5. Удаление AmneziaWG

Если возникнет необходимость удалить AmneziaWG, нужно удалить модуль ядра и утилиты с их файлами.

Удаляем модуль ядра **amneziawg** через **DKMS**

```
```
dkms remove -m amneziawg -v 1.0.0
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Удаляем каталог **/usr/src/amneziawg-1.0.0/**

```
```
rm -rf /usr/src/amneziawg-1.0.0/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Утилиты **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
```