Перейти до основного вмісту
Знижка 50% усі плани, обмежений час. Від $2.48/mo
12 min left
Безпека та мережа

Як налаштувати WireGuard VPN на VPS

Pius Bodenmann Автор: Pius Bodenmann 12 хв читання Оновив: Mir 12d ago
WireGuard VPN tunnel active on an Ubuntu VPS terminal and a phone client

Самостійно розміщений WireGuard VPN дає вашому ноутбуку й телефону зашифрований шлях до сервера, який ви контролюєте. Це корисно, коли потрібна стабільна вихідна IP-адреса, безпечний доступ через ненадійний Wi-Fi або приватний маршрут до іншої мережі. Анонімності це не дає: сайти й далі бачать одну адресу VPS, а хостинг-провайдер і далі керує базовою мережею.

Цей посібник створює VPN із повним тунелем IPv4 на Ubuntu Server. Ви встановите WireGuard, згенеруєте ключі з обмеженими правами, увімкнете маршрутизацію, додасте правила брандмауера та NAT, підключите настільні й мобільні клієнти та перевірите тунель. Та сама схема підтримує й IPv6, але лише після того, як VPS отримає маршрутизований простір IPv6, а ви окремо налаштуєте пересилання та правила брандмауера для IPv6.

Що таке WireGuard?

WireGuard — це сучасний кросплатформний VPN-протокол і його реалізація, що передають зашифровані IP-пакети поверх UDP. Специфікація протоколу WireGuard Специфікація визначає фіксований набір криптографічних примітивів, зокрема ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 і HKDF. Така навмисно компактна схема спрощує налаштування та аудит порівняно з протоколами, де багато взаємозамінних наборів шифрів.

У WireGuard немає ні центральної системи облікових записів, ні вбудованого каталогу користувачів. Кожен пристрій — це вузол із власною парою ключів, адресою в тунелі та правилами AllowedIPs. На VPS один вузол зазвичай є шлюзом, повернутим до інтернету, а ноутбуки й телефони самі ініціюють підключення до нього.

Навіщо використовувати WireGuard на VPS?

  • Проста модель вузлів: Кожен пристрій отримує одну пару ключів і один запис вузла.
  • Мала поверхня атаки: WireGuard використовує компактний протокол і фіксований набір криптографії замість довгого переліку застарілих опцій.
  • Хороша продуктивність: Інтеграція в ядро Linux та ефективна криптографія здатні забезпечити високу пропускну здатність, хоча результат усе одно залежить від CPU, ємності мережі, затримки та розміру пакетів.
  • Кросплатформні клієнти: Офіційні клієнти доступні для Windows 10 і 11, macOS, Android та iOS, а Linux і кілька систем BSD пропонують нативні інструменти або пакети.
  • Роумінг: Вузол може змінювати мережі та вихідні IP-адреси, не отримуючи нової ідентичності WireGuard: сервер запам'ятовує останню автентифіковану кінцеву точку.
  • Зрозуміле керування маршрутизацією: AllowedIPs визначає і те, які призначення йдуть через тунель, і те, які тунельні адреси належать кожному вузлу.

Додаткове читання: посібник Cloudzy щодо VPS для VPN. Для старіших розгортань див. посібник Cloudzy з налаштування PPTP; не обирайте PPTP для нового VPN, де важлива безпека.

Пропустити ручне налаштування: WireGuard в один клік

Якщо у вас немає технічної підготовки або ви просто не хочете займатися встановленням самостійно, Cloudzy пропонує розгортання WireGuard VPN в один клік. Решта посібника присвячена ручному налаштуванню, а цей розділ — швидкому шляху.

  1. Увійдіть до панелі керування Cloudzy.
  2. Виберіть WireGuard зі списку застосунків.
  3. Створіть VPS у потрібній локації з обраним тарифом. Достатньо машини з Ubuntu й базовими характеристиками.

Коли VPS буде готовий, увійдіть на нього й виконайте таку команду, щоб вивести конфігурацію:

cat client.conf

Ви побачите щось подібне:

Terminal output of cat client.conf on a one-click WireGuard VPS, showing the Interface and Peer blocks with the keys and endpoint redacted

Скористайтеся цією конфігурацією, щоб створити новий тунель у клієнті WireGuard на вашому ПК, і з'єднання готове. Якщо ж ви хочете розібратися в кожній деталі або вам потрібна схема, якої готовий образ не охоплює, переходьте до ручного налаштування нижче.

Як налаштувати WireGuard на Ubuntu

Six-step WireGuard setup cycle around a VPS: install, generate keys, configure wg0 with 10.8.0.1/24, enable forwarding between wg0 and eth0, add firewall and NAT rules on UDP 51820, then start and verify the interface

Команди нижче розраховані на актуальний випуск Ubuntu Server. Виконуйте їх через SSH від користувача з правами sudo. Не закривайте SSH-сеанс, доки не переконаєтеся, що брандмауер налаштовано правильно, і спершу зробіть знімок VPS, якщо провайдер це підтримує.

Передумови

  • Один VPS з Ubuntu та публічною адресою IPv4
  • Обліковий запис без прав root, але з доступом sudo
  • Доступ через SSH і дані аварійної консолі провайдера VPS
  • Один клієнтський пристрій з офіційним застосунком WireGuard або консольними утилітами

Другий сервер з Ubuntu не потрібен. Клієнтом може бути ПК з Windows, Mac, ноутбук з Linux, телефон на Android або iPhone.

Крок 1. Встановлення WireGuard

sudo apt update
sudo apt install wireguard -y

Переконайтеся, що утиліти доступні:

wg --version

Крок 2. Безпечне створення ключів сервера

Створіть каталог WireGuard і згенеруйте пару ключів з обмежувальною umask. Приватний ключ не можна копіювати на клієнт або лишати в логах.

sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'

Виводьте ключі тоді, коли їх треба вставити у файли конфігурації:

sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub

Крок 3. Створення конфігурації сервера

Відкрийте конфігурацію інтерфейсу:

sudo nano /etc/wireguard/wg0.conf

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

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

Тунельна мережа 10.8.0.0/24 наведена лише для прикладу. Оберіть інший приватний діапазон, якщо він перетинається з домашньою, офісною чи хмарною мережею, до якої вам потрібен доступ. Не додавайте SaveConfig = true: цей параметр може перезаписати файл під час зупинки інтерфейсу та стерти ручні правки.

sudo chmod 600 /etc/wireguard/wg0.conf

Крок 4. Увімкнення пересилання IPv4

VPS має маршрутизувати пакети між wg0 і своїм публічним мережевим інтерфейсом. Помістіть цей параметр в окремий файл sysctl:

sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1

Застосуйте та перевірте:

sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward

Тут використано модель маршрутизації з посібника Ubuntu щодо шлюзу WireGuard. Для IPv6 потрібні маршрутизований префікс IPv6, окремі адреси в тунелі, пересилання IPv6 і правила брандмауера для IPv6; не спрямовуйте клієнтський трафік на ::/0, доки цей шлях не завершено.

Крок 5. Додавання правил брандмауера та NAT

З'ясуйте назву публічного інтерфейсу VPS. У виводі нижче зверніть увагу на значення після dev; поширені назви — eth0, ens3 та enp1s0.

ip route show default

Знову відкрийте wg0.conf і додайте наведені рядки в розділ [Interface]. Замініть eth0 всюди, якщо ваш публічний інтерфейс має іншу назву:

PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Якщо UFW активний, спершу дозвольте SSH, а вже потім змінюйте його стан і відкривайте UDP-порт WireGuard:

sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status

Якщо UFW зараз вимкнений і ви хочете його ввімкнути, спершу переконайтеся, що правило OpenSSH існує. Не вимикайте й не вмикайте UFW заново через SSH лише заради застосування цих правил: це створює зайвий ризик втратити доступ.

Крок 6. Запуск інтерфейсу WireGuard

sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show

Якщо служба не запускається, спершу виконайте journalctl і лише потім щось змінюйте:

sudo journalctl -u wg-quick@wg0 -n 50 --no-pager

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

A VPS at 10.8.0.1/32 holding separate peer entries for a laptop, tablet, and phone, each with its own keypair and /32 tunnel address, its private key staying on the device, and a QR code marked as containing a private key

Кожному пристрою потрібні власна пара ключів і власна IP-адреса в тунелі. Ніколи не використовуйте одну клієнтську конфігурацію на двох пристроях: однакові ключі та адреси роблять маршрутизацію непередбачуваною й заважають акуратно відкликати доступ.

Крок 1. Створення ключів клієнта

Офіційні застосунки для комп'ютера й телефона можуть згенерувати ключі під час створення порожнього тунелю. На клієнті з Linux скористайтеся:

umask 077
wg genkey | tee client.key | wg pubkey > client.pub

Тримайте client.key на цьому пристрої. На сервер копіюйте лише client.pub.

Крок 2. Додавання вузла на сервері

sudo nano /etc/wireguard/wg0.conf

Додайте один блок вузла. Замініть CLIENT_PUBLIC_KEY публічним ключем клієнта:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Рядок Address = 10.8.0.2/32 задає адресу в тунелі на боці клієнта. У блоці [Peer] на сервері параметр AllowedIPs = 10.8.0.2/32 пов'язує цю адресу з цим вузлом для маршрутизації та перевірки джерела. Для наступного пристрою візьміть 10.8.0.3/32 і продовжуйте за зростанням без повторів.

sudo systemctl restart wg-quick@wg0

Крок 3. Створення конфігурації клієнта

Створіть на клієнті файл client.conf і замініть усі заповнювачі:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = VPS_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 перетворює це на повний тунель IPv4. Щоб мати доступ лише до мережі VPN, використайте AllowedIPs = 10.8.0.0/24. Параметр PersistentKeepalive корисний клієнту за NAT, чиє зіставлення має лишатися доступним у простої; короткий посібник WireGuard зазначає, що більшості вузлів він не потрібен.

Крок 4. Імпорт конфігурації

Використовуйте посібник зі встановлення клієнтів WireGuard , щоб отримати підтримуваний клієнт для вашої платформи.

  • Windows: Виберіть Add Tunnel, потім імпортуйте client.conf.
  • macOS: Виберіть Import tunnel(s) from file і вкажіть client.conf.
  • Android або iOS: Імпортуйте файл або відскануйте згенерований з нього QR-код.

На клієнті з Ubuntu чи Debian, де лежить client.conf, установіть qrencode і виведіть файл у терміналі цього клієнта:

sudo apt install qrencode -y
qrencode -t ansiutf8 < client.conf

QR-код містить приватний ключ клієнта. Показуйте його лише в довіреному терміналі, не зберігайте знімки екрана й очистіть термінал після того, як телефон його імпортує.

Крок 5. Перевірка тунелю

Активуйте тунель, згенеруйте трафік із клієнта й виконайте ці перевірки на VPS:

sudo wg show
ip -brief address show wg0

Свіже рукостискання та зростаючі лічильники передавання підтверджують, що WireGuard обмінюється пакетами. Далі перевірте вихід через повний тунель із боку клієнта:

curl -4 https://api.ipify.org; echo

Команда має повернути публічну адресу IPv4 вашого VPS. Якщо рукостискання немає, перевірте адресу кінцевої точки, UDP-порт, хмарний брандмауер, правило UFW та ключі. Якщо рукостискання є, але інтернет не працює, перевірте пересилання IP, назву публічного інтерфейсу, правила NAT і DNS.

Чи можна поставити WireGuard за Nginx?

Віддалений документація модуля stream у NGINX пояснює, як NGINX може ретранслювати UDP з одного порту на інший, тобто спрямовувати UDP/80 чи UDP/443 до WireGuard на UDP/51820. Але це UDP-ретранслятор, а не зворотний проксі HTTP. Він не перетворює WireGuard на TCP чи HTTPS і не робить протокол схожим на звичайний вебтрафік.

У більшості розгортань простіше змінити ListenPort у WireGuard і відкрити відповідний UDP-порт, ніж додавати NGINX. Якщо мережа повністю блокує UDP або застосовує глибоку інспекцію пакетів, UDP-ретранслятор на NGINX проблему не вирішить. Документація про обмеження WireGuard Документація про обмеження WireGuard прямо зазначає, що обфускація виходить за межі протоколу.

Підключення VPS до домашньої мережі

A VPS hub relaying a roaming laptop and phone to a home gateway over WireGuard, with full-tunnel 0.0.0.0/0 and split-tunnel 192.168.1.0/24 paths, PersistentKeepalive on the home peer, and a warning that two overlapping 192.168.1.0/24 networks cannot route cleanly

VPS може бути вузлом-концентратором між мобільним клієнтом і пристроєм у вас удома. Домашній вузол сам ініціює вихідне з'єднання WireGuard до VPS, тож публічна IP-адреса вдома не потрібна. Якщо цей домашній вузол за NAT, задайте йому PersistentKeepalive.

Щоб дістатися до всієї домашньої локальної мережі, самого лише додавання вузла замало. У записі вузла на VPS, що відповідає домашньому шлюзу, у полі AllowedIPs має бути домашня підмережа, наприклад 192.168.1.0/24. Віддалений клієнт із повним тунелем (AllowedIPs = 0.0.0.0/0) і так надсилає цей трафік через VPS; додавайте 192.168.1.0/24 на клієнт лише за роздільного тунелювання. Домашній шлюз теж має пересилати трафік між WireGuard і локальною мережею. Додайте або маршрут на домашньому роутері, або ретельно обмежене правило NAT на домашньому шлюзі. Спершу перевірте перетини: клієнт, підключений до іншої мережі 192.168.1.0/24, не зможе коректно маршрутизувати обидві мережі без перенумерації чи складнішої політики маршрутизації.

Самостійно розміщений WireGuard проти комерційного VPN

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

Сам WireGuard невибагливий, і невеликого VPS часто вистачає для однієї людини та кількох пристроїв. Не сприймайте конкретні цифри RAM чи vCPU як гарантію пропускної здатності. Протестуйте з реальною кількістю пристроїв, своїм регіоном, розміром пакетів і очікуваною смугою, а потім змініть розмір сервера, якщо обмеженням стане завантаження CPU, втрата пакетів або затримка.

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

Критерій виборуСамостійно розміщений WireGuardКомерційний VPN
Модель вартостіОдин сервер плюс ваш час на адмініструванняПідписка, часто зі знижкою на довший термін
Локації виходуОдна локація на серверБагато локацій просто в застосунку
НалаштуванняВи самі налаштовуєте ключі, маршрутизацію, правила брандмауера й клієнтівВстановити застосунок і увійти
ОбслуговуванняВи самі оновлюєте, стежите, робите резервні копії та усуваєте несправностіСервісом опікується провайдер
Модель приватностіСервер контролюєте ви, але хостинг-провайдер усе одно бачить метаданіВи покладаєтеся на правила провайдера й незалежні аудити, які він оприлюднює
Найкраще підходитьСтабільна власна вихідна IP-адреса, віддалений доступ і контроль над інфраструктуроюПеремикання локацій, мінімум обслуговування та широка підтримка пристроїв

Висновок

Надійне розгортання WireGuard зводиться до п'яти речей: захищені приватні ключі, унікальні адреси вузлів, правильні AllowedIPs, робоче пересилання та NAT, а також правило брандмауера для UDP-порту, який слухає служба. Перш ніж покладатися на тунель, перевірте і рукостискання, і публічну вихідну адресу, а після розгортання регулярно оновлюйте VPS.

Якщо ви хочете зібрати сервер вручну, почніть із чистого рішеннями Cloudzy Ubuntu VPS. Якщо ж ви волієте пропустити встановлення, скористайтеся розгортанням WireGuard в один клік від Cloudzy і одразу переходьте до налаштування клієнтів та перевірки.

Часті запитання

Чому WireGuard показує вузол, але рукостискання немає?

Запис вузла доводить лише те, що конфігурацію було завантажено. Відсутність рукостискання зазвичай означає, що клієнт не досягає сервера або ключі не збігаються. Перевірте Endpoint на клієнті, публічну IP-адресу сервера, порт UDP/51820 і в брандмауері провайдера, і в UFW, а також публічні ключі з обох боків. Перед перевіркою згенеруйте трафік із клієнта, адже в простої WireGuard мовчить.

Чому тунель підключається, а інтернет зникає?

Рукостискання без доступу до інтернету зазвичай вказує на маршрутизацію, а не на шифрування. Перевірте net.ipv4.ip_forward, звірте назву публічного інтерфейсу в правилі NAT, перегляньте правила FORWARD і протестуйте DNS окремо від з'єднання за чистою IP-адресою. Також переконайтеся, що AllowedIPs на клієнті відповідає задуманій схемі повного чи роздільного тунелю.

Чи можуть два пристрої користуватися однією конфігурацією WireGuard?

Ні. Дайте кожному пристрою власний приватний ключ, публічний ключ і адресу /32 в тунелі. Повторне використання однієї конфігурації спричиняє конфлікти кінцевих точок і маршрутів, а також не дає відкликати доступ у загубленого пристрою, не відключивши інший.

Чи потрібен PersistentKeepalive кожному клієнту?

Ні. Додавайте його тоді, коли вузлу за NAT потрібно тримати зіставлення відкритим під час простою, що типово для телефонів, домашніх шлюзів і деяких обмежувальних мереж. Не вказуйте його, якщо вузол спілкується часто або йому не потрібно, щоб віддалена сторона досягала його в простої.

Поділитися

Більше з блогу

Продовжуйте читати.

Готові розгортати? Від $2,48/міс.

Незалежна хмара з 2008 року. AMD EPYC, NVMe, 40 Gbps. Повернення коштів за 14 днів.