Самостійно розміщений 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 в один клік. Решта посібника присвячена ручному налаштуванню, а цей розділ — швидкому шляху.
- Увійдіть до панелі керування Cloudzy.
- Виберіть WireGuard зі списку застосунків.
- Створіть VPS у потрібній локації з обраним тарифом. Достатньо машини з Ubuntu й базовими характеристиками.
Коли VPS буде готовий, увійдіть на нього й виконайте таку команду, щоб вивести конфігурацію:
cat client.conf
Ви побачите щось подібне:
Скористайтеся цією конфігурацією, щоб створити новий тунель у клієнті WireGuard на вашому ПК, і з'єднання готове. Якщо ж ви хочете розібратися в кожній деталі або вам потрібна схема, якої готовий образ не охоплює, переходьте до ручного налаштування нижче.
Як налаштувати WireGuard на Ubuntu
Команди нижче розраховані на актуальний випуск 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
Кожному пристрою потрібні власна пара ключів і власна 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 до домашньої мережі
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 на клієнті відповідає задуманій схемі повного чи роздільного тунелю.
Чи потрібен PersistentKeepalive кожному клієнту?
Ні. Додавайте його тоді, коли вузлу за NAT потрібно тримати зіставлення відкритим під час простою, що типово для телефонів, домашніх шлюзів і деяких обмежувальних мереж. Не вказуйте його, якщо вузол спілкується часто або йому не потрібно, щоб віддалена сторона досягала його в простої.