WireGuard с панелью wg-easy в Docker: VPN с QR-кодами за 10 минут
Установка WireGuard на VPS через wg-easy 15: Docker Compose, вход по IP без HTTPS, мастер настройки, клиенты с QR-кодом и .conf, сброс пароля и обновление. Debian 12, Ubuntu 24.04.

WireGuard — быстрый и простой VPN-протокол: почти не грузит сервер и мгновенно переподключается, когда телефон меняет сеть. Настраивать его руками (ключи, peer’ы, AllowedIPs) муторно, поэтому ставим веб-панель wg-easy: клиенты создаются парой кликов, конфиг выдаётся файлом или QR-кодом. Инструкция для wg-easy 15.x на Debian 12 и Ubuntu 24.04.
WireGuard не маскируется. Его рукопожатие легко распознаётся DPI, и в ряде сетей он просто не подключается. Если вам нужен VPN для обхода блокировок, смотрите Amnezia или VLESS Reality. WireGuard хорош как служебный VPN: доступ к домашней сети, связь серверов, защита в публичном Wi-Fi.
Что нужно
- Сервер на tanaka.host, вход по SSH под root.
- Docker — как поставить, в отдельной статье, либо скриптом ниже.
1. Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
Если Docker уже есть (docker --version отвечает), пропустите.
2. Запуск wg-easy
Папка для панели, официальный compose-файл и запуск:
# Папка для файлов панели
mkdir -p /opt/wg-easy && cd /opt/wg-easy
# Официальный файл настроек от разработчиков wg-easy
curl -fsSL -o docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml
# Разрешаем открывать панель по обычному http://
sed -i -e 's/^ #environment:/ environment:/' -e 's/^ # - INSECURE=false/ - INSECURE=true/' docker-compose.yml
# Запускаем
docker compose up -d
Без INSECURE=true новая версия wg-easy открывается только по HTTPS, а для него нужны домен и сертификат. Команда sed раскомментирует эту переменную, и панель становится доступна сразу по IP.
Панель по HTTP — пароль идёт по сети открытым текстом. Придумайте длинный пароль и не заходите в панель из общественного Wi-Fi. Если панель нужна надолго, повесьте перед ней nginx с Let’s Encrypt и уберите INSECURE.
Если на сервере включён брандмауэр, откройте 51820/UDP для VPN и 51821/TCP для панели:
ufw allow 51820/udp
ufw allow 51821/tcp
3. Мастер настройки в браузере
Откройте http://IP-сервера:51821. При первом входе запустится мастер (есть русский язык):
- «Продолжить».
- Имя пользователя и пароль администратора → «Создать аккаунт».
- На вопрос «У вас уже есть существующая настройка?» — «Нет».
- В поле «Хост» укажите внешний IP сервера. Удобно кнопкой «Предложить»: нужна строка с пометкой «IPv4 - Public». Порт оставьте 51820 → «Продолжить».
- «Настройка завершена успешно» → «Войти».
Поле «Хост» попадает в каждый клиентский конфиг как Endpoint. Если там окажется внутренний адрес вроде 10.42.42.42, клиенты не подключатся.
4. Клиенты
Клиент — профиль для одного устройства. Для телефона и ноутбука делайте разных: любого можно отключить, не трогая остальных.
«Новый» → имя, например laptop → «Создать клиента». «Дата отключения» пустая — клиент бессрочный.
Кнопки справа от клиента:
| Кнопка | Что делает |
|---|---|
| Переключатель | Включает и выключает клиента |
| Карандаш | Настройки клиента; там же кнопка «Удалить» |
| QR-код | QR для подключения с телефона |
| Стрелка вниз | Скачивает .conf для компьютера |
| Ссылка | Временная ссылка на файл настроек, живёт 5 минут |
5. Подключение
Нужно официальное приложение WireGuard со страницы загрузки.
Компьютер (Windows, macOS):
- Скачайте
.confстрелкой вниз. - В WireGuard — «Import tunnel(s) from file», выберите файл.
- «Activate». Когда в строке Status появится Active — работает.
Linux без GUI:
apt install -y wireguard
cp laptop.conf /etc/wireguard/wg0.conf
wg-quick up wg0
Телефон:
- WireGuard из App Store или Google Play.
- В панели — кнопка QR у клиента.
- В приложении «+» → сканировать QR → навести камеру.
- Включить переключатель у туннеля.
Проверка: откройте в браузере https://api.ipify.org — должен показаться IP сервера.
Файл настроек и QR-код — ключ к VPN. В них приватный ключ клиента. Не выкладывайте их в открытые чаты.
Частые вопросы
Панель не открывается. docker ps — контейнер wg-easy должен быть в статусе Up. Адрес открываете через http://, не https://. Порт 51821/TCP открыт в брандмауэре.
VPN не подключается. Почти всегда закрыт 51820/UDP. Второе — внутренний адрес в поле «Хост»: исправьте в «Админ-панель → Конфигурация» и скачайте конфиги заново. Общий алгоритм — в статье VPN не подключается.
Забыли пароль от панели. Сброс командой на сервере, она спросит новый пароль:
cd /opt/wg-easy && docker compose exec -it wg-easy cli db:admin:reset
Обновить wg-easy. Клиенты и настройки сохраняются:
cd /opt/wg-easy && docker compose pull && docker compose up -d
В моей сети WireGuard не работает. Провайдер его режет. Берите протоколы с маскировкой: Amnezia (AmneziaWG — тот же WireGuard, но неузнаваемый) или VLESS Reality.
Полезные команды
| Команда | Что делает |
|---|---|
docker logs --tail 50 wg-easy |
Журнал панели |
docker exec wg-easy wg show |
Активные peer’ы, трафик, последнее рукопожатие |
cd /opt/wg-easy && docker compose down |
Остановить панель и VPN |
cd /opt/wg-easy && docker compose up -d |
Запустить обратно |
Данные панели лежат в volume etc_wireguard — не забудьте включить его в резервные копии.