Блог компанії 3v-Hosting

Налаштування WireGuard на VPS

Адміністрування

14 хв.


Застереження

Інформація в цій статті надається виключно в освітніх та технічних цілях. WireGuard є інструментом мережевої безпеки і може використовуватися для захисту з’єднань, адміністрування серверів та організації приватних мереж. Автор та компанія 3v-Hosting не несуть відповідальності за використання наведених інструкцій у цілях, що порушують законодавство, умови використання інтернет-сервісів або правила мережевих провайдерів. Користувач самостійно несе відповідальність за дотримання законів своєї країни та відповідних нормативних вимог під час використання VPN-технологій.

 

 

VPN вже давно перестав бути інструментом виключно для системних адміністраторів, але останнім часом, у зв'язку з поступовою сегментацією інтернет-простору, використання різних VPN-сервісів набирає популярності й серед звичайних користувачів. Сьогодні він використовується для віддаленої роботи, безпечного доступу до корпоративної інфраструктури, адміністрування серверів, організації приватних мереж між сервісами, а також для доступу до заборонених сайтів і сервісів.

Однак не всі VPN однаково зручні. Класичні рішення на кшталт OpenVPN дуже потужні, але часто складні в налаштуванні та досить вимогливі до ресурсів. Саме тому все більше фахівців переходять на WireGuard - сучасний VPN-протокол, який поєднує в собі простоту налаштування та використання, високу продуктивність і швидкість роботи, а також потужну криптографію.

У цій статті ми з вами розберемося, що таке WireGuard, як він працює, чому ми рекомендуємо його розгортання на VPS, і крок за кроком налаштуємо власний VPN-сервер. Такий підхід дає повний контроль над вашим інтернет-з'єднанням і позбавляє вас від залежності від сторонніх сервісів.

 

 

 

 

Що таке WireGuard і чому він став популярним

WireGuard - це сучасний VPN-протокол, призначений для створення захищених мережевих тунелів між пристроями. З його допомогою можна з'єднувати сервери, комп'ютери та мобільні пристрої через зашифрований канал, завдяки чому трафік, що передається, стає недоступним для стороннього спостереження. По суті, WireGuard дозволяє побудувати віртуальну приватну мережу, всередині якої пристрої взаємодіють так, ніби знаходяться в одній локальній інфраструктурі.

Така модель часто використовується для адміністрування серверів, підключення до внутрішніх сервісів компанії або об'єднання декількох дата-центрів в єдину приватну мережу. Наприклад, розробники можуть підключатися до staging-середовища або бази даних через захищений тунель, не відкриваючи доступ до цих сервісів з публічного інтернету.

Головна особливість WireGuard - це його мінімалістична архітектура. Протокол спочатку проектувався як просте і швидке рішення, позбавлене надмірної складності, характерної для багатьох традиційних VPN. Він працює поверх UDP, використовує сучасні криптографічні алгоритми та інтегрується в мережевий стек операційної системи. У Linux WireGuard може працювати безпосередньо на рівні ядра, що позитивно впливає на продуктивність і зменшує затримки.

Якщо порівнювати його з класичними VPN-рішеннями, різниця стає помітною відразу. Наприклад, OpenVPN налічує десятки тисяч рядків коду, тоді як ядро WireGuard значно компактніше. Це спрощує аудит безпеки, знижує ймовірність помилок і робить поведінку протоколу більш передбачуваною.

Конфігурація WireGuard також значно простіша. Замість складної системи сертифікатів тут використовується модель з публічними та приватними ключами, коли кожен пристрій має свою пару ключів, а доступ до мережі визначається налаштуваннями в конфігурації. Завдяки цьому розгортання VPN-сервера займає буквально кілька хвилин.

На практиці це означає, що VPN на базі WireGuard може забезпечувати високу пропускну здатність навіть на недорогому VPS. Нерідко швидкість з'єднання через тунель майже не відрізняється від швидкості звичайного інтернет-підключення, а сама система залишається стабільною навіть при роботі з декількома клієнтами.

Саме поєднання високої швидкості, простоти налаштування та компактної архітектури зробило WireGuard одним із найпопулярніших VPN-рішень для сучасних серверних інфраструктур останнім часом.

 

 

 

 

Як працює WireGuard

Як ми говорили вище, WireGuard побудований на максимально простій мережевій моделі. На відміну від багатьох класичних VPN-рішень, де використовується складна інфраструктура сертифікатів і додаткові рівні протоколів, тут все засновано на зрозумілій системі вузлів і криптографічних ключів.

Кожен учасник мережі, будь то сервер або клієнт, розглядається як peer (вузол). Для ідентифікації використовується пара ключів, публічний і приватний. Приватний ключ зберігається тільки на пристрої власника, а публічний використовується іншими учасниками мережі для встановлення захищеного з'єднання.

Коли клієнт підключається до сервера, між ними створюється зашифрований тунель поверх UDP. Через цей тунель і передається весь мережевий трафік, який шифрується сучасними криптографічними алгоритмами. Сервер, отримуючи такі пакети, розшифровує їх і перенаправляє до потрібного одержувача, наприклад, у внутрішню мережу або в інтернет.

З технічної точки зору WireGuard створює в системі віртуальний мережевий інтерфейс, який зазвичай називають wg0. Цей інтерфейс працює так само, як звичайний мережевий адаптер, тобто йому призначається IP-адреса, через нього проходить трафік, і система може маршрутизувати через нього мережеві пакети.

Основними елементами роботи WireGuard є:

  • wg0 - віртуальний мережевий інтерфейс, через який проходить VPN-трафік;
  • UDP-порт - використовується для передачі зашифрованого тунелю між вузлами;
  • Public і Private Keys - механізм ідентифікації учасників мережі;
  • AllowedIPs - параметр конфігурації, який визначає, які IP-адреси або мережі повинні передаватися через VPN.

Параметр AllowedIPs відіграє відразу дві ролі, оскільки він одночасно визначає маршрути для відправлення трафіку та список адрес, які дозволено використовувати конкретному учаснику мережі. Завдяки цьому WireGuard може ефективно керувати маршрутизацією, не вдаючись до використання складних правил та додаткових налаштувань.

У спрощеному вигляді з'єднання виглядає наступним чином:

WireGuard works

Це дозволяє створювати не тільки VPN-доступ до Інтернету, але й повноцінні приватні мережі між серверами.

 

 

 

 

Коли має сенс запускати WireGuard на VPS

Розгортання власного VPN-сервера на VPS - це досить поширена практика серед системних адміністраторів, розробників та DevOps-інженерів. Віртуальний сервер у цьому випадку стає центральною точкою доступу до інфраструктури компанії, через яку можна безпечно підключатися до внутрішніх сервісів, серверів та адміністративних панелей.

Використання WireGuard на VPS особливо зручне тим, що такий сервер доступний з будь-якої точки світу і має публічну IP-адресу. Це дозволяє створити захищений тунель між вашими пристроями та серверною інфраструктурою, не відкриваючи чутливі сервіси безпосередньо в Інтернеті.

На практиці WireGuard на VPS використовується в найрізноманітніших сценаріях. Один із найпоширеніших - це безпечне адміністрування серверів. Наприклад, SSH-доступ, панелі керування або внутрішні сервіси можна залишити закритими для публічного доступу та підключатися до них лише через VPN.

Інший типовий сценарій - це об'єднання сервісів у приватну мережу. Це може бути інфраструктура розробки, staging-середовище або якісь внутрішні API. У такому випадку сервери та розробники підключаються до однієї віртуальної мережі та взаємодіють один з одним так, ніби знаходяться в одній локальній інфраструктурі.

WireGuard також часто застосовують для об'єднання декількох серверів або дата-центрів в одну мережу. Такий підхід використовується при побудові розподілених систем, де сервіси знаходяться в різних локаціях, але повинні обмінюватися даними через захищений канал.

Ну і ще один популярний варіант - безпечна віддалена робота. Підключившись до VPN, співробітники отримують доступ до корпоративних сервісів, баз даних і внутрішніх панелей управління без необхідності відкривати їх у публічному Інтернеті.

Звісно, ми навели лише кілька прикладів, у тому числі з особистої практики, але цим, зрозуміло, використання WireGuard не обмежується.

 

При цьому WireGuard залишається дуже легким рішенням з точки зору ресурсів. Для його запуску не потрібен потужний сервер, тому часто достатньо звичайного, недорогого VPS з базовою конфігурацією. У більшості випадків вистачає одного віртуального процесора, близько 512 МБ оперативної пам'яті та декількох гігабайт дискового простору. Підійде практично будь-який сучасний Linux-сервер, наприклад Ubuntu або Debian, з ядром версії 5.6 або новіше та публічною IP-адресою.

Завдяки такій економічності навіть невеликий VPS здатний обслуговувати десятки VPN-клієнтів без помітного навантаження на систему та мережу. Це робить WireGuard одним із найпрактичніших рішень для організації власного VPN-сервера.

 

 

 

 

Підготовка VPS для встановлення WireGuard

Для розгортання WireGuard підійде практично будь-який VPS. Але найпоширенішим варіантом, звичайно, є сервер з Linux, наприклад Ubuntu або Debian. На цьому варіанті й будемо базувати практичну частину.

Перед встановленням необхідно виконати базову підготовку системи.

Спочатку оновлюємо пакети:

sudo apt update
sudo apt upgrade

 

Потім встановлюємо WireGuard:

sudo apt install wireguard

 

Після встановлення в системі з'являться дві утиліти:

  • wg - управління інтерфейсами WireGuard;
  • wg-quick - спрощений запуск VPN-конфігурацій.

 

Наступним кроком буде увімкнення IP-маршрутизації, щоб сервер міг передавати мережевий трафік між клієнтами та інтернетом. Для цього відкрийте файл конфігурації /etc/sysctl.conf і знайдіть рядок:

net.ipv4.ip_forward=1

 

Якщо вона закомментована, то розкоментуйте її. А якщо параметр встановлений на 0, тоді змініть на 1. Потім застосуйте зміни, набравши в консолі команду:

sudo sysctl -p

 

Тепер сервер готовий до налаштування VPN. Як ви бачите - все гранично просто.

 

 

 

 

Генерація ключів WireGuard

Знову ж таки, як ми вже говорили вище - WireGuard використовує криптографію на основі публічних і приватних ключів, коли кожен учасник VPN має власну пару ключів. Давайте створимо їх на сервері:

wg genkey | tee server_private.key | wg pubkey > server_public.key

 

Після виконання цієї команди на сервері з'являться два файли:

  • server_private.key - приватний ключ сервера;
  • server_public.key - публічний ключ.

 

Щоб переглянути ключ, ви можете виконати команду:

cat server_private.key

 

Важливо!!! приватний ключ не можна передавати іншим учасникам мережі.

 

 

 

 

Конфігурація VPN-інтерфейсу

Тепер давайте створимо основний конфігураційний файл WireGuard.

sudo nano /etc/wireguard/wg0.conf

 

Ось приклад мінімальної необхідної конфігурації:

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

 
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

 

Розглянемо основні параметри конфігурації:

  • Address - IP-адреса VPN-інтерфейсу. Це внутрішня адреса сервера всередині VPN-мережі, через яку він буде взаємодіяти з підключеними клієнтами;
  • ListenPort - порт, на якому WireGuard приймає вхідні з'єднання. За замовчуванням найчастіше використовується UDP-порт 51820, але за необхідності його можна змінити;
  • PrivateKey - приватний ключ сервера. Він використовується для шифрування з'єднання та ідентифікації вузла в мережі WireGuard. Цей ключ повинен зберігатися тільки на сервері й не передаватися іншим учасникам мережі;
  • PostUp - команда, яка виконується після запуску інтерфейсу WireGuard. Зазвичай вона використовується для додавання правил NAT або маршрутизації, щоб клієнти могли виходити в Інтернет через сервер;
  • PostDown - команда, що виконується при зупинці інтерфейсу. Вона видаляє раніше додані правила NAT і повертає мережеві налаштування системи до початкового стану.

 

Після збереження файлу встановимо правильні права на нього:

chmod 600 /etc/wireguard/wg0.conf

 

 

 

 

Запуск і перевірка роботи WireGuard

Після створення конфігураційного файлу можна запустити VPN-інтерфейс WireGuard. Для цього використовується утиліта wg-quick, яка автоматично застосовує всі налаштування з конфігурації.

 

Запустимо інтерфейс командою:

sudo wg-quick up wg0

 

Якщо конфігурація вказана правильно, система створить віртуальний мережевий інтерфейс wg0, застосує правила маршрутизації та NAT, після чого VPN-сервер почне приймати підключення.

 

Щоб переглянути поточний стан WireGuard і переконатися, що інтерфейс працює, можна виконати команду:

sudo wg show

 

У відповідь ви побачите інформацію про VPN-інтерфейс, включаючи відкритий ключ сервера, використовуваний порт і список підключених клієнтів (якщо вони вже є).

 

Також варто переконатися, що інтерфейс дійсно з'явився в системі. Перевірити це можна командою:

ip a | grep wg0

Якщо інтерфейс запущений коректно, він буде відображатися серед мережевих пристроїв.

 

Після цього можна перевірити мережеве з'єднання всередині VPN. Наприклад, якщо сервер має внутрішню адресу 10.10.0.1, можна виконати:

ping 10.10.0.1

 

Коли клієнт підключиться до VPN, додатково варто перевірити зовнішню IP-адресу, щоб переконатися, що трафік проходить через сервер:

curl ifconfig.me

 

Якщо вивід команди показує IP-адресу вашого VPS, значить VPN-тунель працює коректно і весь трафік проходить через сервер.

 

Щоб WireGuard автоматично запускався після перезавантаження сервера, увімкнемо відповідний systemd-сервіс:

sudo systemctl enable wg-quick@wg0

 

Після цього VPN-інтерфейс запускатиметься автоматично під час запуску системи.

 

 

 

Додавання клієнта VPN

Після того, як ми налаштували сам сервер, можна перейти до додавання та налаштування клієнта. У WireGuard кожен учасник мережі має власну пару криптографічних ключів, тому для клієнта спочатку необхідно згенерувати ключі. Виконаємо команду:

wg genkey | tee client_private.key | wg pubkey > client_public.key

 

Ця команда створює приватний ключ клієнта і зберігає його у файлі client_private.key. Потім на основі цього ключа автоматично генерується публічний ключ, який записується у файл client_public.key. Приватний ключ буде використовуватися в конфігурації клієнта, а публічний ключ необхідно буде додати на сервер.

 

Тепер додамо клієнта до конфігурації WireGuard на сервері. Для цього відкрийте файл wg0.conf і додайте наступний блок:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.10.0.2/32

 

Параметр PublicKey містить публічний ключ клієнта, який дозволяє серверу розпізнавати пристрій під час підключення. Параметр AllowedIPs визначає внутрішню IP-адресу клієнта у VPN-мережі. У цьому прикладі клієнт отримуватиме та використовуватиме адресу 10.10.0.2.

 

Після зміни конфігурації необхідно перезапустити інтерфейс WireGuard, щоб застосувати нові налаштування:

sudo wg-quick down wg0
sudo wg-quick up wg0

 

Перша команда зупиняє VPN-інтерфейс, а друга запускає його знову з оновленою конфігурацією.

 

Тепер створимо конфігурацію на стороні клієнта. Вона може виглядати наступним чином:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.10.0.2/24
DNS = 1.1.1.1

 
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

 

У розділі Interface вказується приватний ключ клієнта та його IP-адреса всередині VPN-мережі. Параметр DNS задає DNS-сервер, який буде використовуватися під час роботи через VPN.

У розділі Peer описується сервер, до якого буде підключатися клієнт. Тут вказується публічний ключ сервера, його зовнішня IP-адреса та порт. Параметр AllowedIPs = 0.0.0.0/0 означає, що весь інтернет-трафік клієнта буде проходити через VPN. Параметр PersistentKeepalive допомагає підтримувати з'єднання активним, що особливо важливо для мобільних мереж і NAT.

Після створення файлу конфігурації його достатньо імпортувати в додаток WireGuard на пристрої клієнта. Після цього клієнт зможе підключитися до сервера та використовувати захищений VPN-тунель.

 

 

 

 

Імпорт конфігурації в додаток WireGuard

Після створення клієнтського конфігураційного файлу його потрібно імпортувати в додаток WireGuard на пристрої, з якого буде виконуватися підключення. WireGuard підтримує більшість сучасних платформ, тому один і той самий сервер можна використовувати для підключення різних пристроїв.

Офіційні клієнти WireGuard доступні для:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS

На настільних системах зазвичай достатньо встановити додаток WireGuard та імпортувати файл конфігурації (.conf). Після імпорту в програмі з'явиться новий VPN-профіль, який можна активувати одним перемикачем.

На мобільних пристроях часто використовують більш зручний спосіб - імпорт конфігурації через QR-код. Це дозволяє швидко додати VPN-профіль без ручного копіювання ключів і параметрів.

 

Згенерувати QR-код з конфігураційного файлу можна прямо на сервері за допомогою утиліти qrencode:

qrencode -t ansiutf8 < client.conf

 

Ця команда створює QR-код у терміналі на основі вмісту файлу client.conf. Відкривши додаток WireGuard на смартфоні, можна вибрати додавання нового тунелю через сканування QR-коду та навести камеру на екран терміналу.

Після сканування додаток автоматично створить VPN-профіль з усіма необхідними налаштуваннями, і пристрій буде готовий до підключення до вашого WireGuard-сервера.

 

 

 

 

Налаштування брандмауера для WireGuard

Щоб VPN-сервер міг приймати підключення від клієнтів, необхідно дозволити вхідні з'єднання на порт WireGuard. За замовчуванням WireGuard використовує UDP-порт 51820, тому цей порт повинен бути відкритий у брандмауері сервера.

Якщо на сервері використовується UFW (Uncomplicated Firewall), то відповідне правило можна додати наступною командою:

sudo ufw allow 51820/udp

 

Ця команда дозволяє вхідні UDP-з'єднання на порт 51820, що дозволить клієнтам встановлювати VPN-тунель із сервером.

 

Якщо управління мережевими правилами здійснюється через iptables, дозвіл можна додати так:

iptables -A INPUT -p udp --dport 51820 -j ACCEPT

 

Тут правило додається до ланцюжка INPUT і дозволяє всі вхідні UDP-пакети, спрямовані на порт WireGuard.

 

У більшості випадків цього достатньо, щоб сервер почав приймати VPN-підключення. Однак у робочих інфраструктурах часто застосовують додаткові обмеження. Наприклад, якщо VPN використовується тільки всередині команди або компанії, можна дозволити доступ до порту WireGuard тільки з певних IP-адрес або мереж. Це знижує ймовірність сканування та спроб несанкціонованого підключення до сервера.

 

 

 

 

Типові проблеми при налаштуванні WireGuard

Незважаючи на простоту WireGuard, при першому налаштуванні іноді виникають типові проблеми, пов'язані з мережевою конфігурацією або параметрами тунелю. Нижче наведено кілька поширених ситуацій та способи їх діагностики.

 

 

Клієнт підключається, але немає інтернету

Одна з найчастіших проблем - клієнт успішно підключається до VPN, але не має доступу до інтернету. Зазвичай це пов'язано з відсутністю або неправильним налаштуванням NAT на сервері.

У такому випадку варто перевірити, чи застосовані правила трансляції адрес:

iptables -t nat -L

Якщо правила MASQUERADE відсутні, це означає, що трафік клієнтів не перенаправляється через мережевий інтерфейс сервера. Також варто переконатися, що в системі увімкнено IP-маршрутизацію (net.ipv4.ip_forward=1).

 

 

Сервер не відповідає

Якщо клієнт не може встановити з'єднання з сервером, спочатку варто перевірити, чи запущений інтерфейс WireGuard:

sudo wg show

 

Ця команда показує активні інтерфейси, використовувані ключі та список підключених клієнтів.

Якщо інтерфейс запущений, наступним кроком варто переконатися, що сервер дійсно слухає потрібний порт. Перевірити це можна командою:

sudo ss -ulnp | grep 51820

 

Якщо порт не відображається у списку, значить WireGuard не запущений або конфігурація була застосована з помилкою. Також варто перевірити правила firewall і переконатися, що UDP-порт 51820 відкритий.

 

 

WireGuard не запускається

Іноді інтерфейс не запускається через помилки в конфігураційному файлі. Найчастіше це пов'язано з неправильно вказаним ключем, помилкою в IP-адресі або синтаксисі конфігурації.

Для діагностики можна вручну запустити інтерфейс:

sudo wg-quick up wg0

 

Якщо в конфігурації є помилка, система виведе повідомлення з описом проблеми. Після виправлення файлу wg0.conf інтерфейс можна запустити повторно.

 

У більшості випадків подібні проблеми вирішуються перевіркою конфігурації, правил брандмауера та параметрів маршрутизації.

 

 

 

 

FAQ

 

Чи можна використовувати WireGuard замість OpenVPN

У багатьох випадках - так. WireGuard простіший у налаштуванні та зазвичай забезпечує вищу продуктивність. Однак OpenVPN іноді використовують в інфраструктурах, де потрібна складна система автентифікації.

 

Скільки клієнтів може обслуговувати VPS

Навіть невеликий VPS здатний обслуговувати десятки підключень. Обмеження частіше пов'язане з пропускною здатністю мережі.

 

Чи можна з'єднати кілька серверів через WireGuard

Так. WireGuard часто використовують для site-to-site VPN та mesh-мереж між серверами.

 

Наскільки безпечний WireGuard

WireGuard використовує сучасні криптографічні алгоритми та має компактну кодову базу, що спрощує аудит безпеки.

 

Чи можна використовувати WireGuard на смартфоні

Так. Офіційні додатки доступні для Android та iOS, і налаштування зазвичай займає кілька хвилин.

 

Чи потрібно встановлювати WireGuard на сервер і клієнт

Так. VPN працює тільки тоді, коли WireGuard встановлено на обох сторонах з'єднання.

 

Чи можна використовувати кілька клієнтів одночасно

Так. Для кожного клієнта створюється окремий запис Peer та унікальна IP-адреса всередині VPN-мережі.

 

Чи працює WireGuard у Docker

Так. Існують готові контейнери та образи для запуску WireGuard у середовищі Docker.

 

Чи можна обмежити доступ до сервера лише через VPN

Так. Часто SSH та адміністративні панелі відкриваються лише всередині VPN-мережі, повністю закриваючи їх для публічного Інтернету.

 

 

 

 

Висновок

WireGuard - це сучасний VPN-протокол, який поєднує високу продуктивність, просту конфігурацію та надійну криптографію. Завдяки мінімалістичній архітектурі він легко розгортається навіть на невеликому VPS і не вимагає складної інфраструктури сертифікатів або тривалого налаштування.

Власний VPN-сервер на базі WireGuard дозволяє безпечно підключатися до серверної інфраструктури, захищати адміністративний доступ і об'єднувати різні сервіси в приватну мережу. Такий підхід особливо зручний для розробників, системних адміністраторів і невеликих команд, яким важливо контролювати доступ до внутрішніх систем.

Додатковою перевагою є гнучкість. WireGuard можна використовувати не тільки для віддаленого доступу до сервера, але й для з'єднання декількох серверів, організації приватних мереж між дата-центрами або безпечної роботи з публічних мереж.

У результаті ви отримуєте простий та ефективний інструмент для побудови захищеної мережевої інфраструктури. А завдяки простоті налаштування, в якій ви напевно переконалися, та високій швидкості роботи WireGuard залишається одним із найпрактичніших рішень для запуску власного VPN на VPS.

Як вибрати VPS для Telegram-бота
Як вибрати VPS для Telegram-бота

Як вибрати VPS для Telegram-бота: вимоги до CPU, RAM і диска, webhook або polling, безпека, моніторинг і масштабування без зайвих витрат.

14 хв