Начните бесплатный 3-дневный пробный период
Зарегистрируйтесь и попробуйте все премиум-функции бесплатно.
*Только для новых пользователей. Один пробный период на пользователя.


Настройка wg-easy добавляет интерфейс управления WireGuard, но безопасность узла, маршруты и восстановление остаются вашей задачей. Здесь панель доступна через SSH, каждое устройство получает отдельную идентичность, а восстановление обязательно учитывает последующие отзывы ключей.
Ключевые выводы
- Публикуйте порт туннеля, а порт панели привязывайте к loopback узла.
- Файл устройства и его QR-код содержат секреты.
- После отзыва и перезапуска проверяйте новый трафик, а не зеленый индикатор.
- Восстанавливайте данные при закрытом входе и сначала повторяйте последующие отзывы.
В плане самостоятельного обслуживания определите ответственного за обновления, ключи, firewall и вывод узла из эксплуатации. Веб-интерфейс WireGuard упрощает создание устройств, однако незащищенный экспорт или резервная копия раскрывает их секреты. Перед выдачей административных прав разберитесь в модели идентичностей WireGuard.
Если нужен повседневный выход в интернет без обслуживания сервера, сравните ответственность владельца VPS и пользователя VPN. Для управления входами Xray предназначен отдельный сценарий 3x-ui: у него другие учетные данные и состав восстановления, это не интерфейс WireGuard.
Область применения и доказательства: Ubuntu 24.04 LTS, Linux Docker Engine с плагином Compose, wg-easy v15.4.0 и отдельный разрешенный клиент WireGuard. Руководство основано на источниках; автор не заявляет о сквозном развертывании или измерении производительности. Здесь нет снимков экрана и вывода команд, выдаваемых за наблюдения. Зафиксированный выпуск — исходная версия, а не утверждение о самом новом релизе.[1]
Используйте выделенный узел с публичной точкой подключения либо согласованным пробросом UDP на вышестоящем NAT. Убедитесь, что выбранный образ поддерживает архитектуру процессора, а ядро Linux — WireGuard. Docker Desktop на рабочем компьютере не входит в этот сценарий шлюза. Установите Engine и Compose по официальным инструкциям Docker и проверьте версии.
Сохраните в закрытом месте исходные интерфейсы, маршруты, DNS, владельца firewall, публикации Docker и правила провайдера. Откройте новое SSH-соединение и проверьте аварийную консоль. Административный маршрут не должен зависеть от создаваемого туннеля.
Зарезервируйте UDP 51820 и TCP 51821 узла; при конфликте остановитесь. Сопоставьте подсети Compose с маршрутами узла, клиента и LAN. Частная IPv6-подсеть моста не доказывает наличие публичного IPv6-выхода. Ограниченную проверку IPv4 проводите на клиенте без рабочего маршрута IPv6 по умолчанию; иначе сначала разработайте и проверьте dual-stack. Не отключайте IPv6 на общем компьютере.
Загрузите Compose выбранного выпуска, прочитайте его и сохраните согласованные настройки томов, capabilities, сети и forwarding. Не переносите переменные v14 в v15. Исходный файл публикует оба порта, поэтому публикацию панели нужно изменить сознательно.[2]
sudo install -d -m 700 /etc/docker/containers/wg-easy
sudo curl --fail --show-error --location \
https://raw.githubusercontent.com/wg-easy/wg-easy/v15.4.0/docker-compose.yml \
-o /etc/docker/containers/wg-easy/compose.yaml
sudoedit /etc/docker/containers/wg-easy/compose.yaml
В существующем сервисе wg-easy замените соответствующие поля следующим фрагментом. Это не полный Compose: сохраните отступы и остальные обязательные настройки, включая NET_ADMIN и документированную работу модулей. Не добавляйте privileged и Docker socket.
image: ghcr.io/wg-easy/wg-easy:15.4.0
environment:
- INSECURE=true
ports:
- "51820:51820/udp"
- "127.0.0.1:51821:51821/tcp"
restart: "no"
INSECURE=true разрешает HTTP для этого ограниченного интерфейса. Это не отключение аутентификации WireGuard и не разрешение публичного HTTP-администрирования. В данном варианте путь браузер–сервер защищает SSH; публичный HTTP-адрес панели использовать нельзя. Для будущего публичного входа потребуется отдельная схема с аутентификацией и HTTPS.[4]
Каталог проекта остается доступным только root. Ниже путь к Compose передается явно внутри sudo: обычному администратору с sudo не нужно переходить в этот каталог.[7]
Разрешите UDP 51820 у провайдера и через реального владельца политики узла/Docker. Не открывайте публичный TCP 51821, включая IPv6. Публикации Docker могут обходить ожидаемые правила UFW для обычных служб, поэтому одного запрета UFW недостаточно. Не отключайте создание правил Docker и не очищайте таблицы.[3]
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml config --quiet
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml pull
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml up -d
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml ps
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml port wg-easy 51821
Публикация панели должна показывать 127.0.0.1:51821. При wildcard или другом адресе остановите контейнер и исправьте файл до инициализации. restart: "no" исключает автоматический запуск из первичной приемки; другую политику включайте только после проверок.
На административном компьютере замените заглавные заполнители. Файл доверия должен содержать независимо проверенный ключ узла; несовпадение требует остановки, а не отключения проверки. Локальный порт 51821 тоже должен быть свободен.
ssh -N -T -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=yes \
-o UserKnownHostsFile=/PATH/TO/VERIFIED_KNOWN_HOSTS \
-L 127.0.0.1:51821:127.0.0.1:51821 ADMIN@SERVER_IP
Оставьте терминал открытым и перейдите на http://127.0.0.1:51821. Создайте первого администратора с уникальным именем и надежным паролем. Выберите новую конфигурацию, укажите публичную точку туннеля, UDP 51820, затем нужные DNS и маршруты в настройках интерфейса/клиента. Loopback не подходит для endpoint устройства. Официальная инструкция отличает новую конфигурацию от импорта старой.[5]
Создайте одно устройство с понятной инвентарной меткой владельца и назначения. Передайте экспорт непосредственно этому устройству закрытым способом. Не делитесь одним файлом между людьми, не отправляйте его в чат и не публикуйте QR-код. Соответствие публичного ключа устройству храните отдельно от приватных ключей.
Для выхода IPv4 проверьте 0.0.0.0/0 в клиентском AllowedIPs и доступный DNS. Клиентский маршрут не заменяет серверное разграничение доступа и не делает произвольные частные LAN доступными с VPS. До экспорта проверьте endpoint, маршруты, адреса и DNS относительно выбранной топологии.
До подключения запишите обычный выход клиента в закрытом журнале. Подключите устройство и выполните новый запрос. Через браузер, действительно использующий интерфейс WireGuard, проверьте видимый адрес выхода: ожидается известный IPv4 сервера с учетом NAT провайдера.
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec wg-easy wg show wg0
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml restart wg-easy
После нового трафика смотрите время handshake и счетчики. Старый handshake подтверждает прошлый обмен, а не маршрут текущего запроса. Не публикуйте ключи и адреса из журналов. При проблемах идентичности используйте разбор несовпадения ключей, не раскрывая приватные ключи.
| Проверка читателя | Ожидаемое условие | Действие при несоответствии |
|---|---|---|
| Внешний разрешенный узел обращается к публичному адресу панели | Нет подключения к TCP 51821 | Остановить контейнер, проверить привязки Docker и оба семейства адресов |
| Новый браузер через SSH без входа в учетную запись | Нет привилегированных операций | Прервать настройку, проверить аутентификацию и исключить анонимный доступ |
| Разрешенное устройство выполняет новый запрос | Свежий handshake, растущие счетчики, нужный выход | Разделить endpoint/UDP, forwarding, NAT, DNS и маршруты |
| Отдельные DNS и UDP-запросы приложения | Нужный DNS-путь и успешный контролируемый UDP | Проверить эти пути независимо от успешного TCP браузера |
| Туннель отключается | Фактический fallback соответствует заданной политике | Не обещать kill switch; отдельно разработать и проверить его при необходимости |
Проверяйте фактический путь DNS контролируемым вами тестом. UDP проверяйте отдельным разрешенным приложением: HTTPS его не заменяет. Здесь нет клиентского kill switch; отключение full-tunnel может вернуть обычное соединение. Для исследования отказа не используйте чувствительный трафик.
Сохраните второе разрешенное устройство как контрольное. Отключите или удалите первое в панели, сохраните изменение и убедитесь, что его публичный ключ больше не является принятым активным peer. Со старой сохраненной конфигурацией создайте новый трафик: новый принятый handshake и пересылка запросов должны отсутствовать. Проверьте контрольное устройство, перезапустите контейнер и повторите обе проверки.
Запишите отозванный публичный ключ и дату в закрытый реестр вне заменяемой резервной копии. Удаление файла на вашем клиенте не отзывает копию на чужом устройстве. Снимок панели также не доказывает состояние работающего интерфейса или результат будущего перезапуска.
Резервная копия wg-easy должна быть согласованной: сначала остановите контейнер. Указанный датированный каталог должен быть новым; при следующем снимке выберите другую метку. Проверяйте успешность каждой команды. При ошибке копирования сохраните исходный том и осознанно восстановите службу, не признавая копию пригодной.
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml stop wg-easy
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml cp wg-easy:/etc/wireguard /root/wg-easy-backup-20261011
sudo chmod -R go-rwx /root/wg-easy-backup-20261011
sudo cp /etc/docker/containers/wg-easy/compose.yaml /root/wg-easy-compose-20261011.yaml
sudo chmod 600 /root/wg-easy-compose-20261011.yaml
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml start wg-easy
Нужен весь каталог /etc/wireguard, включая базу и созданные ключи. Сохраните рядом Compose, ссылку на выбранный образ и инвентаризацию firewall/аварийного доступа. Зашифруйте внешнюю копию, ограничьте доступ и проверьте чтение архива. Наличие файлов не доказывает восстановимость.
Для упражнения сначала закройте вход туннеля у провайдера и используйте выделенный заменяющий узел или изолированный экземпляр. Воссоздайте ту же версию, восстановите каталог остановленного сервиса с исходными владельцем и правами, оставьте UI на loopback. Не смешивайте файлы с работающей базой и не перезаписывайте единственную уцелевшую копию.
Запустите при закрытом входе, повторите все отзывы после даты снимка и сверьте инвентаризацию. Затем временно допустите только разрешенный тестовый клиент, повторите положительную и отрицательную проверки, перезапуск и проверки снова. Возврат отозванной идентичности означает неудачное восстановление: закройте вход, удалите ее из сохраненного и рабочего состояния и повторите приемку до обычного открытия.
Если SSH работает, но пароль администратора утерян, выполните документированный интерактивный сброс на разрешенном узле. Не передавайте новый пароль аргументом команды и не записывайте ввод.[6]
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec -it wg-easy cli db:admin:reset
При неисправном UI через консоль провайдера проверьте конфигурацию и журналы только этого проекта Compose. Верните известную рабочую конфигурацию; публичная панель не является обходным решением. Если безопасно восстановить управление нельзя, оставьте вход закрытым и прекратите изменения.
При выводе из эксплуатации закройте его UDP-вход, остановите контейнер и выполните sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml down без -v, пока не решен вопрос хранения копий. Отзовите экспортированные идентичности, удалите только его правила и ресурсы, проверьте оставшиеся слушатели. Убедитесь в новом SSH-подключении и работоспособности прежних служб. Том удаляйте только после осознанного решения о хранении; остановка контейнера не прекращает оплату VPS.
Нет. У каждого устройства остается отдельная идентичность WireGuard. Панель облегчает управление и экспорт, поэтому ее административный доступ нужно особенно тщательно защищать.
Надежный пароль полезен, но не заменяет ограниченный административный вход. В этом сценарии HTTP разрешен только через SSH к loopback, без публичного слушателя панели.
Docker управляет пересылкой и публикациями вне пути, который покрывают многие обычные правила UFW для служб узла. Проверяйте реальную публикацию Docker и firewall провайдера.
Handshake подтверждает обмен peer в определенный момент. Отдельно проверяйте новый трафик, выход, DNS, UDP и отключение, прежде чем полагаться на весь маршрут.
Это возможно для снимка, сделанного до удаления устройства. Храните независимый реестр отзывов, применяйте последующие изменения при закрытом входе и повторяйте отрицательные проверки.
Выдавайте отдельные идентичности: тогда потерянное устройство можно отозвать без замены остальных. Общие файлы также мешают инвентаризации и установлению принадлежности трафика.
Автор не заявляет о сквозном испытании. Команды и ожидаемые условия образуют приемку для читателя на основе официальных источников; фиксируйте собственную разрешенную среду и фактические результаты.
Источники:
Sources checked 11 октября 2026 г.
Рекомендуемые статьи:
Зарегистрируйтесь и попробуйте все премиум-функции бесплатно.
*Только для новых пользователей. Один пробный период на пользователя.





