8.2.10 Встановлення та налаштування WireGuard VPN

The Host Banner WireGuard

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

Вимоги до сервера

Встановлення WireGuard

Оновлюємо систему:

sudo apt update && sudo apt upgrade -y

system update

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

sudo apt install wireguard -y

install wireguard

WireGuard вбудований у ядро Linux з версії 5.6, тому не потребує встановлення DKMS або оновлення ядра.

Створення ключів

WireGuard використовує пару ключів: приватний та публічний. Згенеруємо їх на сервері:

wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

Встановлюємо права доступу:

chmod 600 /etc/wireguard/server_private.key

Публічний ключ буде використовуватись у конфігурації клієнта.

Налаштування WireGuard на сервері

Визначаємо назву мережевого інтерфейсу:

ip a

Створюємо конфігураційний файл /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf

Приклад вмісту (заміни <interface> на назву інтерфейсу, а <private server key> на приватний ключ):

/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
PrivateKey = <private server key>
ListenPort = 51820
SaveConfig = true

# Дозвіл трафіку через сервер
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <interface> -j MASQUERADE 
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <interface> -j MASQUERADE

Увімкнення IP-переадресації:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

retronstlation

Запускаємо WireGuard:

sudo systemctl start wg-quick@wg0.service
sudo systemctl enable wg-quick@wg0.service

Налаштування firewall

ufw

sudo ufw allow 51820/udp
sudo ufw enable

iptables

iptables -I INPUT -p udp -m udp --dport 51820 -j ACCEPT

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

Для кожного клієнта генеруємо окремі ключі та IP-адресу (на клієнті):

wg genkey | tee client1_private.key | wg pubkey > client1_public.key

Додаємо клієнта на сервер (використовуючи client1_public.key):

sudo wg set wg0 peer <client1_public_key> allowed-ips 10.0.0.2/32

Приклад конфігурації клієнта

Збережіть цей файл як client.conf і використовуйте у WireGuard-клієнті:

client.conf
[Interface]
PrivateKey = <client1_private_key>
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
Endpoint = <IP_сервера>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

WireGuard у WSL2

Особливості роботи в WSL2:

  • Не можна використовувати AllowedIPs = 0.0.0.0/0 — це призведе до втрати з’єднання.
  • Використовуйте AllowedIPs = 10.0.0.0/24 — лише доступ до VPN-сегменту.
  • Весь інтернет-трафік все одно йтиме через Windows, а не VPN.

Рекомендація: Для повноцінного VPN використовуйте офіційний WireGuard для Windows.

Перевірка роботи

Команди для перевірки:

sudo wg
ping 10.0.0.1
curl ifconfig.me

wg show

Очікувані результати:

  • sudo wg — відображає активне з’єднання;
  • ping — отримує відповідь від 10.0.0.1;
  • curl — виводить публічну IP-адресу сервера (якщо трафік йде через VPN).