wg-easy: разворачиваем WireGuard с веб-интерфейсом за 10 минут
Установка WireGuard через wg-easy: пошаговая настройка VPN-сервера с понятным веб-интерфейсом. Docker, проброс портов и подключение клиентов за 10 минут.
Содержание
WireGuard — один из самых быстрых и безопасных VPN-протоколов, но его стандартная настройка требует редактирования конфигурационных файлов, генерации ключей и ручного управления маршрутами. Для тех, кто хочет быстро поднять собственный VPN-сервер и управлять им через простой браузер, существует wg-easy — удобная обёртка с веб-интерфейсом. В этой статье мы разберём, как развернуть wg-easy за 10 минут, настроить клиентов и избежать типичных ошибок.
Что такое wg-easy и зачем он нужен?
wg-easy — это проект с открытым исходным кодом, который предоставляет готовый Docker-контейнер с WireGuard и веб-панелью для управления. Он не является официальным продуктом WireGuard, но значительно упрощает жизнь администраторам: вам не нужно вручную прописывать конфиги, достаточно запустить контейнер, перейти в веб-интерфейс, создать пару кликов сгенерировать QR-код для подключения. Панель показывает всех клиентов, их трафик и позволяет легко отключать доступ.
Основные возможности wg-easy:
- Создание и удаление клиентов через графический интерфейс.
- Генерация QR-кодов для мобильных устройств.
- Просмотр статистики по каждому клиенту.
- Настройка портов, DNS-серверов и адресов через переменные окружения.
Благодаря этому wg-easy идеально подходит для небольших организаций, домашних VPN или личного использования, когда нужно быстро настроить защищённый доступ к сетевым ресурсам.
Требования к серверу и подготовка
Для запуска wg-easy подойдёт практически любой Linux-сервер или VPS с поддержкой Docker. Минимальные требования скромные: 1 ядро CPU, 512 МБ RAM и 5 ГБ диска. Убедитесь, что сервер имеет белый (публичный) IP-адрес, так как именно на него будут подключаться клиенты. Если сервер находится за NAT, потребуется проброс портов (UDP 51820 и TCP 51821 для веб-интерфейса).
Перед установкой проверьте, что Docker установлен и корректно работает. Для этого выполните команду:
docker --version && docker compose version
Если Docker не установлен, воспользуйтесь официальной инструкцией на сайте Docker для вашей операционной системы. Также убедитесь, что модуль WireGuard загружен в ядро (современные ядра Linux включают его по умолчанию).
Установка wg-easy через Docker
Есть два способа установки: через Docker CLI или Docker Compose. Мы рассмотрим оба, но рекомендуем использовать Compose — так проще отслеживать изменения.
Способ 1: Docker CLI
Выполните следующую команду (замените vpn.example.com на ваш реальный IP или домен):
docker run -d \
--name wg-easy \
--cap-add NET_ADMIN \
--sysctl net.ipv4.ip_forward=1 \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-e WG_HOST=vpn.example.com \
-e PASSWORD=сложный_пароль \
-v ~/.wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
weejewel/wg-easy
Разберём ключевые параметры:
--cap-add NET_ADMIN— даёт контейнеру права на создание сетевых интерфейсов.--sysctl— включает IP-forwarding, необходимый для маршрутизации трафика.WG_HOST— публичный адрес вашего сервера (обязательно).PASSWORD— пароль для входа в веб-интерфейс. Если не указать, доступ будет открытым.-v ~/.wg-easy— папка для хранения конфигураций и ключей.-p— проброс портов: UDP 51820 для VPN, TCP 51821 для веб-интерфейса.
Способ 2: Docker Compose
Создайте файл docker-compose.yml:
version: "3"
services:
wg-easy:
image: weejewel/wg-easy:latest
container_name: wg-easy
cap_add:
- NET_ADMIN
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
environment:
- WG_HOST=${WG_HOST}
- PASSWORD=${PASSWORD}
volumes:
- ~/.wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
Затем выполните:
export WG_HOST=vpn.example.com
export PASSWORD=сложный_пароль
docker compose up -d
Через минуту контейнер будет запущен. Проверьте логи:
docker logs wg-easy
Если вы видите сообщение Listening on :51821, всё готово.
Создание и настройка клиентов
Откройте браузер и перейдите на http://<IP-вашего-сервера>:51821. Введите пароль, который вы задали на предыдущем шаге. Перед вами появится веб-интерфейс wg-easy.
Чтобы добавить нового клиента, нажмите кнопку “Новый клиент” (или “Add Client” в зависимости от версии). Вы увидите имя клиента и поле для автоматической генерации ключей. После создания клиента в таблице появится его конфигурация — можно нажать на QR-код, чтобы отобразить его для мобильного устройства, или скачать файл .conf для десктопа.
Совет: давайте клиентам понятные имена (например, “iPhone”, “Ноутбук”). Так вы всегда поймёте, чьё устройство подключено. Для каждого клиента генерируется отдельная пара ключей — это безопасно и удобно.
Подключение устройств
Теперь, когда сервер работает и клиенты созданы, необходимо подключить устройства.
- Windows / macOS / Linux: Установите официальный клиент WireGuard. Импортируйте файл
.confили отсканируйте QR-код из веб-интерфейса (QR обычно используется для мобильных устройств, но можно и для десктопа, если есть камера). - Android / iOS: Установите приложение WireGuard из Play Store или App Store. Запустите его и выберите “Добавить из QR-кода” — наведите камеру на QR, отображаемый в панели wg-easy.
После импорта конфигурации активируйте тумблер подключения. Если всё настроено правильно, через пару секунд установится защищённый туннель. В веб-интерфейсе wg-easy вы увидите статистику по активному клиенту.
Типичные проблемы и их решение
Даже такая простая установка может столкнуться с нюансами. Вот что чаще всего идёт не так.
Не открыт UDP-порт
Проверьте, что на внешнем файрволе (или в панели облачного провайдера) разрешены входящие подключения на порт 51820/UDP. Без этого клиенты не смогут подключиться. Также убедитесь, что в настройках самого сервера (iptables, ufw) нет блокировки.
Неправильно указан WG_HOST
Переменная WG_HOST должна содержать публичный IP-адрес или домен, который резолвится в этот IP. Если вы используете домен, проверьте, что DNS-записи корректны.
Контейнер не запускается
Частая причина — конфликты с сетью или недостаток прав. Убедитесь, что вы передали все --cap-add и --sysctl. На некоторых хостах требуется добавить модуль wireguard в ядро (modprobe wireguard).
Нет подключения, но сервер работает
Попробуйте проверить на клиенте имя сервера и порт. Если клиент не может установить соединение, загляните в логи wg-easy: docker logs wg-easy. Там будет видно, приходят ли handshake-запросы.
Заключение
wg-easy — это отличный способ быстро развернуть WireGuard-сервер без глубокого изучения конфигурационных файлов. За 10 минут вы получаете полноценный VPN с веб-интерфейсом, QR-кодами и управлением клиентами. Помните, что wg-easy — сторонний проект, поэтому следите за обновлениями и проверяйте совместимость с вашей версией Docker и ядра Linux.
Если вы столкнулись с уникальной проблемой, загляните в официальный репозиторий проекта (ссылка ниже) — там часто описаны решения для типичных сценариев.
Мини-чеклист
- Убедитесь, что сервер имеет публичный IP-адрес и не заблокированы порты 51820/UDP и 51821/TCP.
- Установите Docker и Docker Compose на сервере.
- Запустите wg-easy с указанием WG_HOST и PASSWORD, используя официальную команду docker run.
- Проверьте доступность веб-интерфейса и создайте первого клиента для теста.
Частые ошибки
- Забывают указать WG_HOST — без этой переменной контейнер не знает адрес сервера, и клиенты не смогут подключиться.
- Не открывают порт UDP 51820 во внешнем брандмауэре, даже если внутри всё настроено.
- Запускают контейнер без --cap-add NET_ADMIN и sysctl net.ipv4.ip_forward=1 — в итоге маршрутизация не работает.
- Используют слабый пароль для веб-интерфейса или оставляют PASSWORD не заданным, что открывает доступ к управлению VPN.
Источники и документация
FAQ
Как изменить порт WireGuard в wg-easy?
Измените переменную окружения WG_PORT при запуске контейнера. Например, WG_PORT=51820. Не забудьте также отразить изменение в пробросе портов docker run (-p) или docker-compose.
Можно ли использовать wg-easy без Docker?
Официально рекомендуется запускать через Docker, но можно вручную установить зависимости и запустить Node.js-приложение из исходников. Однако это сложнее и не гарантирует стабильную работу.
Как удалить клиента или отозвать его доступ?
В веб-интерфейсе wg-easy найдите клиента в списке и нажмите кнопку удаления. Это автоматически удалит его ключи и запретит подключения.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ