WireGuard – це сучасний VPN-протокол, який є безкоштовним open-source продуктом. На відміну від популярних і звичних для багатьох OpenVPN та IPSec, WireGuard забезпечує не лише надійний захист підключення завдяки використанню сучасної криптографії, а й має високу продуктивність, блискавичну швидкість підключення до VPN-сервера, а також значно перевершує інші VPN-протоколи за швидкістю передачі даних.
WireGuard чи OpenVPN?
Існують різні VPN-протоколи, серед яких найпопулярнішим є OpenVPN. Проте, незважаючи на безсумнівну надійність, він розроблявся понад 20 років тому, а використовувані методи шифрування – ще старіші. Візитною карткою WireGuard є його код: всього 4000 рядків, на відміну від OpenVPN, у якого їх налічується понад 600 000, в результаті чого він має значно більшу поверхню атаки (чим більше коду, тим більше потенційних вразливостей).
Протоколи шифрування WireGuard
WireGuard використовує набір сучасних криптографічних протоколів для шифрування даних, серед яких:
- ChaCha20 для симетричного шифрування, також використовується в AEAD структурі RFC7539;
- Poly1305 для аутентифікації, також застосовується в AEAD структурі RFC7539;
- Curve25519 — еліптична крива для протоколу безпечного обміну ключами Diffie-Hellman;
- Blake2 — згідно з RFC7693 для відповідної хеш-функції;
- SipHash2-4 — псевдовипадкова функція для пошуку розшифрованих відкритих ключів ініціатора сесії.
Загальна довжина ключа безпеки у WireGuard становить 256 біт і не може бути змінена, тоді як довжина ключа в OpenVPN може сягати 4096 біт, оскільки OpenVPN підтримує численні криптографічні алгоритми завдяки використанню бібліотеки OpenSSL, а методи шифрування задаються користувачем, що робить його більш гнучким порівняно з WireGuard. Проте для більшості випадків 256 біт є більш ніж достатнім.
Головним недоліком WireGuard є конфіденційність, а саме зберігання IP-адрес клієнтів до перезавантаження сервера в лог-файлах у відкритому вигляді. Таким чином, отримавши доступ до сервера, можна дізнатись IP-адреси клієнтів.
Швидкість передачі даних
Головною перевагою WireGuard, на відміну від інших протоколів, зокрема OpenVPN, є швидкість. У якості протоколу передачі даних використовується UDP. Крім того, WireGuard споживає значно менше системних ресурсів сервера, ніж OpenVPN. Це досягається за рахунок:
- Більш короткого та оптимізованого коду порівняно з OpenVPN;
- Використання більш сучасних криптографічних протоколів;
Як видно з порівняння продуктивності різних VPN-протоколів, зокрема WireGuard проти OpenVPN, перший має не лише вищу швидкість завантаження, але й нижчий ping, що є важливим фактором.
В результаті цього, у якості VPN-сервера для WireGuard можна використовувати VPS з мінімальною конфігурацією – це ніяк не вплине на швидкість роботи.
Встановлення WireGuard на CentOS 8
Раніше ми вже розглядали встановлення та налаштування OpenVPN на CentOS 8. Встановлення WireGuard на CentOS 8 є досить простим у порівнянні з OpenVPN. Для цього нам знадобиться “чистий” VPS сервер з попередньо встановленою операційною системою. Авторизуємося через SSH. З міркувань безпеки, відразу налаштовуємо підключення до сервера за ключем безпеки та одразу переходимо до встановлення WireGuard.
Виконуємо оновлення пакетів yum та підключаємо репозиторій EPEL:
sudo yum update -y sudo yum install epel-release -y
Перезавантажуємо сервер командою reboot, після чого встановлюємо сам WireGuard:
sudo yum config-manager --set-enabled powertools -y sudo yum copr enable jdoss/wireguard -y sudo yum install wireguard-dkms wireguard-tools mawk grep net-tools qrencode -y
WireGuard встановлено. Тепер переходимо до наступного кроку – його налаштування та додавання користувачів VPN-сервера.
Налаштування WireGuard
Думаю, багато хто стикався з налаштуванням OpenVPN, а зокрема, зі створенням нових клієнтів: генерацією ключів, файлами конфігурацій, перенесенням їх з сервера на пристрої – процес не з легких, але у WireGuard все набагато простіше та швидше. Для цього скористаємося утилітою easy-wg-quick:
wget https://raw.githubusercontent.com/burghardt/easy-wg-quick/master/easy-wg-quick chmod +x easy-wg-quick ./easy-wg-quick
Ця утиліта виконає не лише налаштування WireGuard замість вас, але й створить першого користувача!
Якщо ви збираєтесь підключатися з мобільного пристрою (Android/iOS), встановіть додаток WireGuard та проскануйте QR-код – він містить усі налаштування. Для підключення з комп’ютера скопіюйте вміст файлу wgclient_10.conf:
sudo cat wgclient_10.conf
Встановіть клієнт WireGuard з офіційного сайту: https://www.wireguard.com/install/
У Windows процес створення підключення виглядає наступним чином:
У відкритому вікні введіть Назву підключення та вставте вміст файлу wgclient_10.conf у діалогове вікно:
Повертаємося до налаштування WireGuard. Під час виконання скрипту easy-wg-quick був згенерований файл конфігурації WireGuard сервера – wghub.conf. Ми повинні перенести його до директорії додатку:
sudo cp wghub.conf /etc/wireguard/wghub.conf
Тепер додаємо WireGuard до автозавантаження при старті CentOS та запускаємо додаток:
sudo systemctl enable wg-quick@wghub sudo systemctl start wg-quick@wghub
На цьому встановлення та налаштування WireGuard завершено. Попередньо зазначимо, що додавання нових клієнтів здійснюється командою:
./easy-wg-quick ім’я_клієнта
Для підключення можна використовувати QR-код або дані, зазначені у згенерованому файлі налаштувань. Якщо для першого користувача файл конфігурації називався wgclient_10.conf, то для другого – wgclient_11.conf і так далі.
Після додавання нових користувачів виконуємо команду:
cp wghub.conf /etc/wireguard/wghub.conf systemctl restart wg-quick@wghub
Налаштування firewalld для роботи VPN
Увімкнюємо підтримку маршрутизації трафіку між мережевими інтерфейсами. Для цього відкриваємо файл у редакторі:
vi /etc/sysctl.conf
І додаємо до нього наступний вміст:
## Turn on bbr ## net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr ## for IPv4 ## net.ipv4.ip_forward = 1 ## Turn on basic protection/security ## net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1
Застосовуємо налаштування, виконавши команду:
sysctl -p
Тепер відкриваємо файл конфігурації WireGuard:
sudo cat /etc/wireguard/wghub.conf
Нас цікавить значення параметра ListenPort. У нашому випадку це 47441. Ми повинні відкрити цей порт для UDP підключень. Для цього створюємо файл:
sudo vi /etc/firewalld/services/wireguard.xml
З наступним вмістом:
<?xml version="1.0" encoding="utf-8"?> <service> <short>wireguard</short> <description>WireGuard відкриває UDP порт 47441 для підключень клієнтів</description> <port protocol="udp" port="47441"/> </service>
Потім увімкнемо службу WireGuard у firewalld за допомогою команди firewall-cmd наступним чином:
sudo firewall-cmd --permanent --add-service=wireguard --zone=public
Налаштовуємо маскування, щоб увесь трафік, що входить і виходить з локального інтерфейсу, правильно маршрутизувався через нашу загальнодоступну IP-адресу:
sudo firewall-cmd --permanent --zone=public --add-masquerade
Перезавантажуємо firewalld:
sudo firewall-cmd --reload
Готово! На цьому встановлення WireGuard на CentOS 8 завершено.
Висновок
Після початку використання WireGuard відразу відчувається приріст швидкості з’єднання порівняно з іншими VPN-протоколами, особливо якщо мова йде про багатопотокові завдання, а також завантаження “важкого” контенту. Крім того, варто відзначити простоту налаштування клієнта як на ПК, так і на мобільних пристроях.
WireGuard дійсно є цікавим і сучасним VPN-протоколом. Можливо, через внутрішні міркування безпеки він поки що не може виступати повноцінною заміною OpenVPN для побудови корпоративних мереж, проте для приватного використання це оптимальне рішення, оскільки процес встановлення та додавання нових користувачів значно простіший і швидший, ніж в OpenVPN.