Компиляция из исходного кода
Компиляция модуля ядра из исходного кода
В этом руководстве вы узнаете, как скомпилировать 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
make debug вместо обычной сборки, если хотите получить дополнительную информацию о происходящем в вашем dmesg(1).Проверка загрузки модуля
После установки проверьте, что модуль загружается:
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)
CONFIG_UNUSED_SYMBOLS.Сборка напрямую в дереве ядра
Если вы хотите собрать 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)
Проблемы с компиляцией
Если компиляция завершается с ошибками:
- Проверьте версию gcc:
gcc --version
- Убедитесь, что у вас установлены все зависимости:
# Ubuntu/Debian
sudo apt-get build-dep wireguard
# Fedora
sudo dnf builddep wireguard-tools
- Очистите предыдущие сборки:
make -C wireguard-linux-compat/src clean
make -C wireguard-tools/src clean
Дальнейшие шаги
После успешной компиляции и установки вы можете перейти к руководству по быстрому старту для настройки вашего первого WireGuard-подключения.
Связанные руководства
- Установка WireGuard — установка с помощью пакетных менеджеров
- Быстрый старт — настройка и использование WireGuard
- Протокол и криптография — подробности о работе WireGuard