Как WireGuard устроен в Linux
В Linux WireGuard живёт не отдельным приложением, а внутри самого ядра: начиная с версии 5.6 модуль входит в состав mainline-ядра, поэтому в Ubuntu 20.04 и новее, Debian 11 и новее, Fedora, Arch и openSUSE ставить драйвер отдельно не нужно. Из пространства пользователя с ним работают две утилиты из пакета wireguard-tools: низкоуровневая wg и обёртка wg-quick, которая одной командой поднимает интерфейс, назначает адреса, прописывает маршруты и DNS.
Клиентская настройка WireGuard на Linux поэтому выглядит проще, чем на любой другой системе: графический интерфейс не нужен, весь профиль — это один текстовый файл. Проверить версию ядра можно командой uname -r; если она ниже 5.6 (старые LTS-сборки, некоторые NAS и одноплатники), понадобится пакет wireguard-dkms, который соберёт модуль под ваше ядро, либо пользовательская реализация wireguard-go.
Нужен и сам конфиг — файл с расширением .conf, где записаны ключи, адрес сервера, DNS и маршруты. Оформить доступ и получить его можно на главной странице Muhomor VPN: 3 дня бесплатно, без карты, нужен только e-mail, файл приходит письмом. Из чего состоит такой файл и за что отвечает каждая строка, подробно разобрано в статье разбор конфига WireGuard. Ручной правки параметров не требуется — конфиг готов к работе как есть.
Шаг 1. Установка wireguard-tools в Ubuntu, Debian и Fedora
Пакет есть в штатных репозиториях всех массовых дистрибутивов, подключать сторонние источники не нужно.
| Дистрибутив | Команда установки |
|---|---|
| Ubuntu, Debian, Linux Mint, Pop!_OS | sudo apt update && sudo apt install wireguard |
| Fedora, RHEL, CentOS Stream, Rocky | sudo dnf install wireguard-tools |
| Arch, Manjaro, EndeavourOS | sudo pacman -S wireguard-tools |
| openSUSE | sudo zypper install wireguard-tools |
| Alpine | sudo apk add wireguard-tools |
В Debian и Ubuntu метапакет wireguard подтягивает wireguard-tools, а при необходимости и модуль. Убедитесь, что всё встало: команда wg --version должна вывести номер версии утилит. Наличие модуля ядра проверяется командой modinfo wireguard — если она сообщает, что модуль не найден, поставьте wireguard-dkms (Debian, Ubuntu) или обновите ядро.
Сборки для других платформ и исходники лежат на официальном сайте проекта; копии установщиков для Windows, macOS и Android — на странице загрузок Muhomor VPN. Если вы планируете пустить через туннель весь домашний трафик, вместо настройки на каждом компьютере имеет смысл настроить роутер — например по инструкции для WireGuard на OpenWrt.
Шаг 2. Конфиг в /etc/wireguard/wg0.conf и права 600
Утилита wg-quick ищет конфиги в каталоге /etc/wireguard/, а имя интерфейса берёт из имени файла. Файл wg0.conf поднимет интерфейс wg0, файл home.conf — интерфейс home. Имя должно быть короче 16 символов и состоять из букв, цифр, дефиса или подчёркивания.
- Создайте каталог, если его нет:
sudo mkdir -p /etc/wireguard. - Скопируйте полученный файл под нужным именем:
sudo cp ~/Загрузки/muhomor.conf /etc/wireguard/wg0.conf. - Закройте файл от посторонних:
sudo chown root:root /etc/wireguard/wg0.confиsudo chmod 600 /etc/wireguard/wg0.conf. - Проверьте результат:
ls -l /etc/wireguard/— в строке должно быть-rw-------.
Права 600 обязательны не для красоты. В конфиге лежит приватный ключ: тот, кто его прочитает, сможет подключиться к серверу от вашего имени. Если файл доступен на чтение всем, wg-quick честно предупредит об этом при запуске. Полезная привычка — выполнять копирование под umask 077, тогда права выставятся сами.
Несколько профилей на одной машине
Ничто не мешает держать рядом wg0.conf и wg1.conf — например профиль с полным туннелем и профиль, где через VPN идёт только часть подсетей. Какие адреса попадают в туннель, определяет параметр AllowedIPs: 0.0.0.0/0, ::/0 означает весь трафик, перечень конкретных подсетей — только их. Одновременно поднимать два интерфейса с одним и тем же приватным ключом нельзя: сервер увидит два источника с одинаковым ключом и начнёт рвать соединение. На одном доступе Muhomor VPN выпускается до пяти отдельных конфигов — по одному на устройство.
Шаг 3. Поднимаем туннель: wg-quick up и down
Всё готово, поднимаем интерфейс:
- Включить туннель:
sudo wg-quick up wg0. - Выключить:
sudo wg-quick down wg0.
В ответ на запуск утилита выведет список выполненных действий: ip link add wg0 type wireguard, назначение адреса, wg setconf, добавление маршрутов и правил. Это не ошибки, а протокол работы — так и должно быть. Обратите внимание: аргумент здесь именно wg0, а не путь к файлу; путь нужен, только если конфиг лежит вне /etc/wireguard.
Когда в конфиге прописан полный туннель (AllowedIPs = 0.0.0.0/0), wg-quick не переписывает маршрут по умолчанию грубо, а использует метку пакетов (fwmark) и отдельную таблицу маршрутизации. Благодаря этому трафик до самого VPN-сервера продолжает идти через обычный шлюз, а всё остальное уходит в туннель — и при падении интерфейса запросы не утекают мимо него открытым текстом.
Если нужно временно поднять соединение без прав root на каждый запуск, сделайте это через systemd (следующий раздел) или через NetworkManager — там подключение включается из графической оболочки обычным пользователем.
Шаг 4. Проверка: wg show, маршруты и DNS
Первая и главная команда диагностики — sudo wg show. Она выводит состояние интерфейса и каждого пира:
- latest handshake — время последнего рукопожатия. Свежее значение (секунды или пара минут назад) означает, что связь с сервером есть. Строки нет совсем — пакеты до сервера не доходят.
- transfer — счётчики принятого и отправленного трафика; оба должны расти при работе в сети.
- endpoint — адрес и порт сервера, к которому вы подключены.
Дальше проверьте сетевой уровень: ip a show wg0 покажет назначенный адрес, ip route — маршруты. Внешний адрес удобно смотреть командой curl ifconfig.me — он должен отличаться от адреса вашего провайдера.
DNS: resolvconf и systemd-resolved
Строку DNS = из конфига wg-quick применяет через внешнюю утилиту resolvconf. Если её нет, запуск завершится сообщением resolvconf: command not found — при этом туннель может подняться, но имена продолжат резолвиться через DNS-сервер провайдера, то есть запросы пойдут мимо туннеля.
- Debian, Ubuntu и производные: поставьте
sudo apt install openresolvлибоsudo apt install resolvconf. - Системы с systemd-resolved (Ubuntu 18.04+, Fedora, Arch с включённым сервисом): достаточно пакета
systemd-resolvconf, который предоставляет совместимую команду. - Проверка результата:
resolvectl status wg0— в разделе интерфейса должен быть указан DNS-сервер из конфига.
Полностью убедиться, что ни IP, ни DNS не утекают мимо туннеля, помогают онлайн-проверки: методика описана в статье как проверить утечку DNS и IP.
Автозапуск: systemctl enable wg-quick@wg0
Пакет wireguard-tools приносит с собой шаблонный systemd-юнит wg-quick@.service. Имя конфига подставляется после символа «собака», поэтому для файла wg0.conf юнит называется wg-quick@wg0.
- Включить и сразу запустить:
sudo systemctl enable --now wg-quick@wg0. - Посмотреть состояние:
systemctl status wg-quick@wg0. - Перезапустить после правки конфига:
sudo systemctl restart wg-quick@wg0. - Отключить автозапуск:
sudo systemctl disable --now wg-quick@wg0.
После enable туннель поднимается на этапе загрузки системы, до входа пользователя, и работает на сервере без графической сессии — это основной способ держать постоянное соединение на рабочей станции, домашнем сервере или одноплатнике. Журнал ошибок смотрите командой journalctl -u wg-quick@wg0 -b: там будет видно, почему интерфейс не поднялся.
Важно не смешивать способы управления. Если туннелем занимается systemd-юнит, не запускайте параллельно wg-quick up руками и не импортируйте тот же профиль в NetworkManager: два менеджера начнут спорить за один интерфейс, и соединение будет то появляться, то исчезать.
Импорт в NetworkManager: nmcli и графические оболочки
На десктопе удобнее, когда VPN включается тумблером в меню сети, а не командой в терминале. NetworkManager умеет читать конфиги WireGuard напрямую:
- Импортируйте профиль:
nmcli connection import type wireguard file /etc/wireguard/wg0.conf. Соединение получит имя по имени файла —wg0. - Включите его:
nmcli connection up wg0, выключите —nmcli connection down wg0. - Разрешите или запретите автоподключение:
nmcli connection modify wg0 connection.autoconnect yes. - Проверьте список:
nmcli connection show.
После импорта соединение появляется в системных настройках сети в разделе VPN — в GNOME, KDE Plasma, Cinnamon и XFCE его можно включать мышью, без пароля root. Профиль NetworkManager хранится отдельно от исходного файла, поэтому после импорта правки в /etc/wireguard/wg0.conf на него уже не влияют: меняйте параметры через nmcli connection modify или переимпортируйте профиль заново.
Если вы импортировали конфиг в NetworkManager, отключите systemd-юнит: sudo systemctl disable --now wg-quick@wg0. И наоборот — на сервере без графики NetworkManager не нужен, там достаточно юнита. Выбирать стоит один инструмент, а не оба сразу.
Типичные ошибки и как их разбирать
wg-quick: command not found
Не установлен пакет wireguard-tools либо команда запущена без sudo и каталог /usr/bin не в пути. Проверьте wg --version и повторите установку из таблицы выше.
Предупреждение о том, что конфиг доступен на чтение всем
Забыли выставить права. Выполните sudo chmod 600 /etc/wireguard/wg0.conf. Туннель поднимется и без этого, но приватный ключ будет виден любому пользователю системы.
RTNETLINK answers: Operation not supported
Ядро не умеет работать с WireGuard: модуль не загружен или его нет вовсе. Проверьте uname -r и modinfo wireguard. Решения — обновить ядро до 5.6 и новее, поставить wireguard-dkms или использовать пользовательскую реализацию wireguard-go. Такое встречается на старых LTS-системах, в контейнерах и на некоторых VPS с урезанным ядром.
Интерфейс wg0 уже существует
Предыдущий запуск не завершился корректно. Выполните sudo wg-quick down wg0, а если не помогает — sudo ip link delete wg0, после чего поднимите туннель заново.
Туннель поднялся, но сайты не открываются
Смотрите sudo wg show. Нет рукопожатия — пакеты не доходят до сервера: в сети закрыт исходящий UDP или мешает корпоративный фильтр; проверьте гипотезу, раздав интернет с телефона. Рукопожатие есть, а сайты молчат — почти всегда проблема с DNS (см. раздел про resolvconf) или с MTU: попробуйте добавить в секцию [Interface] строку MTU = 1380. Остальные причины разобраны в статье WireGuard не подключается.
Соединение рвётся каждые несколько минут
Чаще всего один и тот же конфиг используется одновременно на двух машинах. Выпустите отдельный профиль для каждого устройства в разделе «Устройства» на главной. Вторая причина — сеть с агрессивным NAT, где помогает параметр PersistentKeepalive = 25; в конфигах Muhomor VPN он уже прописан.
После перезагрузки туннель не поднимается
Автозапуск не включён. Выполните sudo systemctl enable wg-quick@wg0 и проверьте systemctl is-enabled wg-quick@wg0. Если юнит включён, но падает, читайте journalctl -u wg-quick@wg0 -b: обычно там видно, что сеть ещё не была готова или отсутствует resolvconf.
Общий принцип диагностики простой: сверху вниз. Сначала интерфейс (ip a show wg0), затем рукопожатие (wg show), затем маршруты (ip route), затем DNS (resolvectl status). Как устроен протокол и почему он так экономно себя ведёт, объясняет статья что такое WireGuard.
Попробуйте Muhomor VPN — 3 дня бесплатно
WireGuard-конфиг придёт на e-mail за минуту. Без карты и автосписаний, до 5 устройств на одном доступе.
Частые вопросы
Нужно ли ставить отдельный драйвер WireGuard в Linux?
Нет, если ядро версии 5.6 или новее — модуль уже в его составе. На старых ядрах понадобится пакет wireguard-dkms или пользовательская реализация wireguard-go.
Чем wg-quick отличается от wg?
Утилита wg управляет только параметрами интерфейса, а wg-quick дополнительно назначает адреса, маршруты, DNS и правила. Для клиентской настройки удобнее wg-quick.
Почему wg-quick ругается на права доступа к конфигу?
Файл доступен на чтение всем пользователям, а в нём лежит приватный ключ. Выполните sudo chmod 600 /etc/wireguard/wg0.conf.
Что делать при ошибке resolvconf: command not found?
Установите openresolv или systemd-resolvconf. Без этой утилиты wg-quick не применяет DNS из конфига, и запросы имён идут мимо туннеля.
Как включать VPN мышью, а не командой?
Импортируйте конфиг командой nmcli connection import type wireguard file /etc/wireguard/wg0.conf — соединение появится в настройках сети вашей графической оболочки.
Можно ли использовать один конфиг на сервере и ноутбуке?
Нет, соединение будет рваться у обоих. На одном доступе Muhomor VPN выпускается до пяти отдельных конфигов — по одному на устройство.