Настройка wg-easy: доступ, устройства и восстановление

Настройка wg-easy: доступ, устройства и восстановление

Kevin Wu
11 октября 2026 г.· 11 мин чтения

Настройка wg-easy добавляет интерфейс управления WireGuard, но безопасность узла, маршруты и восстановление остаются вашей задачей. Здесь панель доступна через SSH, каждое устройство получает отдельную идентичность, а восстановление обязательно учитывает последующие отзывы ключей.

Ключевые выводы

  • Публикуйте порт туннеля, а порт панели привязывайте к loopback узла.
  • Файл устройства и его QR-код содержат секреты.
  • После отзыва и перезапуска проверяйте новый трафик, а не зеленый индикатор.
  • Восстанавливайте данные при закрытом входе и сначала повторяйте последующие отзывы.

Подходит ли вам настройка wg-easy?

В плане самостоятельного обслуживания определите ответственного за обновления, ключи, firewall и вывод узла из эксплуатации. Веб-интерфейс WireGuard упрощает создание устройств, однако незащищенный экспорт или резервная копия раскрывает их секреты. Перед выдачей административных прав разберитесь в модели идентичностей WireGuard.

Если нужен повседневный выход в интернет без обслуживания сервера, сравните ответственность владельца VPS и пользователя VPN. Для управления входами Xray предназначен отдельный сценарий 3x-ui: у него другие учетные данные и состав восстановления, это не интерфейс WireGuard.

Область применения и доказательства: Ubuntu 24.04 LTS, Linux Docker Engine с плагином Compose, wg-easy v15.4.0 и отдельный разрешенный клиент WireGuard. Руководство основано на источниках; автор не заявляет о сквозном развертывании или измерении производительности. Здесь нет снимков экрана и вывода команд, выдаваемых за наблюдения. Зафиксированный выпуск — исходная версия, а не утверждение о самом новом релизе.[1]

Шаг 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 на общем компьютере.

Шаг 2: Ограничьте веб-интерфейс WireGuard до запуска

Загрузите 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" исключает автоматический запуск из первичной приемки; другую политику включайте только после проверок.

Шаг 3: Выполните настройку через SSH и создайте устройство

На административном компьютере замените заглавные заполнители. Файл доверия должен содержать независимо проверенный ключ узла; несовпадение требует остановки, а не отключения проверки. Локальный порт 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 относительно выбранной топологии.

Шаг 4: Раздельно проверьте доступ, трафик и отказ

До подключения запишите обычный выход клиента в закрытом журнале. Подключите устройство и выполните новый запрос. Через браузер, действительно использующий интерфейс 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 может вернуть обычное соединение. Для исследования отказа не используйте чувствительный трафик.

Шаг 5: Отзовите устройство и сохраните резервную копию wg-easy

Сохраните второе разрешенное устройство как контрольное. Отключите или удалите первое в панели, сохраните изменение и убедитесь, что его публичный ключ больше не является принятым активным 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. Не смешивайте файлы с работающей базой и не перезаписывайте единственную уцелевшую копию.

Запустите при закрытом входе, повторите все отзывы после даты снимка и сверьте инвентаризацию. Затем временно допустите только разрешенный тестовый клиент, повторите положительную и отрицательную проверки, перезапуск и проверки снова. Возврат отозванной идентичности означает неудачное восстановление: закройте вход, удалите ее из сохраненного и рабочего состояния и повторите приемку до обычного открытия.

Шаг 6: Восстановите управление или завершите эксплуатацию

Если 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.

Итоги

  • Разделяйте административный маршрут, туннель, инвентаризацию и реестр отзывов.
  • Проверяйте новый трафик и отказ до включения автоматического перезапуска.
  • Восстановление должно сохранять текущие запреты вместе с действующими устройствами.

Часто задаваемые вопросы (FAQ)

Заменяет ли панель ключи WireGuard?

Нет. У каждого устройства остается отдельная идентичность WireGuard. Панель облегчает управление и экспорт, поэтому ее административный доступ нужно особенно тщательно защищать.

Можно ли открыть UI с трудным паролем?

Надежный пароль полезен, но не заменяет ограниченный административный вход. В этом сценарии HTTP разрешен только через SSH к loopback, без публичного слушателя панели.

Почему порт доступен при запрете UFW?

Docker управляет пересылкой и публикациями вне пути, который покрывают многие обычные правила UFW для служб узла. Проверяйте реальную публикацию Docker и firewall провайдера.

Подтверждает ли handshake выход в интернет?

Handshake подтверждает обмен peer в определенный момент. Отдельно проверяйте новый трафик, выход, DNS, UDP и отключение, прежде чем полагаться на весь маршрут.

Возвращает ли восстановление отозванные устройства?

Это возможно для снимка, сделанного до удаления устройства. Храните независимый реестр отзывов, применяйте последующие изменения при закрытом входе и повторяйте отрицательные проверки.

Можно ли использовать один экспорт на всех устройствах?

Выдавайте отдельные идентичности: тогда потерянное устройство можно отозвать без замены остальных. Общие файлы также мешают инвентаризации и установлению принадлежности трафика.

Проверил ли автор развертывание от начала до конца?

Автор не заявляет о сквозном испытании. Команды и ожидаемые условия образуют приемку для читателя на основе официальных источников; фиксируйте собственную разрешенную среду и фактические результаты.

Источники:

  1. wg-easy v15.4.0 — https://github.com/wg-easy/wg-easy/releases/tag/v15.4.0
  2. wg-easy v15.4.0 Compose — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docker-compose.yml
  3. Docker — Packet filtering and firewalls — https://docs.docker.com/engine/network/packet-filtering-firewalls/
  4. wg-easy — No Reverse Proxy — https://wg-easy.github.io/wg-easy/latest/examples/tutorials/reverse-proxyless/
  5. wg-easy v15.4.0 — Setup — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/setup.md
  6. wg-easy v15.4.0 — CLI — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/cli.md
  7. Docker — Compose CLI — https://docs.docker.com/reference/cli/docker/compose/

Sources checked 11 октября 2026 г.


Рекомендуемые статьи:

Начните бесплатный 3-дневный пробный период

Зарегистрируйтесь и попробуйте все премиум-функции бесплатно.

*Только для новых пользователей. Один пробный период на пользователя.

Настройка wg-easy: доступ, устройства и восстановление | AethoVPN