Як налаштувати власний VPN-сервер WireGuard з wg-easy
wg-easy — це Docker-застосунок, який запускає VPN-сервер WireGuard разом із вебпанеллю. У панелі можна створювати клієнтів, завантажувати їхні файли конфігурації або сканувати QR-код телефоном, а також бачити, які клієнти підключені. У цій інструкції показано, як встановити актуальну версію wg-easy v15 на Linux-сервер за допомогою Docker Compose і підключити перший пристрій.
wg-easy v15 відрізняється від старих версій. Пароль адміністратора більше не передається у змінній PASSWORD: контейнер із PASSWORD або PASSWORD_HASH не запуститься. Логін і пароль тепер задаються в браузері під час першого запуску.
Вимоги
Достатньо VPS із публічною IP-адресою та доступом root або sudo. wg-easy невибагливий: для особистого VPN вистачить 1 vCPU та 1 ГБ оперативної пам'яті. Команди в цій інструкції перевірено на Ubuntu 24.04 LTS. Оскільки wg-easy працює в Docker, вони так само підходять для Ubuntu 22.04, Debian 12, AlmaLinux 9 і Rocky Linux 9.
Якщо не хочете нічого встановлювати вручну, замовте VPS із уже розгорнутим wg-easy у маркетплейсі застосунків INTROSERV і одразу переходьте до першого запуску.
Встановіть Docker
Підключіться до сервера через SSH і встановіть Docker Engine із плагіном Compose за допомогою офіційного скрипту:
curl -fsSL https://get.docker.com | sudo sh
Перевірте, що Docker і Compose встановлено:
sudo docker --version sudo docker compose version
Завантажте файл docker-compose.yml
wg-easy встановлюється за допомогою офіційного файлу docker-compose.yml з репозиторію проєкту. Створіть для нього папку і завантажте файл:
sudo mkdir -p /etc/docker/containers/wg-easy sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml
Головні рядки файлу — це образ і порти:
image: ghcr.io/wg-easy/wg-easy:15 ports: - "51820:51820/udp" - "51821:51821/tcp"
Порт 51820/udp використовує сам WireGuard, а порт 51821/tcp — вебпанель. Тег 15 означає, що оновлення не виходять за межі версії 15. Конфігурація і клієнти зберігаються в томі Docker, тому залишаються після перестворення контейнера.
Запустіть wg-easy
Перейдіть до папки з файлом і запустіть контейнер:
cd /etc/docker/containers/wg-easy sudo docker compose up -d
Перевірте, що контейнер працює:
sudo docker compose ps
У стовпці STATUS має бути Up, а в стовпці PORTS — порти 51820/udp і 51821/tcp.
Відкрийте порт у файрволі
Клієнти підключаються до сервера через UDP-порт 51820. Якщо на сервері ввімкнено UFW, дозвольте цей порт:
sudo ufw allow 51820/udp
На AlmaLinux і Rocky Linux із firewalld виконайте:
sudo firewall-cmd --permanent --add-port=51820/udp sudo firewall-cmd --reload
Відкрийте вебпанель
wg-easy v15 не дозволяє входити в панель через звичайний HTTP. Найпростіший безпечний спосіб відкрити панель — SSH-тунель. На своєму комп'ютері виконайте:
ssh -L 51821:localhost:51821 USER@SERVER_IP
Не закривайте цю SSH-сесію і відкрийте в браузері http://localhost:51821.
Можна також дозволити доступ через звичайний HTTP: у docker-compose.yml розкоментуйте блок environment, задайте INSECURE=true і знову виконайте sudo docker compose up -d. У цьому разі пароль від панелі передається без шифрування, тому використовуйте цей варіант лише для перевірки. Для постійного доступу за доменним ім'ям розмістіть панель за зворотним проксі з HTTPS.
Пройдіть перший запуск
Під час першого запуску wg-easy відкриває майстер налаштування. Після вітального екрана створіть обліковий запис адміністратора: введіть ім'я користувача і пароль, потім підтвердьте пароль.

Коли майстер запитає, чи є у вас наявна конфігурація, виберіть No. Так буде створено нову конфігурацію.
На наступному екрані вкажіть Host і Port, за якими підключатимуться клієнти. У полі Host введіть публічну IP-адресу або доменне ім'я сервера, а не localhost, навіть якщо ви відкрили панель через SSH-тунель. У полі Port залиште 51820. Кнопка Suggest підставляє адресу, яку wg-easy визначає автоматично.

Адреса з поля Host потрапляє в конфігурацію кожного клієнта. Якщо вказати неправильну адресу, клієнти не зможуть підключитися.
Коли майстер завершиться, увійдіть зі створеними ім'ям користувача і паролем.
Створіть клієнта
На головній сторінці панелі натисніть New Client, введіть назву пристрою, наприклад laptop або phone, і підтвердьте. Клієнт з'явиться у списку. Поруч із ним є кнопки для показу QR-коду і завантаження файлу конфігурації.

Створюйте окремого клієнта для кожного пристрою. Тоді можна вимкнути або видалити доступ для одного пристрою, не зачіпаючи інші.
Підключіть пристрій
Встановіть на пристрій офіційний застосунок WireGuard. Він є для Windows, macOS, Android і iOS на офіційній сторінці завантаження WireGuard.
На телефоні відкрийте застосунок WireGuard, виберіть додавання тунелю за QR-кодом і відскануйте код із панелі.

На комп'ютері завантажте файл конфігурації клієнта в панелі та імпортуйте його в застосунок WireGuard через Import tunnel(s) from file. Потім натисніть Activate.
У Linux встановіть wireguard-tools і openresolv. Без openresolv команда wg-quick завершується помилкою на рядку DNS у файлі конфігурації. В Ubuntu і Debian:
sudo apt install wireguard-tools openresolv sudo wg-quick up ./CLIENT_NAME.conf
Щоб відключитися в Linux, виконайте sudo wg-quick down ./CLIENT_NAME.conf.
Перевірте підключення
Коли тунель активний, перевірте, яку IP-адресу бачить інтернет:
curl -4 ifconfig.me
Команда має повернути IP-адресу вашого сервера. Можна також відкрити в браузері будь-який сайт перевірки IP. У панелі wg-easy в підключеного клієнта видно нещодавню активність і трафік.
Керуйте клієнтами
Усіма клієнтами керують на головній сторінці панелі. Будь-якого клієнта можна тимчасово вимкнути перемикачем поруч із ним: пристрій залишається у списку, але не може підключитися, доки ви знову його не ввімкнете. Щоб повністю прибрати доступ, видаліть клієнта. Його файл конфігурації і QR-код одразу перестають працювати. Якщо пристрій втрачено або файл конфігурації могли скопіювати, видаліть цього клієнта і створіть нового.
Якщо щось не працює
Якщо панель не відкривається, перевірте, що контейнер працює, командою sudo docker compose ps, і подивіться журнал:
sudo docker logs wg-easy
Якщо панель відкривається, але увійти не вдається і з'являється повідомлення про небезпечне з'єднання, отже, ви відкрили її через звичайний HTTP. Використовуйте SSH-тунель із розділу вище.
Якщо клієнт не підключається, перевірте, що UDP-порт 51820 відкритий у файрволі сервера і у файрволі панелі провайдера, якщо він є. Також відкрийте файл конфігурації клієнта і перевірте рядок Endpoint: у ньому має бути публічна адреса сервера. Якщо там неправильна адреса, отже, у майстрі налаштування неправильно вказано Host.
Якщо тунель активний, але інтернету на пристрої немає, перевірте журнал сервера командою sudo docker logs wg-easy і переконайтеся, що контейнер запущено з офіційного docker-compose.yml без змін у розділі sysctls.
Якщо в Linux wg-quick завершується помилкою про resolvconf, встановіть openresolv, як описано в розділі про підключення пристрою.
Оновіть wg-easy
Щоб встановити новішу збірку версії 15, завантажте новий образ і перестворіть контейнер:
cd /etc/docker/containers/wg-easy sudo docker compose pull sudo docker compose up -d
Клієнти і налаштування зберігаються, тому що вони містяться в томі Docker.
Зупиніть і видаліть wg-easy
Щоб зупинити VPN-сервер, виконайте в папці з docker-compose.yml:
sudo docker compose down
Конфігурація залишається в томі, і sudo docker compose up -d знову запускає сервер із тими самими клієнтами.
Щоб видалити wg-easy повністю, разом з усіма клієнтами та ключами, додайте параметр -v:
sudo docker compose down -v
Після sudo docker compose down -v усі конфігурації клієнтів перестають працювати. Щоб знову користуватися VPN, доведеться заново пройти перший запуск і створити клієнтів.