У большинства self-hosted VPN-панелей одна и та же боль: Docker-стек, внешняя БД, реверс-прокси и куча конфигов, которые надо связать между собой, прежде чем хоть что-то заработает. Мне хотелось наоборот — что-то, что можно закинуть на свежий VPS и поднять меньше чем за минуту.
Так появилась РосПанель: self-hosted панель для администрирования личного VPN-сервера на Xray-core, который поставляется одним статическим бинарником. React-фронтенд вшит через go:embed, база — встроенный SQLite, отдельного веб-сервера нет. Поставил, открыл, добавил юзера.
Главная идея: один бинарник, ничего лишнего
Цель, которая определила всё остальное, — радикальная простота. В отличие от Marzban и 3x-ui, у РосПанели нет Docker-обвязки, нет внешней БД и нет отдельного веб-сервера, который надо настраивать.
Всё живёт в одном исполняемом файле:
- Веб-интерфейс собирается в
web/distи вшивается в Go-бинарник на этапе сборки. - Состояние хранится в SQLite (чистый Go-драйвер
modernc, то есть без CGO). - Конфиг Xray всегда генерируется из базы и применяется супервизором — SQLite это единственный источник правды, а не JSON, который правят руками. В итоге деплой — это просто положить бинарник и systemd-юнит. Никакой оркестрации, ничего не надо держать в синхроне.
Что она на самом деле делает
РосПанель — это панель управления (control plane), а не VPN-клиент. Она настраивает и обслуживает ваш собственный сервер: генерирует конфиг Xray, выдаёт ссылки на подписки и показывает статистику.
Протоколы из коробки — один конфиг Xray, один набор учёток:
- VLESS-Vision (TCP/443 + uTLS-fingerprint)
- Trojan-WS (через fallback на 443)
- Hysteria2 (UDP с port-hopping)
- VLESS-gRPC-REALITY (отдельный порт, маскировка под чужой TLS)
Маскировка — панель спрятана за секретным путём. Любой другой путь отдаёт сайт-заглушку (11 готовых шаблонов), так что сервер неотличим от обычного хостинга. Без знания
/<secret>/форму логина не найти.
TLS, который просто работает — ACME через Let's Encrypt или ZeroSSL, авто-продление и self-signed fallback, пока не выпустится настоящий сертификат.
Маршрутизация и выходы — категории block / direct / proxy / WARP / Opera с настраиваемым приоритетом, geosite/geoip-пресеты с авто-загрузкой баз, Cloudflare WARP (WireGuard) как выход по правилам, Opera VPN как бесплатный региональный выход и пул прокси с health-check через Observatory.
Пользователи и статистика — лимиты трафика и срок действия с авто-отключением, авто-сброс по дням/неделям/месяцам/годам, учёт трафика через Xray Stats API, онлайн-статус и дашборд в реальном времени (CPU / RAM / swap / диск / сеть / VPN-трафик / аптайм).
Подписки — base64-список плюс страница с QR-кодами, deep-links и кнопками импорта в популярные клиенты.
Эксплуатация — бэкап/восстановление и сброс к заводским настройкам из дашборда и из CLI, логи приложения с ротацией и просмотрщиком прямо в панели, брутфорс-защита (бан по iptables за перебор на SOCKS/HTTP-инбаунде) и самообновление прямо из GitHub Releases.
Стек
Go 1.26 · Xray-core · SQLite (modernc, без CGO) · React + Vite + Tailwind
Внутренняя структура разбита по зонам ответственности — типизированный генератор конфига Xray и супервизор, ACME-менеджер, роутер заглушки, port-hopping на nftables для Hysteria2, хелперы WARP и Opera, пул прокси, сборщики ссылок и подписок и сервисный слой, который сводит желаемое состояние (квоты, TLS, роутинг) с тем, что Xray реально крутит.
Попробовать
Одна команда скачает последний релиз, поставит systemd-сервис, запустит его и напечатает логин:
curl -Ls https://raw.githubusercontent.com/AppsGanin/rospanel/main/install.sh | sudo bash
Скрипт спросит домен (запросит TLS-сертификат через ACME) — или можно оставить пустым и работать по IP. Xray, geo-базы и сертификат подтянутся автоматически. Поддерживаются linux/amd64 и linux/arm64 — скрипт сам выберет нужный бинарь.
Есть также вариант с Docker-образом (ghcr.io/appsganin/rospanel:latest), если так удобнее.
При первом входе мастер настройки принудительно потребует сменить пароль и предложит заменить путь панели на случайный секрет — после этого корневой URL всегда отдаёт только заглушку.
Про назначение
РосПанель создана для образовательных и исследовательских целей: изучения того, как работают сетевые протоколы, TLS и прокси-технологии, проведения CTF-лаб, авторизованного пентеста и управления собственной инфраструктурой. Механизмы маскировки существуют для изучения этих техник и проверки устойчивости сервисов в рамках санкционированного тестирования. Ответственность за соблюдение законов своей юрисдикции несёт оператор сервера.
Open source
Лицензия — AGPL-3.0, проект полностью открыт. Релизы автоматизированы через release-please на основе Conventional Commits: публикуются и бинарник, и Docker-образ в GHCR.
Если панель окажется полезной — ⭐ на GitHub реально помогает, а PR и issue очень приветствуются.
👉 Репозиторий: https://github.com/AppsGanin/rospanel
Top comments (0)