3x-ui и панели управления WireGuard
Да, 3X-UI поддерживает WireGuard — но это не тот WireGuard, которым управляет wg-quick. В разделе Features официального README панель перечисляет WireGuard среди входящих протоколов рядом с VLESS, VMess, Trojan и Shadowsocks. Сама 3X-UI описана там же как веб-панель управления серверами Xray-core, поэтому WireGuard живёт в ней как inbound ядра Xray, а не как служба ОС.
Коротко. По документации Xray это реализация в пользовательском пространстве: файла
/etc/wireguard/wg0.confона не создаёт и командеwg showне видна. Релиз 3X-UI v3.4.2 от 29.06.2026 сделал такие инбаунды многоклиентскими, а 3X-UI v3.6.0 от 30.07.2026 снял ограничение пула адресов подсетью /24. Веб-интерфейс к системному WireGuard дают wg-easy (51821/tcp) и WGDashboard (10086). Панель — ещё один сетевой сервис: CVE-2026-44343 закрыта только в 4.3.2.
Поддерживает ли 3X-UI протокол WireGuard?
Поддерживает: WireGuard указан и в README панели, и в документации ядра — среди inbound- и outbound-протоколов Xray. Совет «3X-UI — это только Xray, WireGuard там нет» устарел. Релиз 3X-UI v3.4.2 от 29 июня 2026 года перевёл такие инбаунды в многоклиентскую модель с нативным списком users и адресами клиентов внутри подсети пира.
Путаница измерима: по Вордстату у «3x ui wireguard настройка» около 88 показов в месяц, у «wireguard ui настройка» — 98. Люди ищут веб-интерфейс к WireGuard, а попадают в панель для Xray.
Чем инбаунд Xray отличается от системного wg-quick?
Тем, что это реализация внутри процесса ядра Xray, а не сетевой интерфейс Linux. Параметры лежат в базе панели, поэтому в /etc/wireguard пусто, службы wg-quick@wg0 нет, а wg show ничего не выводит. Набор полей минимальный:
{ "secretKey": "ПРИВАТНЫЙ_КЛЮЧ", "mtu": 1420,
"peers": [{ "publicKey": "КЛЮЧ_КЛИЕНТА", "allowedIPs": ["0.0.0.0/0", "::/0"] }] }
secretKey обязателен, mtu по умолчанию 1420. Там же документация предупреждает: протокол не проектировался под сети с глубоким анализом трафика, признаки его узнаваемы, и сервер может попасть под ограничения. Нужна маскировка — поднимают Xray с VLESS и Reality.
Какие веб-панели существуют именно для WireGuard?
Самых распространённых — два. wg-easy упаковывает WireGuard и веб-интерфейс в один контейнер (AGPL-3.0-only): клиенты, QR-коды, графики Tx/Rx, одноразовые ссылки, 2FA, вход через OIDC. WGDashboard — надстройка на Python и Vue.js поверх готовых конфигураций (Apache 2.0): автор писал её потому, что иначе за туннелем приходится следить через wg show на сервере.
| Панель | Чем управляет | Порт веб-UI | Данные по умолчанию |
|---|---|---|---|
| 3X-UI | инбаундами Xray | случайный, 1024–62000 | случайные: логин и пароль по 10 знаков, путь из 18 |
| wg-easy | WireGuard в своём контейнере | 51821/tcp | задаются в мастере первого запуска |
| WGDashboard | файлами в /etc/wireguard | 10086 | admin / admin |
WGDashboard читает тот же каталог, куда пишет ручная настройка WireGuard на VPS: он не заменяет понимание wg0.conf, а надстраивается над ним. Настройки лежат в wg-dashboard.ini: app_ip, app_port, auth_req.
Как установить wg-easy на своём сервере?
Установка занимает около 10 минут. Понадобится VPS с Linux и root-доступом — как его выбрать, разобрано в сравнении VPS.
Шаг 1. Подготовить сервер и Docker
apt update && apt install docker.io docker-compose-v2 -y
Шаг 2. Описать сервис в docker-compose.yml
Ключевые части официального файла; веб-порт здесь намеренно сужен до localhost:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "127.0.0.1:51821:51821/tcp"
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
Шаг 3. Запустить контейнер и открыть только UDP
Управляйте сервисом парой up / down: документация предупреждает, что start / stop оставляют его в несогласованном состоянии.
docker compose up -d
ufw allow 51820/udp
Шаг 4. Закрыть веб-интерфейс от интернета
Порт 51821 наружу не публикуйте. Без обратного прокси вендор прямым текстом называет доступ небезопасным и требует ограничить его локальной сетью. Вариантов два: прокси с TLS (рекомендация документации) либо проброс порта по SSH — это уже общая практика, а не цитата из доков:
ssh -L 51821:127.0.0.1:51821 root@ВАШ_IP_СЕРВЕРА
По http панель вход не даёт: INSECURE в v15 равна false.
Чем опасен открытый в интернет порт панели?
Цена ошибки уже измерена: CVE-2026-44343 (advisory GHSA-rrf5-q4fp-qvgm, severity Critical) затрагивал WGDashboard ниже 4.3.2 и позволял неаутентифицированной стороне обратиться к файловой системе хоста; риску, по тексту advisory, подвержены экземпляры в публичной сети.
- Версия ниже 4.3.2 — непропатченная критическая уязвимость. Обновление упирается во второй капкан: с 4.3.3 нужен Python 3.12+, а страница Requirements всё ещё называет 3.10–3.13. Верить надо release notes.
admin/adminиapp_ip = 0.0.0.0. Пара по умолчанию задокументирована публично, а панель слушает все интерфейсы.- TLS внутри WGDashboard нет. Автор отказался от SSL на Gunicorn как нестабильного и советует терминировать TLS на nginx.
Что делать, если панель не открывается?
Почти все отказы сводятся к шести сочетаниям.
| Симптом | Причина | Решение |
|---|---|---|
Инбаунд создан, но wg show молчит | Это inbound Xray в пользовательском пространстве | Смотреть параметры в панели, системный туннель ставить отдельно |
| Инбаунд не поднимается на 51820/udp | Порт занят службой wg-quick@wg0 | Развести порты или остановить одну реализацию |
| Потерян адрес панели 3X-UI | Порт, логин, пароль и путь случайные | Выполнить на сервере x-ui: в меню есть сброс данных |
| wg-easy не пускает по http | INSECURE по умолчанию false | Прокси с TLS либо явное INSECURE=true |
| «WG_HOST Environment Variable Not Set!» | Взят образ с тегом latest — это ещё v14 | Указать в compose тег :15 и пересоздать (down, up -d) |
| Туннель поднялся, трафик не идёт | Нет NET_ADMIN / SYS_MODULE или /lib/modules | Привести compose к виду из шага 2 |
Какую панель выбрать под свою задачу?
Выбор определяет то, что уже стоит на сервере. Работает Xray и нужен второй протокол в той же панели — берите WireGuard-инбаунд 3X-UI. Сервер чистый и нужен классический WireGuard с QR-кодами без консоли — ставьте wg-easy: релиз v15.4.0 вышел 14 августа 2026 года. Конфигурации написаны руками и не хватает наблюдения — подойдёт WGDashboard не ниже 4.3.2 за nginx с TLS. Сравнение протоколов — в разделе «Настройка защищённого канала».
Частые вопросы
Ниже — то, что спрашивают чаще всего при первом знакомстве с панелями.
Создаёт ли 3X-UI файл /etc/wireguard/wg0.conf?
Нет. WireGuard в 3X-UI — это inbound ядра Xray, по документации реализованный в пользовательском пространстве. Параметры хранятся в базе панели, поэтому каталог /etc/wireguard остаётся пустым, службы wg-quick@wg0 не появляется, а команда wg show ничего не выводит. Если нужен именно системный туннель, WireGuard ставится отдельно.
Можно ли одновременно держать инбаунд Xray и wg-quick?
Да, но не на одном UDP-порту. WireGuard-инбаунд Xray и системная служба wg-quick@wg0 конфликтуют за 51820/udp — поднимется только та, что заняла порт первой. Решение простое: развести реализации по разным портам либо остановить одну из них.
Что делать, если потерян адрес панели 3X-UI?
Восстановить его можно только на сервере. Установщик 3X-UI генерирует порт случайно из диапазона 1024–62000, логин и пароль по 10 символов, а секретный путь панели — из 18 символов, и печатает всё это один раз. Подключитесь по SSH и выполните команду x-ui: в меню есть просмотр и сброс учётных данных, управление службой и SSL-сертификатами.
Какая версия WGDashboard безопасна?
Не ниже 4.3.2. В версиях до неё действовала уязвимость CVE-2026-44343 (advisory GHSA-rrf5-q4fp-qvgm, severity Critical): она позволяла неаутентифицированной стороне обратиться к файловой системе хоста, и в advisory прямо сказано, что риску подвержены экземпляры в публичной сети. Отдельный нюанс: начиная с 4.3.3 требуется Python 3.12 и выше, хотя страница Requirements всё ещё называет 3.10–3.13.
Обязателен ли обратный прокси для wg-easy?
Документация вендора для сценария без обратного прокси прямо называет такой доступ небезопасным и просит применять его, только если вы понимаете последствия, а иначе ограничить веб-интерфейс локальной сетью. По умолчанию INSECURE равна false, то есть вход по http панель не даёт. Практический минимум — не публиковать 51821/tcp наружу и оставить снаружи только 51820/udp.
Нужно ли что-то оформлять, чтобы поднять свой канал?
Прямой ответственности за использование VPN физическим лицом законодательство РФ не устанавливает. Отдельные нормы адресованы владельцам публичных средств доступа и рекламе таких средств: с 1 сентября 2025 года реклама средств доступа запрещена (ч. 10.8 ст. 5 ФЗ «О рекламе»), санкция по ч. 18 ст. 14.3 КоАП для граждан — 50 000–80 000 рублей. Материал носит образовательный, научно-технический характер и описывает работу с собственной инфраструктурой.