Як налаштувати сервер WireGuard VPN і клієнт на Ubuntu 20.04

Налаштуйте локальну VPN за допомогою Wireguard

А VPN (віртуальна приватна мережа) дозволяє користувачеві віддалено підключатися до приватної мережі, як якщо б комп’ютер користувача був безпосередньо підключений до приватної мережі. Спочатку ця технологія була розроблена для того, щоб забезпечити віддалений доступ до внутрішньої приватної мережі компанії для співробітників, які насправді не перебувають у місці розташування внутрішньої мережі.

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

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

За ці роки було розроблено багато протоколів VPN. Ці протоколи використовують різні протоколи тунелювання та алгоритми шифрування для зв’язку між сервером і клієнтом.

Одним з таких протоколів, який останнім часом набуває широкого поширення, є Wireguard. Wireguard легший, простіший і продуктивніший, ніж добре відомі традиційно використовувані протоколи VPN, такі як OpenVPN, IPSec. Він уже реалізований для Windows, Mac OS і великої кількості дистрибутивів Linux. У Linux він реалізований як модуль ядра. Він доступний в офіційних сховищах Ubuntu 20.04.

У цій статті ми побачимо, як налаштувати сервер і клієнт Wireguard VPN в Ubuntu 20.04.

Установка

Для цієї статті я налаштовую сервер Wireguard на Ubuntu 20.04 Linode і Wireguard Client на моїй локальній машині з Ubuntu 20.04.

Пакунок дротовий захист встановлює як сервер Wireguard, так і клієнт. Виконайте таку команду як на серверній, так і на клієнтській машині.

sudo apt встановити wireguard

Конфігурація сервера

Ключі безпеки

Нам потрібно створити набір пар відкритих/приватних ключів для автентифікації та захисту з’єднання Wireguard. Це можна зробити за допомогою наступних команд:

sudo su cd /etc/wireguard umask 077 wg genkey | трійник private_key | wg pubkey > відкритий_ключ

Зауважте, що всі завдання з налаштування ми виконуємо як суперкористувач. Причина в тому, що доступ до каталогу /etc/wireguard заборонено для звичайних користувачів, і доступ до каталогу не може бути отриманий лише з привілеями sudo для звичайного користувача.

Далі ми встановлюємо маску створення файлу 077. Це означає, що щоразу, коли будь-який процес створює новий файл у цій папці, його дозволи автоматично маскуються під 077. Наприклад. якщо файл створений у цій папці з дозволами 777, він автоматично маскується, і дозволи фактично стають 700. Це робиться для того, щоб лише власник файлу мав усі дозволи на файл, а всі інші не мали дозволів.

На наступному рядку, ми генеруємо пару відкритих/приватних ключів для сервера. Вони зберігаються у файлах приватний_ключ і відкритий_ключ. Щоб переглянути ключі, виконайте:

cat private_key cat public_key

Скопіюйте приватний ключ, він нам знадобиться на наступному кроці.

Примітка: Ніколи не публікуйте свій закритий ключ публічно!

Файл конфігурації

Давайте створимо файл конфігурації для сервера Wireguard. Ви можете вибрати будь-яку назву для файлу. Ми створимо файл wg0.conf у цьому прикладі.

vim wg0.conf

Додайте наступне до файлу.

[Інтерфейс] Адреса = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A ПОСТРАУТ -о -j МАСКАРАД; ip6tables -A ВПЕРЕД -i wg0 -j ПРИЙНЯТИ; ip6tables -t nat -A ПОСТРАУТУВАННЯ -o eth0 -j MASQUERADE PostDown = iptables -D ВПЕРЕД -i wg0 -j ПРИЙНЯТИ; iptables -t nat -D ПОСТРАУТ -o eth0 -j МАСКАРАД; ip6tables -D ВПЕРЕД -i wg0 -j ПРИЙНЯТИ; ip6tables -t nat -D ПОСТРАУТ -o -j МАСКАРАД 

Вставте закритий ключ, який ми раніше скопіювали в рядок 5 у коді вище.

Нам потрібно налаштувати Wireguard в іншій (віртуальній) підмережі ніж IP-адреса сервера. Тут я використовував 10.20.43.1 для сервера і буду використовувати 10.20.43.2 для клієнта. Тут можна використовувати будь-яку підмережу. Щоб отримати IP-адресу сервера та інтерфейс, виконайте:

ifconfig

Зверніть увагу на IP-адресу сервера. Це потрібно під час налаштування клієнта.

Інтерфейс, який використовує сервер, як показано на зображенні вище, є eth0. Назва інтерфейсу може відрізнятися залежно від мережі користувача wlan0 або wlp2s0 якщо користувач підключений до мережі WiFi за допомогою бездротової карти.

Замініть в Запостити і PostDown з вашим інтерфейсом; у цьому прикладі це так eth0.Запостити і PostDown директиви використовуються, щоб вказати, які команди слід виконувати при запуску та зупинці сервера відповідно. У нашому прикладі ми використовуємо iptables команду, щоб встановити правила IP таким чином, щоб IP-адреса сервера була спільною для клієнтів. Після зупинки сервера правила зникнуть.

Збережіть та вийдіть із файлу. Під час використання vim натисніть вихід, потім введіть :wq і натисніть Введіть щоб зберегти та вийти.

Якщо ви використовуєте a ufw брандмауер на сервері, нам потрібно дозволити підключення UDP до порту для сервера VPN, 51190.

ufw дозволити 51190/udp

Запуск служби

Тепер, коли конфігурація завершена, ми можемо запустити службу Wireguard VPN.

Для того, щоб службу для запуску під час завантаження, запустіть:

systemctl увімкнути wg-quick@wg0

Зверніть увагу, що тут wg0 це ім'я конфігураційного файлу.

Починати службу, запустіть:

service wg-quick@wg0 start

Перевірити що служба успішно запущена:

статус служби wg-quick@wg0

Переконайтеся, що інтерфейс ми створили у файлі конфігурації запущено, використовуючи команду IP.

ip шоу wg0

Тепер сервер Wireguard VPN налаштовано та працює. Давайте зараз налаштуємо клієнта.

Конфігурація клієнта

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

Ключі безпеки

Щоб створити відкритий/приватний ключ пару для клієнта, запустіть:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key

Відкритий і закритий ключі для клієнта тепер генеруються відповідно у файлах закритий_ключ клієнта і відкритий_ключ клієнта.

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

cat client_private_key cat client_public_key

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

Файл конфігурації

Створіть файл конфігурації з будь-яким ім'ям. Ми створимо його з назвою wg0-клієнт для цього прикладу.

vim wg0-client.conf

Додайте наступну конфігурацію.

[Інтерфейс] # IP-адреса та приватний ключ адреси клієнта = 10.20.43.2/24 PrivateKey = [Peer] # Відкритий ключ, IP-адреса та порт сервера PublicKey = Кінцева точка = :51190 Дозволені IP-адреси = 0.0.0.0/0, : :/0

Введіть адресу підмережі для клієнта. Як описано раніше, ми використовуємо 10.20.43.2 для клієнта в цьому прикладі.

Додайте закритий ключ клієнта згенерований на попередньому кроці в рядку 4 у коді конфігурації вище.

У розділі «Peer» ми додаємо інформацію про сервер Wireguard VPN ми хочемо підключитися.

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

Дозволені IP-адреси слід вводити як задані (0.0.0.0/0), щоб будь-який запит на динамічну загальнодоступну IP-адресу, яку використовує клієнт, завжди пересилав на сервер VPN.

Збережіть та вийдіть із файлу. Під час використання vim натисніть вихід, потім введіть :wq і натисніть Введіть щоб зберегти та вийти.

Увімкніть службу клієнта запускати з кожним завантаженням і запускати його.

systemctl увімкнути службу wg-quick@wg-client wg-quick@wg-client start

Перевірити якщо послуга запущена.

статус служби wg-quick@wg-client

Додавання однорангового сервера

Тепер ми запустили VPN-сервер і клієнт. Однак безпечний тунель між ними не буде встановлений, якщо ми не встановимо однорангове з’єднання між сервером і клієнтом.

Повертайся на сервер. Перший, зупинити службу VPN.

служба wg-quick@wg0 стоп

Далі відкрийте файл конфігурації в додати конфігурацію для однорангового вузла (клієнт).

vim /etc/wireguard/wg0.conf

Додати наступні рядки до файлу.

[Peer] PublicKey = дозволені IP-адреси = 10.20.43.2/32

тепер, знову запустіть службу VPN.

service wg-quick@wg0 start

Це воно! Це вся конфігурація, необхідна для налаштування клієнта та сервера Wireguard VPN. Тепер перевіримо нашу VPN.

Тестування VPN

Спочатку виконаємо простий ping від клієнта до сервера, щоб переконатися, що зв’язок з тунелем VPN працює. Виконайте наступне на клієнті:

ping 10.20.43.1

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

wget 

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

Для цього нам просто потрібно перевірити IP-адресу клієнта, яку бачить Інтернет. Один із способів зробити це – зайти на сайт whatsmyip.org. Або з командного рядка ми можемо запитати інший подібний сервіс під назвою IP info, використовуючи Curl.

Виконайте наступне на клієнтській машині

curl //ipinfo.io/ip

Так. Це публічна IP-адреса Linode, де розміщено сервер VPN. Таким чином анонімність досягається за допомогою VPN, оскільки в усьому Інтернеті тепер видно IP-адресу VPN-сервера, а не вашого комп’ютера.

Висновок

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

Тим не менш, Wireguard є відмінним вибором, якщо вам потрібна автономна VPN для безпечного спілкування через Інтернет. Щоб дізнатися більше про Wireguard та протоколи та технології, які він використовує, ви можете відвідати офіційний сайт.

Категорія: Linux