Недавно друг попросил помочь с настройкой VPN. Казалось бы, обычная задача. Но когда я посмотрел, что у него уже развернуто, удивился.
Для управления четырьмя клиентами использовался полноценный многопользовательский веб-сервис на PHP с MySQL. Более того, под него пришлось выделить отдельный VPS, потому что минимального тарифа с одним ядром и гигабайтом памяти уже не хватало, приложения начинали уходить в своп.
На мой вопрос, почему был выбран именно этот вариант, ответ оказался неожиданно простым:
> Мне нужен мониторинг.
Ради мониторинга пришлось разворачивать целый портал со своей инфраструктурой.
К тому моменту у меня уже работали несколько собственных VPS с AmneziaWG. Больше года я управлял ими вручную через консоль, и редкие вмешательства не напрягали. Но в последнее время обстоятельства потребовали уделять значительно больше времени серверам. История друга подтолкнула посмотреть, какие инструменты вообще существуют — и можно ли обойтись без громоздкой инфраструктуры.
Я перебрал популярные решения и в итоге написал awg-admin — десктопное приложение, которое управляет несколькими серверами WireGuard/AmneziaWG с минимумом софта на самих VPS. В этой статье я расскажу, какие проблемы заставили меня взяться за собственный инструмент и чем он отличается от готовых панелей.
Что предлагают существующие решения
Большинство проектов можно разделить на три группы.
Классические веб-панели — wg-easy, WGDashboard, wg-portal и им подобные. Они позволяют добавлять клиентов, смотреть статистику handshake и трафика, генерировать QR-коды. Некоторые поддерживают Prometheus, аутентификацию, экспорт конфигураций.
Это зрелые инструменты, но их архитектура предполагает, что рядом с VPN-туннелем постоянно живёт ещё один сервис: веб-интерфейс, база данных (пусть даже SQLite), контейнер. Даже лёгкая SQLite потребляет ресурсы, и сам факт наличия СУБД на VPN-шлюзе меня не устраивал.
Сетевые платформы — Firezone, NetBird, Tailscale, Headscale. Они дают overlay-сеть с координатором, политиками доступа, автоматическим обходом NAT. Это мощно, но избыточно для личного использования: требования к инфраструктуре значительно выше, а управление завязано на центральный узел.
Десктопные/лёгкие решения — AmneziaVPN и JWG.
AmneziaVPN использует обычное десктопное приложение, которое по SSH настраивает и контролирует VPN-сервер. Никакой СУБД на VPS не нужно. Это было максимально близко к тому, что я хотел.
JWG — компактный CLI-инструмент (один бинарник). Запускается непосредственно на VPS. Простой и удобный, с необходимым функционалом.
Но когда у вас не один сервер, а три или пять, открывать несколько окон Amnezia или несколько ssh-терминалов с JWG уже неудобно. Хотелось единый интерфейс для всех узлов и ещё несколько возможностей, которых не было ни в одном из этих проектов.
Чего не хватало именно в моем сценарии
Почти все современные панели показывают handshake, трафик, статус клиентов и QR. Проблема была не в отсутствии мониторинга, а в другом.
Я составил список того, чего мне реально не хватало:
Управление несколькими серверами в одном интерфейсе. Не открывать по панели на каждый VPS, а видеть их как единый парк: добавлять пиров, смотреть состояние, переключаться между узлами.
Минимум софта на сервере. Если VPS — это VPN-шлюз, пусть он им и остаётся. Никаких веб-серверов, СУБД и лишних демонов. Чем меньше компонентов, тем дешевле тариф и проще обслуживание.
Мониторинг без постоянно работающей инфраструктуры. Я хочу видеть графики загрузки CPU, памяти и активность клиентов только тогда, когда открываю приложение. Хранить метрики круглосуточно на сервере не обязательно.
Десктопное приложение вместо веб-портала. Инструмент для одного администратора. Запустил, сделал дело, закрыл. Это удобнее, чем каждый раз логиниться в браузере.
Быстрое построение туннелей между серверами без правки конфигов вручную.
Готового решения с таким сочетанием я не нашёл. AmneziaVPN отлично справляется с одним сервером, JWG — с одним. Расширений для multi-server там нет. Тогда я решил сделать свой инструмент.
Архитектура: почему десктоп и при чём здесь Zabbix
Мне нужен был инструмент для личного использования: один администратор, несколько VPS, никакого желания поднимать веб-сервис с СУБД ради управления VPN.
Идею подсказал опыт работы с Zabbix. В активном режиме Zabbix-агент кэширует метрики локально, если сервер недоступен, и отдаёт накопленные данные при восстановлении связи. Я подумал: а что если агент сам станет постоянным хранилищем?
Для моего сценария потеря нескольких часов истории не критична. Агент на каждом VPS может собирать статистику (нагрузка, handshake, трафик) и сохранять её в обычный JSON-файл. Никакой базы данных, только ротация по времени. Когда я открываю приложение, оно по SSH (или через mTLS) запрашивает этот JSON и строит графики. Храню последние 48 часов — этого достаточно.
Вся остальная логика управления живёт на моём ноутбуке. Приложение подключается к серверу, передаёт конфигурацию через REST API агента, тот применяет изменения и возвращает актуальное состояние. Доступ к API может идти либо через SSH-туннель до localhost, либо напрямую по защищённому mTLS.
Таким образом, на VPS работает только WireGuard/AmneziaWG и лёгкий агент. Никаких веб-интерфейсов, СУБД и лишних портов. VPN-сервер занимается только VPN.
Что в итоге получилось
awg-admin — это десктопное приложение на Go и Wails, которое управляет несколькими серверами WireGuard и AmneziaWG из одного окна.
Основные возможности:
Единый интерфейс для всех VPS. Все серверы видны в одном списке с ключевыми метриками (CPU, RAM, активные пиры, последний handshake).
Управление клиентами: добавление, отключение, генерация конфигураций и QR-кодов.
Мониторинг с локальным хранением. Приложение запрашивает у агентов JSON с историей за 48 часов и строит графики нагрузки и трафика. Никакой центральной базы метрик.
Туннели между серверами. Несколько кликов — и два узла соединяются site-to-site туннелем с автоматической настройкой маршрутов.
Лёгкий агент на VPS. Только сбор статистики и применение конфигурации. Установка — одной командой.
Работа через SSH и REST API. Административные задачи (установка, обновление) выполняются по SSH. Управление VPN и получение метрик идут через REST API агента — либо через SSH-туннель до localhost, либо напрямую по защищённому mTLS-соединению.
Приложение хранит локальную базу (список серверов, пользователей, настройки), работает на Windows, macOS и Linux.
Вместо заключения
Я не ставил цели сделать «ещё одну панель управления WireGuard». Скорее попытался объединить подходы, которые подсмотрел в других решениях, и убрать всё, что мне лично мешало.
Получился awg-admin — узкоспециализированный, но решающий мои задачи. Если вы тоже управляете несколькими личными VPN-серверами и устали от веб-порталов, возможно, он пригодится и вам.
Код открыт, ссылка на репозиторий: https://github.com/ks-tool/awg-admin. Буду рад обратной связи и идеям.
ссылка на оригинал статьи https://habr.com/ru/articles/1055412/