WireGuard — сучасний VPN-протокол, у 2–5 разів швидший за OpenVPN. Вбудований у ядро Linux починаючи з версії 5.6. Налаштування займає 10 хвилин.
Встановлення WireGuard на сервері
sudo apt update
sudo apt install -y wireguard
# Увімкнути IP forwarding
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Генерація ключів сервера
cd /etc/wireguard
sudo wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
sudo chmod 600 server_private.key
Конфіг сервера /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat /etc/wireguard/server_private.key)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Клієнт 1
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
Запуск WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo wg show # Перевірити статус
Конфіг клієнта
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR-VPS-IP:51820
AllowedIPs = 0.0.0.0/0 # Весь трафік через VPN
QR-код для телефону
sudo apt install -y qrencode
qrencode -t ansiutf8 < /etc/wireguard/client.conf
curl -fsSL https://get.vpnsetup.net/wg | sudo bashsudo ufw allow 51820/udpВстановлення WireGuard
sudo apt update && sudo apt install -y wireguard
# Увімкнути IP forwarding
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Конфігурація сервера /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat server_private.key)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = $(cat client_public.key)
AllowedIPs = 10.0.0.2/32
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo ufw allow 51820/udp
Чому WireGuard кращий за OpenVPN
WireGuard працює в ядрі Linux, використовує сучасну криптографію (ChaCha20, Poly1305) і потребує мінімальної конфігурації. Швидкість у 2–4 рази вища за OpenVPN.
Конфігурація клієнта
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0 # Весь трафік через VPN
PersistentKeepalive = 25
Часті помилки під час налаштування WireGuard
Handshake did not complete after 5 seconds
RTNETLINK answers: Operation not permitted
read from tunnel: connection timed out
Interface wg0 is not activated: Address family not supported
| Повідомлення | Причина | Рішення |
|---|---|---|
| Handshake did not complete after 5 seconds | Порт 51820/UDP закритий файрволом сервера або провайдера, або публічні ключі сторін переплутані місцями | Перевірити sudo ufw allow 51820/udp і звірити, що PublicKey клієнта збігається з тим, що прописаний у [Peer] на сервері |
| RTNETLINK answers: Operation not permitted | Команду запущено без прав root, або інтерфейс wg0 вже піднятий з іншими параметрами | Виконувати команди через sudo, при конфлікті спочатку wg-quick down wg0, потім підняти заново |
| read from tunnel: connection timed out | Handshake пройшов, але трафік не йде — найчастіше забули увімкнути net.ipv4.ip_forward або не налаштовано MASQUERADE | Перевірити sysctl net.ipv4.ip_forward (має бути 1) і правила iptables -t nat -L POSTROUTING |
| Address family not supported | У конфігу вказана IPv6-адреса, а на сервері вимкнено підтримку IPv6 у ядрі | Використовувати лише IPv4-адресацію в Address/AllowedIPs або увімкнути IPv6 у системі |
WireGuard проти OpenVPN: практичне порівняння
| Параметр | WireGuard | OpenVPN |
|---|---|---|
| Розмір кодової бази | ~4000 рядків, вбудований у ядро Linux з версії 5.6 | ~100 000 рядків, працює в user space |
| Протокол | Лише UDP | UDP або TCP на вибір |
| Криптографія | Фіксований набір: ChaCha20, Poly1305, Curve25519 | Настроюваний набір шифрів, включно із застарілими для сумісності |
| Прохід через суворі файрволи, що блокують UDP | Гірше — немає fallback на TCP | Краще — можна працювати по TCP 443, маскуючись під HTTPS |
Коли WireGuard не підходить
- Мережа клієнта блокує вихідний UDP повністю (деякі корпоративні та мобільні мережі) — WireGuard не вміє працювати через TCP, тут допоможе лише OpenVPN на 443/tcp
- Потрібна детальна автентифікація користувачів логіном і паролем з інтеграцією в LDAP/RADIUS — WireGuard авторизує лише за публічним ключем, без вбудованої підтримки користувацьких облікових записів
- Потрібна офіційна підтримка на застарілих ОС без сучасного ядра — на старих системах потрібен userspace-бекенд, що ускладнює встановлення порівняно з OpenVPN
- Політика безпеки вимагає аудійованого набору алгоритмів шифрування з можливістю заміни — у WireGuard криптонабір зафіксований навмисно і не настроюється
Перевірка, що тунель справді працює
# На сервері: час останнього handshake має бути свіжим
sudo wg show wg0 latest-handshakes
# На клієнті: реальна зовнішня IP має змінитися на серверну
curl -s https://ifconfig.me
# Наскрізна перевірка затримки через тунель
ping -c 4 10.0.0.1
- Виконайте
wg showна сервері і переконайтеся, що у піра є свіжий latest handshake, а не «(none)» - З клієнта, підключеного через VPN, перевірте зовнішню IP через
curl ifconfig.me— вона має збігатися з IP сервера, а не з домашньою - Прожене
pingдо внутрішньої адреси сервера (10.0.0.1) — стабільні відповіді підтверджують, що трафік справді йде через тунель - Перевірте лічильники трафіку в
wg show wg0 transfer— якщо росте лише transmit, а receive нульовий, сервер не отримує зворотний трафік, і справа в NAT або маршрутизації
Базове налаштування файрвола перед підняттям VPN розглядає стаття UFW на VPS, а посилення захисту самого SSH-доступу до сервера — матеріал хардненінг SSH.
Часті питання
Яка різниця між VPS і VPN?
VPS — орендований віртуальний сервер, окрема обчислювальна машина з власною операційною системою, на якій можна встановити будь-яке ПЗ, зокрема VPN. VPN — технологія зашифрованого тунелю для передавання трафіку через такий сервер. Інакше кажучи, VPS — інфраструктура, а VPN — один із сервісів, який на ній розгортають, як описано у цьому посібнику.
Чому WireGuard зазвичай швидший за OpenVPN?
WireGuard працює прямо в ядрі Linux і використовує невеликий фіксований набір сучасних алгоритмів шифрування, тоді як OpenVPN працює в користувацькому просторі й підтримує широкий, налаштовуваний набір шифрів заради сумісності. Менший обсяг коду та робота на рівні ядра дають помітний приріст швидкості та меншу затримку порівняно з OpenVPN.
Що робити, якщо мережа клієнта повністю блокує вихідний UDP?
У такому разі WireGuard не допоможе — протокол не вміє працювати по TCP. Єдиний практичний вихід — використати OpenVPN, налаштований на порт 443 по TCP, який маскується під звичайний HTTPS-трафік і проходить крізь суворі корпоративні чи мобільні файрволи там, де UDP-трафік заблокований повністю.
Як перевірити, що VPN-тунель справді передає трафік, а не просто підключений?
Перевірки статусу з'єднання недостатньо — варто переконатися, що дані дійсно йдуть через тунель. Свіжий latest handshake на сервері, зміна зовнішньої IP-адреси на клієнті та зростання обох лічильників трафіку, прийом і передавання, підтверджують справжню роботу VPN. Якщо зростає лише вихідний трафік, а вхідний лишається нульовим, проблема в маршрутизації або NAT.