WireGuard + NetworkManager — це швидко, зручно і нативно для більшості десктопних дистрибутивів. У цій інструкції ми разом налаштуємо профіль VPN на Linux, правильно пропишемо DNS, зробимо автозапуск і розкладемо по поличках маршрутизацію (повний тунель і split-tunnel). Я покажу як через термінал Linux (nmcli), так і у GUI Linux. Поїхали! 🚀

Що потрібно встановити

NetworkManager зазвичай уже є на десктопі. Для ключів WireGuard потрібні інструменти wireguard-tools. Оновіть систему і поставте пакети:

# Debian/Ubuntu
sudo apt update
sudo apt install network-manager wireguard-tools

# Fedora
sudo dnf install NetworkManager wireguard-tools

# Arch
sudo pacman -S networkmanager wireguard-tools

Переконайтеся, що версія NetworkManager ≥ 1.26 (має вбудовану підтримку WireGuard). Перевірка:

nmcli --version

Основний How-to: через nmcli (NetworkManager CLI)

1) Згенеруйте ключі WireGuard

umask 077
mkdir -p ~/.config/wireguard
wg genkey | tee ~/.config/wireguard/wg-home.key | wg pubkey > ~/.config/wireguard/wg-home.pub
cat ~/.config/wireguard/wg-home.pub

Скопіюйте public key на сервер. Приватний ключ зберігайте з правами 600.

2) Створіть профіль WireGuard у NetworkManager

# Створити підключення (інтерфейс wg-home)
nmcli connection add type wireguard ifname wg-home con-name wg-home

# Додати приватний ключ до профілю (NM збереже його як секрет)
nmcli connection modify wg-home \
  wireguard.private-key "$(cat ~/.config/wireguard/wg-home.key)"

# Встановити IP-адресу в тунелі, режим manual і DNS (з пріоритетом для VPN)
nmcli connection modify wg-home \
  ipv4.addresses 10.10.10.2/32 \
  ipv4.method manual \
  ipv4.dns "10.10.10.1" \
  ipv4.dns-priority -42

# Додати пір (peer) з AllowedIPs = повний тунель (IPv4+IPv6)
nmcli connection modify wg-home +wireguard.peer \
  "public-key=PEER_PUBKEY,endpoint=wg.example.com:51820,allowed-ips=0.0.0.0/0,::/0,persistent-keepalive=25"

# Роутинг від піра і метрики (щоб VPN мав пріоритет)
nmcli connection modify wg-home wireguard.peer-routes yes
nmcli connection modify wg-home ipv4.route-metric 50 ipv6.route-metric 50

# Увімкнути автозапуск і підняти підключення
nmcli connection modify wg-home connection.autoconnect yes
nmcli connection up wg-home

Перевірка стану:

nmcli -f NAME,TYPE,DEVICE connection show --active
wg show wg-home
ip route
resolvectl status

Якщо бачите активне підключення, маршрути через wg-home та ваш VPN DNS у systemd-resolved — ура, ви на зв'язку 🎉

3) Split-tunnel (лише частина трафіку йде в VPN)

Замість повного тунелю перелічіть лише потрібні підмережі у AllowedIPs. У nmcli це робиться перевизначенням списку піра:

nmcli connection modify wg-home wireguard.peers \
  "public-key=PEER_PUBKEY,endpoint=wg.example.com:51820,\
allowed-ips=10.10.10.0/24,203.0.113.10/32,fd00:10:10::/64,persistent-keepalive=25"

# Перезапустіть профіль
nmcli connection down wg-home || true
nmcli connection up wg-home

DNS при цьому все одно залишиться з високим пріоритетом завдяки ipv4.dns-priority -42, тож запити підуть через VPN DNS (хоча загальний трафік — ні). Це часто найзручніша схема для робочих мережевих налаштувань.

4) Точна ручна маршрутизація

Якщо потрібно повністю контролювати маршрути, вимкніть автоматичні peer-routes і додайте свої:

nmcli connection modify wg-home wireguard.peer-routes no
nmcli connection modify wg-home ipv4.routes "10.66.0.0/24" +ipv4.routes "203.0.113.10/32"
nmcli connection down wg-home || true
nmcli connection up wg-home

Так ви задаєте, які саме підмережі йдуть у VPN, навіть якщо AllowedIPs у пірі ширший.

Альтернативні способи

Імпорт готового wg-quick файлу

Якщо у вас уже є wg0.conf від сервера, просто імпортуйте:

nmcli connection import type wireguard file ./wg0.conf
nmcli connection up wg0

NetworkManager перетворить його у свій профіль. Далі все можна правити через nmcli або GUI.

systemd-networkd або wg-quick (без NetworkManager)

Це підходить для серверів або мінімальних систем, але на десктопі я рекомендую лишатися з NetworkManager — він краще інтегрований з DNS та автозапуском.

GUI-спосіб (GNOME/KDE)

У більшості середовищ робочого столу (GNOME, KDE) WireGuard доступний через стандартні налаштування мережі. Кроки:

  • Відкрийте Налаштування → Мережа → VPN → Додати (+) → WireGuard.
  • Заповніть: Назва профілю (наприклад, wg-home), Приватний ключ, Адреса (10.10.10.2/32), Порт (якщо потрібен), MTU (за замовчуванням ок), Endpoint, Публічний ключ піра, AllowedIPs, Keepalive.
  • DNS: додайте VPN DNS (наприклад, 10.10.10.1). У GNOME в розділі IPv4/IPv6 натисніть DNS та введіть адресу.
  • Для split-tunnel відкрийте «Маршрути…» і увімкніть опцію «Використовувати це з'єднання лише для ресурсів його мережі» — це еквівалент відсутності дефолтного маршруту через VPN.
  • Увімкніть «Підключатися автоматично» для автозапуску після логіну або старту системи.

FAQ

WireGuard не з’являється в GUI

Перевірте NetworkManager ≥ 1.26 і наявність wireguard-tools. Оновіть систему. На дуже старих дистрибутивах міг знадобитися окремий плагін, але зараз підтримка вбудована.

DNS не перемикається на VPN

Переконайтеся, що NetworkManager керує резолвером (systemd-resolved). Перевірте:

resolvectl status

У профілі має бути ipv4.dns (і/або ipv6.dns) та ipv4.dns-priority -42. Якщо у вас локальний resolvconf, увімкніть інтеграцію з NM або перейдіть на systemd-resolved.

З’єднання падає після сну

Додайте persistent-keepalive=25 у peer і увімкніть connection.autoconnect yes. Перевірте, що брандмауер не блокує вихідний UDP.

Потрібно кілька пірів

Додавайте ще один +wireguard.peer із власним allowed-ips. Якщо конфіг складний, зручніше імпортувати готовий wg-quick файл з кількома пірами.

Проблеми з MTU/швидкістю

Спробуйте зменшити MTU, наприклад до 1280–1420:

nmcli connection modify wg-home wireguard.mtu 1420
nmcli connection down wg-home || true
nmcli connection up wg-home

Конфлікт із wg-quick

Не запускайте одночасно wg-quick up wg-home і профіль NM з тим же інтерфейсом. Спочатку wg-quick down, потім керуйте підключенням через NetworkManager.

Порада від Kernelka

Для робочого середовища тримайте окремі профілі: «повний тунель» для публічних Wi‑Fi і «split-tunnel» для доступу до офісних ресурсів. Задайте route-metric нижчим для важливого профілю — так він виграє пріоритет. І не забувайте: приватний ключ у файлі має бути з правами 600, а краще зберігати його в секретному сховищі NetworkManager.

Підсумок

  • Створили профіль WireGuard у NetworkManager через термінал Linux і GUI Linux.
  • Налаштували DNS із пріоритетом для VPN і автозапуск профілю.
  • Розібрали повний тунель і split-tunnel через AllowedIPs та власні маршрути.
  • Розв’язали типові проблеми: DNS, сон, MTU, імпорт конфігів.
  • Маєте готовий чекліст для надійних мережевих налаштувань VPN на Linux.