WireGuard - це сучасний VPN, який живе прямо в ядрі Linux: швидкий, з крихітним кодом і без «майстрів налаштування» на пів години. Увесь сервер - це один файл wg0.conf і пара ключів. А кожен клієнт - це ще один маленький конфіг, який на телефон заходить одним скануванням QR-коду.
Що потрібно зробити?#
Підняти WireGuard-сервер на VPS, згенерувати готовий клієнтський конфіг, показати його як QR для телефона - і підключити клієнт, щоб переконатися, що тунель справді працює. Щоб було видно обидві сторони, записав усе наживо у двох панелях: ліворуч сервер, праворуч клієнт.
З чим працюю?#
| |
Сервер - свіжа Ubuntu 26.04 LTS, усе від root. Клієнтом у записі буде Debian 13 - WireGuard кросплатформний, тож сервер і клієнт можуть бути на різних дистрибутивах (і на Windows/macOS/Android/iOS теж).
У демо дві машини в одній мережі: сервер (майбутній VPN-сервер, 10.10.60.104) і клієнт (10.10.60.103). Між ними через WireGuard піднімемо окрему приватну мережу 10.9.0.0/24: сервер отримає адресу 10.9.0.1, клієнт - 10.9.0.2. На реальному VPS замість 10.10.60.104 у клієнта в полі Endpoint буде публічний IP вашого сервера, але логіка та сама.
| |
У записі ліворуч - сервер, праворуч - клієнт.
Далі те саме, що в записі, тільки вже можна копіювати.
Сервер: встановлення і ключі#
Ставимо інструменти WireGuard, qrencode (для QR-коду) і iptables (для NAT):
| |
Генеруємо пару ключів сервера. Трюк із tee одразу зберігає приватний ключ у файл, а на екран виводить лише публічний - приватний ніколи не світиться:
| |
Сервер: конфіг wg0.conf#
Весь сервер описується одним файлом. PostUp/PostDown вмикають переадресацію пакетів і NAT, щоб трафік клієнтів виходив у світ через сервер:
| |
10.9.0.0/24- приватна підмережа самого VPN (сервер отримує10.9.0.1, клієнти -10.9.0.2,10.9.0.3…).51820/udp- порт, який слухає сервер (не забудь відкрити його у фаєрволі/безпековій групі VPS).eth0- зовнішній інтерфейс сервера. Перевір свій:ip route show defaultпокаже, який інтерфейс післяdev.
Щоб не копіювати ключ руками, конфіг можна зібрати так, аби він сам підставив ключ із файлу:
| |
Піднімаємо тунель і додаємо службу в автозапуск однією командою:
| |
wg show має показати інтерфейс wg0, його публічний ключ і listening port: 51820 - сервер готовий приймати клієнтів.
Готовий клієнтський конфіг#
Тепер найцікавіше - робимо повністю готовий конфіг для клієнта. Генеруємо йому ключі:
| |
Складаємо файл client.conf, який клієнт просто імпортує:
| |
Два ключові рядки, у яких найчастіше плутаються:
Endpoint- публічна адреса вашого VPS і порт51820. Саме сюди клієнт стукає, щоб підняти тунель.AllowedIPs- що саме завертати у VPN:10.9.0.0/24- лише VPN-мережу (дістатися до сервера й інших клієнтів). Решта трафіку йде напряму. Так налаштовано в записі.0.0.0.0/0, ::/0- весь трафік через VPN (повноцінний VPN: ваш публічний IP стає IP сервера, провайдер не бачить, куди ви ходите). Для цього на сервері й потрібніip_forward+ NAT зPostUp.
PersistentKeepalive = 25- шле службовий пакет раз на 25 с, щоб тунель не «засинав» за NAT (важливо для клієнтів за домашнім роутером).
Залишилось сказати серверу про цього клієнта - додаємо його як peer:
| |
Ця команда додає peer «наживо». Щоб він пережив перезавантаження - допиши той самий блок
[Peer](зPublicKeyклієнта іAllowedIPs = 10.9.0.2/32) у/etc/wireguard/wg0.conf.
QR-код для телефона#
Офіційний застосунок WireGuard (Android/iOS) вміє імпортувати конфіг камерою. Перетворюємо client.conf на QR прямо в терміналі:
| |
З’являється QR - наводиш телефоном у застосунку WireGuard («+» → «Створити з QR-коду»), і клієнт налаштований за секунду, без жодного копіювання файлів.
Клієнт: підключення#
На комп’ютері-клієнті все ще простіше. Кладемо client.conf у /etc/wireguard/wg0.conf і піднімаємо:
| |
Перевіряємо, що тунель живий - пінгуємо сервер за його VPN-адресою:
| |
У записі видно: 3 received, 0% packet loss - пакети йдуть крізь тунель. А на сервері wg show показує нашого клієнта з живим рукостисканням:
| |
latest handshake і зростання transfer - головний доказ, що VPN працює.
Кілька клієнтів#
Схема масштабується елементарно: кожному новому клієнту - свій конфіг (наступна адреса 10.9.0.3, 10.9.0.4…), свої ключі й окремий блок [Peer] на сервері. Один wg set wg0 peer ... - і ще один телефон чи ноутбук у вашому VPN.
Підсумок#
WireGuard дає свій VPN без важких конфігів і сторонніх сервісів: один файл на сервері, маленький конфіг на клієнті й QR для телефона. Приватний ключ ніколи не залишає свого пристрою, тунель шифрований, а wg show чесно показує, хто підключений. Далі можна автоматизувати видачу клієнтів скриптом або додати вебінтерфейс - але основа, як бачите, тримається на кількох командах.



