MAATRIX / Блог / WireGuard на Ubuntu Desktop: клиент через NetworkManager

WireGuard на Ubuntu Desktop: клиент через NetworkManager

MAATRIX

Если вы уже поднимали WireGuard на сервере, то знаете два способа подключиться с рабочего ноутбука на Ubuntu: вручную через wg-quick и systemd-юнит, или через графический NetworkManager, который есть в системе из коробки. Второй способ проще для повседневной работы — конфигурация переживает перезагрузки, включается через переключатель в трее, а VPN не нужно поднимать вручную после каждого ребута. Разберём, как импортировать готовый .conf и настроить клиент правильно, без плясок с терминалом.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что понадобится перед импортом

Вам нужен файл конфигурации клиента — тот самый .conf, который генерируется на сервере при добавлении пира. Обычно он выглядит так:

[Interface]
PrivateKey = <приватный ключ клиента>
Address = 10.8.0.2/24
DNS = 10.8.0.1

[Peer]
PublicKey = <публичный ключ сервера>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Если у вас пока нет такого файла и сервера тоже нет, сначала пройдите установку — процесс генерации ключей и конфигов клиента подробно описан в статье про установку WireGuard на VPS.

Что касается системы: начиная с Ubuntu 22.04 и точно в 24.04 поддержка WireGuard встроена в NetworkManager (с версии 1.16) как внутренний плагин — отдельно ставить network-manager-wireguard не нужно, в отличие от OpenVPN, где требуется network-manager-openvpn-gnome. Проверить версию NetworkManager можно командой:

nmcli --version

Если у вас 1.16 и выше — импорт .conf заработает сразу. На старых LTS-релизах (18.04 и ранние сборки 20.04) плагина может не быть — тогда либо обновите NetworkManager, либо используйте wg-quick напрямую.

Импорт .conf через Параметры Ubuntu

Самый очевидный путь — через GUI:

  1. Откройте Параметры → Сеть → VPN.
  2. Нажмите «+» рядом с разделом VPN.
  3. В списке протоколов выберите «Импортировать из файла…» (Import from file).
  4. Укажите путь к вашему .conf — NetworkManager сам распознает формат WireGuard и создаст соединение с тем же именем, что у файла (без расширения).
  5. Появится новая запись в списке VPN-подключений — включите её переключателем.

Важный нюанс: NetworkManager при импорте переносит [Interface] и [Peer] практически один в один — приватный ключ, публичный ключ сервера, Endpoint, AllowedIPs, DNS. А вот строки PostUp и PostDown, если они были в конфиге (например, правила iptables для NAT), игнорируются — NM не выполняет произвольные шелл-команды из импортированного файла. Для клиентского .conf это обычно не критично: такие директивы чаще встречаются в серверных конфигах, а не в клиентских.

После импорта откройте настройки созданного соединения (шестерёнка рядом с именем) и проверьте вкладку IPv4 — там будет виден адрес интерфейса и, если он был в конфиге, DNS-сервер.

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Импорт через nmcli — быстрее для нескольких машин

Если вы настраиваете не один ноутбук, а сразу несколько рабочих станций, кликать по GUI на каждой — не самый быстрый путь. Тот же импорт делает одна команда:

nmcli connection import type wireguard file /home/user/wg-configs/client.conf

Команда создаёт соединение с тем же именем, что и у файла, и делает то же самое, что и кнопка «Импортировать из файла» в GUI — это один и тот же код внутри NetworkManager, просто два разных интерфейса к нему. Проверить, что профиль появился:

nmcli connection show

Включить соединение:

nmcli connection up client

Здесь client — имя профиля, как оно показано в выводе nmcli connection show (обычно совпадает с именем файла без .conf). Если имя содержит пробелы, берите его в кавычки.

Это удобно завернуть в Ansible-плейбук или простой bash-скрипт для развёртывания на парке машин — сам .conf при этом можно доставлять через защищённый канал, а не копипастить руками.

Проверка подключения и хендшейка

После включения соединения убедитесь, что туннель реально поднялся, а не просто числится активным в списке.

Проверить, что интерфейс создан и получил адрес:

ip a show wg0

Имя интерфейса NetworkManager обычно берёт как wg0, wg1 и так далее — если у вас уже был ручной wg-quick-туннель с именем wg0, могут быть конфликты; переименуйте один из них в настройках соединения.

Проверить внешний IP — если туннель поднят с AllowedIPs = 0.0.0.0/0, весь трафик должен идти через сервер:

curl -4 ifconfig.me

Адрес должен совпадать с IP вашего сервера. Если утилита wireguard-tools установлена (sudo apt install wireguard-tools), можно посмотреть статус хендшейка напрямую:

sudo wg show

Строка latest handshake должна обновляться каждые 1–2 минуты — это значит, что PersistentKeepalive работает и туннель не «засыпает» за NAT. Если хендшейка нет вовсе, велика вероятность, что дело не в клиенте, а в сервере или файрволе — детальный разбор причин есть в статье про хендшейк без трафика.

Автоподключение, split-tunnel и DNS

По умолчанию импортированное соединение не поднимается автоматически при старте системы. Включить автоподключение:

nmcli connection modify client connection.autoconnect yes

Или в GUI — в настройках соединения включите переключатель «Подключаться автоматически».

Второй важный момент — маршрутизация. Если в AllowedIPs стоит 0.0.0.0/0, ::/0, NetworkManager сделает VPN-интерфейс шлюзом по умолчанию для всего трафика (full tunnel). Если вам нужен split-tunnel — например, через VPN должны ходить только запросы к конкретной подсети сервера, а остальной интернет — напрямую, — измените AllowedIPs на нужную подсеть ещё на этапе генерации конфига на сервере, либо отредактируйте её в настройках соединения (IPv4 → Маршруты → Routes) уже после импорта.

Есть ещё один переключатель, который часто путают со split-tunnel — «Использовать это соединение только для ресурсов в его сети» (в терминале это ipv4.never-default):

nmcli connection modify client ipv4.never-default yes

Он не меняет AllowedIPs, а лишь запрещает VPN-интерфейсу становиться маршрутом по умолчанию — трафик пойдёт в туннель только для тех подсетей, что явно указаны в AllowedIPs/routes, а весь остальной — как обычно, через основной интерфейс.

По DNS: Ubuntu Desktop использует systemd-resolved, и NetworkManager штатно интегрируется с ним через плагин dns=systemd-resolved. Если в .conf был указан DNS = 10.8.0.1, при активном соединении домены будут резолвиться через этот сервер для всего трафика (или только для доменов внутренней сети — если настроен split-DNS). Проверить, какой DNS реально используется:

resolvectl status wg0

Если раздел не появляется или показывает старый DNS — вероятно, соединение не стало маршрутом по умолчанию, и стоит свериться с ipv4.never-default и AllowedIPs. Отдельно стоит проверить отсутствие утечек — как это сделать, описано в статье про проверку DNS leak.

Типичные проблемы GUI-клиента

Пункта «Импортировать из файла» нет в списке VPN. Значит, версия NetworkManager старая или плагин WireGuard не установлен. Обновите пакет network-manager до актуальной версии из репозитория Ubuntu или используйте nmcli connection import — иногда он срабатывает даже там, где GUI не показывает пункт меню.

Соединение включено, но интерфейс не появляется. Проверьте журнал:

journalctl -u NetworkManager -f

и одновременно переключите VPN. Частая причина — модуль ядра wireguard не загружен (на новых ядрах он встроен, но на кастомных сборках может отсутствовать) или конфликт имени интерфейса с уже существующим wg0.

Хендшейк не проходит из графического клиента, хотя тот же .conf работает через wg-quick на другой машине. Проверьте системное время — если часы сильно разъехались, у некоторых сборок WireGuard возможны проблемы с проверкой пиров. Также убедитесь, что импортированный AllowedIPs для peer не был случайно урезан вручную в GUI — из-за этого сервер может не пропускать пакеты клиента.

После сна ноутбука туннель не восстанавливается. Это известная особенность NetworkManager с некоторыми Wi-Fi драйверами: соединение считается активным, но пакеты не ходят. Помогает отключить и включить профиль вручную или через таймер PersistentKeepalive в 15–20 секунд вместо стандартных 25 — так туннель быстрее «просыпается» после возврата сети.

Несколько .conf от разных серверов конфликтуют по адресам. Если оба конфига используют одну и ту же внутреннюю подсеть (например, 10.8.0.0/24), одновременно поднять оба туннеля не получится корректно — маршруты будут перекрываться. Держите активным один профиль за раз или договоритесь с провайдерами серверов о разных диапазонах.

GUI против wg-quick: когда что выбрать

КритерийNetworkManager (GUI/nmcli)wg-quick + systemd
Порог входаИмпорт в 2 клика, без терминалаНужны команды и редактирование юнита
АвтозапускПереключатель в настройкахsystemctl enable wg-quick@wg0
Несколько профилейПереключение кликом в трееПереименование интерфейсов вручную
PostUp/PostDown из конфигаНе выполняютсяВыполняются как есть
Split-tunnel и DNSНастраивается в GUI без правки файлаПравка .conf и resolvconf/systemd-resolved вручную
Подходит дляРабочих станций и ноутбуковСерверов и headless-машин

Для десктопа NetworkManager почти всегда удобнее — это его прямое назначение. wg-quick остаётся оправданным выбором на серверах без графической оболочки или там, где нужны кастомные PostUp-скрипты.

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Нужно ли ставить отдельный пакет для WireGuard в NetworkManager?

Нет, начиная с NetworkManager 1.16 (это версии из репозиториев Ubuntu 22.04 и новее) поддержка встроена. Отдельно можно поставить wireguard-tools, если хотите пользоваться командой wg show для диагностики.

Почему после импорта интерфейс не называется wg0, а получил другое имя?

NetworkManager сам подбирает свободное имя интерфейса. Если wg0 занят другим соединением (например, ручным wg-quick-туннелем), система возьмёт wg1 и так далее. Имя можно задать вручную в настройках соединения.

Как быстро переключаться между несколькими серверами WireGuard?

Импортируйте каждый .conf как отдельное соединение и переключайтесь через апплет сети в трее — активным может быть только один туннель с пересекающейся подсетью одновременно, но профили можно держать все сразу и включать нужный по клику.

Куда делись команды PostUp/PostDown из моего конфига?

NetworkManager их не исполняет — это ограничение штатного плагина, а не баг. Если серверная часть настройки зависела от этих скриптов, они должны выполняться на самом сервере, а не на клиенте.

Можно ли импортировать конфиг с QR-кода, как на телефоне?

Нет, GUI Ubuntu принимает только файл .conf. Если у вас есть только QR-код (например, сгенерированный для мобильного клиента), сначала декодируйте его в текстовый .conf любым QR-ридером, а затем импортируйте как обычный файл.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →