Перейти до змісту

WireGuard VPN

Вступ

WireGuard – це безкоштовна однорангова (P2P) віртуальна приватна мережа (VPN) з відкритим кодом. Це легка та безпечна сучасна альтернатива звичайним VPN з великими кодовими базами, які покладаються на з’єднання TCP. Оскільки WireGuard є P2P VPN, кожен комп’ютер, доданий до мережі WireGuard, спілкується безпосередньо один з одним. У цьому посібнику використовується hub-spoke модель, де одноранговому вузлу WireGuard призначено публічну IP-адресу як шлюз для пропускання всього трафіку. Це дозволяє трафіку WireGuard обходити Carrier Grade NAT (CGNAT) без увімкнення переадресації портів на маршрутизаторі. Для цього потрібна система Rocky Linux із публічною IP-адресою. Найпростіший спосіб досягти цього — розгорнути віртуальний приватний сервер (VPS) через хмарного постачальника за вашим вибором. На момент написання статті Google Cloud Platform пропонує безкоштовний рівень для своїх екземплярів e2-micro.

Передумови та припущення

Мінімальні вимоги до цієї процедури такі:

  • Можливість запускати команди від імені користувача root або використовувати sudo для підвищення привілеїв.
  • Система Rocky Linux із загальнодоступною IP-адресою

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

Встановіть додаткові пакети для Enterprise Linux (EPEL):

sudo dnf install epel-release -y

Оновіть пакети вашої системи:

sudo dnf upgrade -y

Встановити WireGuard:

sudo dnf install wireguard-tools -y

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

Створіть папку для зберігання конфігураційних файлів і ключів WireGuard:

sudo mkdir -p /etc/wireguard

Створіть файл конфігурації з назвою на ваш вибір, що закінчується розширенням .conf:

Примітка

Ви можете створити кілька тунелів WireGuard VPN на одній машині, кожен з яких використовує різні файли конфігурації, мережеву адресу та UDP-порт.
sudo touch /etc/wireguard/wg0.conf

Створіть нову пару закритого та відкритого ключів для сервера WireGuard:

wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub

Відредагуйте файл конфігурації за допомогою обраного вами редактора.

sudo vi /etc/wireguard/wg0.conf

Вставте наступне:

[Interface]
PrivateKey = server_privatekey
Address = x.x.x.x/24
ListenPort = 51820

Ви повинні замінити server_privatekey на закритий ключ, згенерований раніше. Ви можете переглянути закритий ключ за допомогою:

sudo cat /etc/wireguard/wg0

Далі вам потрібно буде замінити x.x.x.x/24 на мережеву адресу в межах діапазону приватних IP-адрес, визначеного [RFC 1918] (https://datatracker.ietf.org/doc/html/rfc1918). Наша демонстраційна приватна IP-адреса в цьому посібнику – 10.255.255.0/24.

Нарешті, ви можете вибрати будь-який порт UDP, щоб приймати з’єднання з WireGuard VPN. Тут наш демонстраційний порт UDP — 51820.

Увімкнути IP-переадресацію

IP-переадресація дозволяє маршрутизувати пакети між мережами. Це дозволяє внутрішнім пристроям спілкуватися один з одним через тунель WireGuard:

Увімкніть IP-переадресацію для IPv4 і IPv6:

sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv6.conf.all.forwarding=1

Налаштуйте firewalld

Встановіть firewalld:

sudo dnf install firewalld -y

Після встановлення firewalld увімкніть його:

sudo systemctl enable --now firewalld

Створіть постійне правило брандмауера, яке дозволяє трафік через UDP-порт 51820 у публічній зоні:

sudo firewall-cmd --permanent --zone=public --add-port=51820/udp

Далі трафік з інтерфейсу WireGuard буде дозволено іншим інтерфейсам у внутрішній зоні.

sudo firewall-cmd --permanent --add-interface=wg0 --zone=internal

Додайте правило брандмауера, щоб увімкнути маскування IP для внутрішнього трафіку. Це означає, що пакети, надіслані між одноранговими вузлами, замінять IP-адресу пакета на IP-адресу сервера:

sudo firewall-cmd --permanent --zone=internal --add-masquerade

Нарешті, перезавантажте firewalld:

sudo firewall-cmd --reload

Налаштуйте вузол WireGuard

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

Створіть папку для зберігання конфігураційних файлів і ключів WireGuard:

sudo mkdir -p /etc/wireguard

Створіть файл конфігурації, вказавши йому назву на свій вибір, яка закінчується розширенням .conf:

sudo touch /etc/wireguard/wg0.conf

Створіть нову пару закритого та відкритого ключів:

wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub

Відредагуйте файл конфігурації за допомогою обраного вами редактора, додавши цей вміст:

[Interface]
PrivateKey = peer_privatekey
Address = 10.255.255.2/24

[Peer]
PublicKey = server_publickey
AllowedIPs = 10.255.255.1/24
Endpoint = serverip:51820
PersistentKeepalive = 25

Замініть peer_privatekey на закритий ключ пір, який зберігається в /etc/wireguard/wg0 на пірі.

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

sudo cat /etc/wireguard/wg0

Замініть server_publickey на відкритий ключ сервера, який зберігається в /etc/wireguard/wg0.pub на сервері.

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

sudo cat /etc/wireguard/wg0.pub

Замініть serverip загальнодоступною IP-адресою сервера WireGuard.

Ви можете знайти публічну IP-адресу сервера за допомогою такої команди на сервері:

ip a | grep inet

Файл конфігурації вузла тепер містить правило PersistentKeepalive = 25. Це правило вказує одноранговому вузлу перевіряти сервер WireGuard кожні 25 секунд, щоб підтримувати з’єднання VPN-тунелю. Без цього параметра тунель VPN закінчуватиметься після бездіяльності.

Увімкніть WireGuard VPN

Щоб увімкнути WireGuard, ви запустите таку команду як на сервері, так і на одноранговому пристрої:

sudo systemctl enable wg-quick@wg0

Потім запустіть VPN, виконавши цю команду як на сервері, так і на одноранговому пристрої:

sudo systemctl start wg-quick@wg0

Додайте ключ клієнта до конфігурації сервера WireGuard

Виведіть відкритий ключ партнера та скопіюйте його:

sudo cat /etc/wireguard/wg0.pub

На сервері виконайте наступну команду, замінивши peer_publickey відкритим ключем однорангового вузла:

sudo wg set wg0 peer peer_publickey allowed-ips 10.255.255.2

Використання wg set вносить лише тимчасові зміни в інтерфейс WireGuard. Для постійних змін конфігурації ви можете вручну відредагувати файл конфігурації та додати вузла. Вам потрібно буде перезавантажити інтерфейс WireGuard після внесення будь-яких постійних змін конфігурації.

Відредагуйте файл конфігурації сервера за допомогою обраного редактора.

sudo vi /etc/wireguard/wg0.conf

Додайте вузол до файлу конфігурації. Вміст має виглядати приблизно так:

[Interface]
PrivateKey = +Eo5oVjt+d3XWvFWYcOChaLroGj5vapdXKH8UZ2T2Fc=
Address = 10.255.255.1/24
ListenPort = 51820

[Peer]
PublicKey = 1vSho8NvECkG1PVVk7avZWDmrd2VGZ2xTPaNe5+XKSg=
AllowedIps = 10.255.255.2/32

Відключити інтерфейс:

sudo wg-quick down wg0

Вивести інтерфейс:

sudo wg-quick up wg0

Перегляньте інтерфейси WireGuard і перевірте підключення

Ви можете переглядати інформацію WireGuard як на сервері, так і на одноранговому пристрої за допомогою:

sudo wg

Ви можете перевірити підключення, надіславши ping на сервер від однорангового пристрою:

ping 10.255.255.1

Висновок

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

Author: Joseph Brinkman

Contributors: Steven Spencer, Ganna Zhyrnova