Компиляция из исходного кода

Пошаговое руководство по компиляции WireGuard из исходного кода для Ubuntu и Fedora

Компиляция модуля ядра из исходного кода

В этом руководстве вы узнаете, как скомпилировать WireGuard из исходного кода для Ubuntu и Fedora. Это может быть полезно, если вы используете нестандартное ядро, хотите получить самую свежую версию или если ваш дистрибутив не предоставляет готовые пакеты.

Шаг 1: Установка инструментов сборки

Ubuntu и Debian

sudo apt-get install libelf-dev linux-headers-$(uname -r) build-essential pkg-config

Fedora

sudo dnf install elfutils-libelf-devel kernel-devel pkg-config @development-tools

Red Hat Enterprise Linux / CentOS

sudo yum install elfutils-libelf-devel kernel-devel pkgconfig "@Development Tools"

Arch Linux

sudo pacman -S linux-headers base-devel pkg-config

OpenSUSE

sudo zypper install kernel-default-devel pkg-config

Alpine

apk add build-base linux-hardened-dev  # или linux-vanilla-dev для ядра vanilla

Шаг 2: Получение исходного кода

Клонируйте репозитории WireGuard:

git clone https://git.zx2c4.com/wireguard-linux-compat
git clone https://git.zx2c4.com/wireguard-tools

Шаг 3: Компиляция и установка модуля ядра

make -C wireguard-linux-compat/src -j$(nproc)
sudo make -C wireguard-linux-compat/src install

Проверка загрузки модуля

После установки проверьте, что модуль загружается:

sudo modprobe wireguard
lsmod | grep wireguard

Вы должны увидеть вывод, содержащий wireguard.

Шаг 4: Компиляция и установка утилиты wg(8)

Утилита wg(8) необходима для управления интерфейсами WireGuard:

make -C wireguard-tools/src -j$(nproc)
sudo make -C wireguard-tools/src install

Проверка установки

Проверьте, что утилита установлена корректно:

wg --version

Вы должны увидеть информацию о версии утилиты.

Шаг 5: Дополнительная настройка (опционально)

Автоматическая загрузка модуля

Чтобы модуль WireGuard загружался автоматически при старте системы:

echo "wireguard" | sudo tee /etc/modules-load.d/wireguard.conf

Настройка прав доступа к конфигурационным файлам

Создайте директорию для конфигураций с правильными правами:

sudo mkdir -p /etc/wireguard
sudo chmod 600 /etc/wireguard

Шаг 6: Создание и настройка интерфейса

Генерация ключей

umask 077
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key

Создание конфигурационного файла

Создайте файл /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <ваш_приватный_ключ>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <публичный_ключ_пира>
AllowedIPs = 10.0.0.2/32
Endpoint = example.com:51820

Запуск интерфейса

sudo wg-quick up wg0

Проверка статуса

sudo wg show

Требования к ядру

WireGuard требует Linux ≥ 3.10 со следующими опциями конфигурации, которые, вероятно, уже настроены в вашем ядре:

ОпцияОписание
CONFIG_NETБазовая поддержка сети
CONFIG_INETБазовая поддержка IP
CONFIG_NET_UDP_TUNNELОтправка и получение UDP-пакетов
CONFIG_CRYPTO_ALGAPIКриптографический API для crypto_xor
CONFIG_CRYPTO_MANAGERМенеджер криптографических алгоритмов

Некоторые, но не все, из этих опций напрямую соответствуют записям в menuconfig. Для включения этих опций выберите следующие пункты в menuconfig:

[*] Networking support (NET) -->
    Networking options -->
        [*] TCP/IP networking (INET)
        [*]   IP: Foo (IP protocols) over UDP (NET_FOU)
[*] Cryptographic API (CRYPTO) -->
    [*] Cryptographic algorithm manager (CRYPTO_MANAGER)

Сборка напрямую в дереве ядра

Если вы хотите собрать WireGuard как модуль или встроенный напрямую из дерева ядра, вы можете использовать скрипт create-patch.sh, который создаёт патч для добавления WireGuard непосредственно в дерево, или скрипт jury-rig.sh, который связывает исходный каталог WireGuard с деревом ядра:

Метод 1: Использование патча

cd /usr/src/linux
~/wireguard-linux-compat/kernel-tree-scripts/create-patch.sh | patch -p1

Метод 2: Использование jury-rig

~/wireguard-linux-compat/kernel-tree-scripts/jury-rig.sh /usr/src/linux

После этого вы сможете настроить следующие опции напрямую:

ОпцияОписание
CONFIG_WIREGUARDУправляет тем, будет ли WireGuard собран как модуль, встроенный или не собран вообще
CONFIG_WIREGUARD_DEBUGВключает подробные отладочные сообщения

Эти опции легко выбираются через menuconfig, если также выбраны CONFIG_NET и CONFIG_INET:

[*] Networking support -->
    Networking options -->
        [*] TCP/IP networking
        [*]   IP: WireGuard secure network tunnel
        [ ]     Debugging checks and verbose messages

Устранение неполадок

Ошибка: “wireguard module not found”

Если модуль не загружается, проверьте:

# Проверка установки модуля
ls /lib/modules/$(uname -r)/kernel/net/wireguard/

# Проверка зависимостей
modinfo wireguard

# Проверка логов ядра
dmesg | grep -i wireguard

Ошибка: “kernel headers not found”

Убедитесь, что заголовки ядра установлены:

# Ubuntu/Debian
sudo apt install linux-headers-$(uname -r)

# Fedora
sudo dnf install kernel-devel-$(uname -r)

Проблемы с компиляцией

Если компиляция завершается с ошибками:

  1. Проверьте версию gcc:
gcc --version
  1. Убедитесь, что у вас установлены все зависимости:
# Ubuntu/Debian
sudo apt-get build-dep wireguard

# Fedora
sudo dnf builddep wireguard-tools
  1. Очистите предыдущие сборки:
make -C wireguard-linux-compat/src clean
make -C wireguard-tools/src clean

Дальнейшие шаги

После успешной компиляции и установки вы можете перейти к руководству по быстрому старту для настройки вашего первого WireGuard-подключения.

Связанные руководства