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