Skip to content

AppsGanin/rospanel

Repository files navigation

РосПанель

РосПанель

Простая self-hosted панель управления VPN на Xray-core.

Release Go Xray-core React Platform Deploy


РосПанель — личный VPN-сервер под вашим контролем

Что это

РосПанель — это лёгкая панель для самостоятельного хостинга личного VPN-сервера. Под капотом один процесс Xray-core, который сразу поднимает несколько протоколов, а панель даёт удобный веб-интерфейс: пользователи, подписки, тарифы и приём платежей, маршрутизация, статистика, бэкапы, брендинг и тема — без правки конфигов руками.

Панель самодостаточна: это один статический бинарник, которому не нужны Docker, внешняя БД, отдельный веб-сервер и обвязка из сторонних скриптов и ботов. Домен тоже не обязателен — сертификат выпустится и на голый IP. Поставил, открыл, добавил юзера.

Что уже внутри и не требует докручивания:

  • TLS сам — ACME (Let's Encrypt / ZeroSSL) с авто-продлением, без reverse-proxy впереди. Нет домена — сертификат выпускается прямо на IP-адрес сервера.
  • Xray сам — проверенная версия ядра скачивается при первом запуске и зафиксирована, так что обновление Xray не может внезапно сломать панель.
  • Тарифы и приём оплаты — ЮКасса и CryptoBot: клиент выбирает тариф и платит, доступ включается сам.
  • Команда и следы — несколько администраторов с ролями, журнал всего, что происходило с пользователем, и отдельный журнал действий над самой панелью.
  • Маскировка — панель живёт за секретным путём, любой другой адрес отдаёт сайт-заглушку.
  • Без обрыва связи — пользователи добавляются и удаляются в работающем Xray на лету: активные подключения остальных не рвутся.
  • Без знания Xray — конфиг ядра всегда генерируется из состояния панели, JSON руками править не нужно.
  • Переживает сбой диска — при старте панель проверяет целостность базы и, если та повреждена (жёсткая перезагрузка, забитый диск), сама поднимается из последнего локального бэкапа, а не падает в цикл.

Это панель управления (control plane), а не VPN-клиент и не «волшебная кнопка». Она лишь настраивает и обслуживает ваш собственный сервер: генерирует конфиг Xray, выдаёт ссылки/подписки и показывает статистику. Назначение — образовательное и исследовательское: изучение сетевых технологий, CTF-соревнования, авторизованный пентест и управление личной инфраструктурой. Проект не предназначен для обхода законных ограничений; ответственность за установку, настройку и использование несёт оператор (см. Дисклеймер).


🚀 Быстрый старт

Вариант 1 — установочный скрипт (рекомендуется)

Одной командой: скачает релиз, поставит systemd-сервис, запустит и покажет логин.

curl -Ls https://raw.githubusercontent.com/AppsGanin/rospanel/main/install.sh | sudo bash

Скрипт спросит домен: укажите его — панель запросит TLS-сертификат через ACME; оставьте пустым — будет работать по IP. Можно задать заранее, тогда вопроса не будет: curl -Ls … | sudo ROSPANEL_HOST=vpn.example.com bash.

Xray, geo-базы и TLS-сертификат панель подтянет сама. Откройте https://<ваш-домен-или-IP>/<секрет>/ и войдите. Поддерживаются linux/amd64 и linux/arm64 — скрипт сам выберет нужный бинарь по архитектуре.

Вариант 2 — бинарник + systemd вручную

# скачать последний релиз (замените amd64 на arm64 для ARM-серверов)
curl -fsSL -o rospanel \
  https://github.com/AppsGanin/rospanel/releases/latest/download/rospanel-linux-amd64
chmod +x rospanel

# установить как сервис (копирует бинарь в /usr/local/bin, пишет systemd-юнит, стартует)
sudo ./rospanel install
#   сразу с доменом:  sudo ROSPANEL_HOST=vpn.example.com ./rospanel install

# логин и секретный путь печатаются ОДИН раз:
journalctl -u rospanel | grep -A6 FIRST-RUN

Вариант 3 — Docker

docker run -d --name rospanel \
  --network host \
  --cap-add NET_ADMIN \
  -v rospanel-data:/data \
  ghcr.io/appsganin/rospanel:latest

docker logs rospanel | grep -A6 FIRST-RUN

--network host нужен, чтобы Xray слушал 443/TCP, 80/TCP и UDP-порты Hysteria2 напрямую; NET_ADMIN — для port-hopping и бана по iptables.

🔑 Вход по умолчанию

Поле Значение
Логин admin
Пароль admin
Путь панели /rospanel/

То есть сразу после установки панель доступна по адресу https://<домен-или-IP>/rospanel/. Точная ссылка дублируется в логе (journalctl -u rospanel | grep -A6 FIRST-RUN или docker logs rospanel | grep -A6 FIRST-RUN).

При первом входе мастер настройки принудительно потребует сменить пароль и предложит сменить путь панели на случайный секрет — дефолтные admin/admin и /rospanel/ работают только до этого шага.

⚠️ После смены панель доступна только по секретному пути — корень отдаёт страницу-обманку. Без знания /<secret>/ форму логина не найти.


✨ Возможности

🔐 Протоколы, маскировка, TLS

Один Xray-конфиг, один набор учёток: VLESS-Vision (TCP/443 + uTLS), Trojan-WS (fallback на 443), Hysteria2 (UDP + port-hopping), VLESS-gRPC-REALITY (отдельный порт, маскировка под чужой TLS).

Панель спрятана за секретным путём, любой другой путь отдаёт сайт-заглушку (11 шаблонов) — сервер неотличим от обычного хостинга. TLS из коробки: ACME (Let's Encrypt / ZeroSSL) с авто-продлением и self-signed, пока не выпустится настоящий сертификат. Домена может не быть вообще — панель умеет получать сертификат Let's Encrypt на сам IP-адрес сервера, так что клиенты подключаются по валидному TLS без покупки домена и настройки DNS.

👤 Пользователи

Лимиты трафика и срок действия с авто-отключением и авто-сбросом квоты (день/неделя/месяц/год). Лимит устройств — по уникальным публичным IP: при превышении пользователь отключается, пока число активных IP не упадёт. Учёт трафика через Xray Stats API, онлайн-статус, список подключений. Истёкших можно автоматически удалять через заданное число дней после окончания срока (по умолчанию — никогда; запись в журнале остаётся).

Поиск, фильтры, сортировка и пагинация не тормозят и на сотнях пользователей. Групповые операции (включить / выключить / сбросить трафик / продлить / удалить) выполняются одним проходом и одной перезагрузкой конфига Xray, а не операцией на каждого.

Дашборд показывает CPU / RAM / swap / диск / сеть / VPN-трафик в реальном времени.

📲 Подписки

/<путь>/<токен> — base64-список плюс страница с QR, deep-links и кнопками импорта в популярные клиенты; авто-роутинг-заголовки (Happ / INCY / Mihomo). Настраиваются свои названия узлов и имя пользователя в заголовке. Ссылку можно сбросить (ротация токена) — старая перестаёт работать мгновенно, при этом UUID и пароли протоколов не меняются. Объявление внутри клиента (Happ, v2RayTun): короткий текст показывается прямо в приложении

🧭 Маршрутизация и выходы

Категории block / direct / WARP / Opera с настраиваемым приоритетом, пресеты geosite/geoip с авто-загрузкой баз, выход через Cloudflare WARP (WireGuard) и бесплатный Opera VPN с выбором региона.

Полосы прокси — сколько угодно независимых выходов, у каждого свой набор socks5/http-апстримов и свои правила: зона .ru уходит через один, .com — через другой. Внутри полосы — балансировка по живым (Observatory); полоса без живых прокси пропускается.

💳 Тарифы и оплата (опционально)

Тарифные планы: цена, срок, лимиты трафика и устройств. Цена 0 — бесплатный тариф: не истекает, а квота обнуляется каждый срок. Есть пробный период, бесплатный тариф-фоллбэк для истёкших, продление, отмена и перенос всех пользователей с выводимого тарифа.

Приём платежей: ЮКасса (карты) и CryptoBot (крипта в Telegram) — клиент выбирает тариф в боте или на странице подписки, платит, тариф включается сам. Подтверждение идёт двумя путями — мгновенный вебхук (с проверкой подписи) и поллинг как страховка, если вебхук не дошёл; обработка идемпотентна. Без провайдеров работает ручной режим: админ подтверждает оплату сам.

👥 Доступ, роли и аудит

Несколько администраторов с ролями-лестницей: владелец (может всё, включая список админов; он один и неудаляем), администратор (всё, кроме списка админов), оператор (пользователи, статистика и журнал — без настроек, бэкапов и API). Новому сотруднику выдаётся временный пароль, который он обязан сменить при первом входе. Права проверяются на сервере на каждом запросе, а не скрытием кнопок.

Журнал пользователей — всё, что происходило с пользователем, и кто это сделал: создание, лимиты, тариф, оплаты, ротация ссылки, удаление, а также системные события (истёк срок, кончился трафик). У каждой записи есть автор: админ, API-ключ, Telegram-бот, сам пользователь или система. Журнал переживает удаление пользователя.

Журнал администраторов (виден только владельцу) — что делали с самой панелью: входы и неудачные попытки входа с IP, состав администраторов, изменения настроек, скачивание бэкапа, восстановление, сброс к заводским. Пишется только успешное действие, и никогда — тела запросов: токены и ключи в журнал не утекают.

Оба журнала хранятся 90 дней.

🤖 Интеграции

Админ-бот в Telegram: управление пользователями, назначение тарифа, QR-подписка, бэкапы по расписанию и уведомления о событиях (регистрации, истечения, сбой Xray, оплаты, проблемы с сертификатом). Пользовательский бот — саморегистрация клиентов, личное меню с подпиской и статистикой, покупка тарифа.

REST API для управления панелью из своих систем: именованные ключи (Authorization: Bearer), свой стабильный адрес, OpenAPI-спека из кода и Swagger UI. Вебхуки — панель сама шлёт подписанные HMAC-SHA256 события на ваши адреса, с ретраями. Подробности — в docs/api.md.

🎨 Брендинг и тема

Своё название и логотип вместо «РосПанели» — и в панели, и на странице подписки. Редактор цветовой схемы: один акцентный цвет перекрашивает весь интерфейс, а полноценная тёмная тема сама подстраивает текст, статусы и графики под светлоту фона.

🧰 Эксплуатация и безопасность

Диагностика одной кнопкой: процесс Xray, применение конфига, срок TLS-сертификата, место на диске, свежесть geo-баз, состояние выходов — каждая проверка с подсказкой, что делать. Отдельная проверка подключения отвечает на вопрос, которого нет в обычной диагностике: панель сама подключается к каждому протоколу как настоящий клиент и убеждается, что трафик реально проходит наружу — ловит рассинхрон учёток, TLS или ALPN раньше, чем на них наткнётся пользователь. Бэкап / восстановление и сброс к заводским — из панели и из CLI; логи с ротацией и просмотрщиком.

Обновление из GitHub Releases одной командой: панель сверяет SHA256 нового бинарника, прогоняет его вхолостую, снимает бэкап данных и только потом подменяет себя, сохраняя предыдущую версию рядом. Версия Xray-core зафиксирована и ставится самой панелью, а упавшее ядро супервизор поднимает обратно сам.

Секреты в БД зашифрованы (AES-GCM): токены ботов, приватные ключи WARP/REALITY, пароли пользователей. Токены сессий и API-ключи в базе не хранятся вообще — только их хэши, поэтому даже увидев таблицу, подставить чужую сессию нельзя. Чувствительные операции (подтверждение оплаты, управление администраторами) требуют повторного ввода пароля — украденной куки мало. Исходящие запросы защищены от SSRF, а перебор на SOCKS/HTTP-инбаунде банится по iptables.


🛠️ CLI

rospanel                     запустить панель (обычно через systemd)
rospanel install             установить systemd-сервис и запустить (root)
rospanel uninstall [-y]      снять сервис (данные сохраняются)
rospanel start|stop|restart  управление сервисом
rospanel status              статус сервиса
rospanel update [-y]         обновиться до последнего релиза с GitHub
rospanel backup [файл]       снапшот .tar.gz (БД + ключ шифрования + сертификаты + конфиг Xray)
rospanel restore [-y] <файл> восстановить из снапшота (применится при старте)
rospanel host [-y] [домен|IP] показать/сменить адрес (перевыпуск TLS)
rospanel path                показать URL панели и проверить secrets.key / БД
rospanel reset [-y]          сброс к заводским настройкам (стирает БД)
rospanel version             версия
rospanel help                полная справка

Деструктивные команды (reset, restore, host, uninstall) спрашивают подтверждение; флаг -y его пропускает.


🧱 Архитектура

Единственный источник правды — SQLite; конфиг Xray всегда генерируется из неё и применяется супервизором. Веб-панель встроена в бинарник.

cmd/rospanel/        запуск сервера + CLI (main / service / cli)
internal/
  model/             доменные типы (User, Settings, RoutingConfig, …)
  store/             SQLite + миграции
  auth/              argon2id, секреты/токены, сессии
  actor/             кто выполняет действие (едет в context) — для журнала аудита
  datasec/           шифрование секретов в БД (AES-GCM, ключ secrets.key)
  netguard/          SSRF-safe HTTP (валидация исходящих URL)
  tlsmgr/ tlsutil/   ACME (Let's Encrypt / ZeroSSL) + self-signed
  decoy/             сайт-заглушка (шаблоны)
  geo/               geoip.dat / geosite.dat
  hop/               nftables port-hopping (Hysteria2)
  xray/              типизированный конфиг + генератор + supervisor + stats
  warp/              Cloudflare WARP (WireGuard outbound)
  opera/             хелпер Opera VPN (загрузка бинаря + supervisor)
  proxypool/         пул прокси + health-check (Observatory)
  proxyproto/        PROXY-протокол листенер (реальный IP клиента)
  logbuf/            кольцевой лог-буфер + ротация в файл
  link/ sub/         сборка ссылок и подписок
  backup/            tar.gz снапшоты
  updater/           обновление из GitHub
  sysstat/ netinfo/  метрики хоста + определение публичного IP
  tuning/            включение TCP BBR
  core/              сервисный слой (reconcile, квоты, тарифы, TLS, трафик, роутинг)
  server/            маскировка-роутер + API + rate-limit + step-up-аутентификация
web/                 React + Vite + Tailwind (встраивается через go:embed)
install.sh           установщик: релизный бинарь + systemd-юнит (`rospanel install`)

Стек: Go 1.26 · Xray-core · SQLite (modernc, без CGO) · React + Vite + Tailwind.


⚠️ Дисклеймер

Программное обеспечение предоставляется «как есть» (as is), без каких-либо гарантий, явных или подразумеваемых.

Назначение проекта — образовательное и исследовательское. Он создан для изучения принципов работы сетевых протоколов, TLS и прокси-технологий; для проведения CTF-соревнований и лабораторных работ по сетевой безопасности; для авторизованного тестирования на проникновение и для управления собственной инфраструктурой. Это учебный и исследовательский инструмент, а не средство для какой-либо противоправной деятельности.

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

Всю ответственность за установку, настройку и эксплуатацию, а также за соблюдение законов своей юрисдикции несёт оператор сервера. Авторы и контрибьюторы проекта не несут ответственности за способы его использования третьими лицами.


🧑‍💻 Разработка

# фронтенд (после изменений в web/)
npm --prefix web install
npm --prefix web run build      # → web/dist (вшивается в бинарник)

# бинарник
go build -o rospanel ./cmd/rospanel
./rospanel

Полезные переменные окружения (все опциональны): ROSPANEL_DATA (каталог данных), ROSPANEL_ADMIN_ADDR (loopback-адрес панели, по умолчанию 127.0.0.1:8080), XRAY_BIN, ROSPANEL_HOST, ROSPANEL_ACME_EMAIL.

Защита от флуда (нафтабл-лимиты на публичных TCP-портах, см. «Эксплуатация») тоже настраивается через окружение — пригодится, если за одним IP сидит целый офис или CGNAT-оператор и клиенты упираются в дефолты:

Переменная Что делает
ROSPANEL_CONNLIMIT=off Полностью выключает лимиты (правила nftables сносятся)
ROSPANEL_CONNLIMIT_MAX Максимум одновременных TCP-соединений с одного IP
ROSPANEL_CONNLIMIT_RATE Максимум новых соединений с одного IP в секунду

Текущее состояние защиты видно в Дашборд → Управление → Диагностика: если nftables не установлен или панель работает не от root, правила молча не применятся — диагностика об этом скажет.

PR и issue приветствуются. Коммиты — в стиле Conventional Commits: на их основе release-please собирает релиз и публикует бинарь + Docker-образ в GHCR.


💝 Поддержать проект

РосПанель развивается в свободное время и распространяется бесплатно. Если панель оказалась полезной — можно поддержать разработку.

Удобнее всего — через DonationAlerts или Boosty (картой РФ, разово или регулярно). Либо донатом в USDT — выберите удобную сеть и внимательно скопируйте адрес (сеть отправителя и получателя должны совпадать):

Сеть Токен Адрес
TRC20 (Tron) USDT TJwyrPVEZVZ1YrcmDiZTyFjLo3Q2DmEGzs
ERC20 (Ethereum) USDT 0xf9d663146ce902da91911b214c71cc73a5269d1d
Solana USDT 2qAZRTbaUMTfYuZbD1dCYHjkYgxkw4dUYE9XY3JhC2Cs
TON USDT UQDoat731MLYuIw8ayL3Vhhw7zTBbLvRaQFmDvab--CNNI7e

Если у вас тоже Bybit — проще всего перевести по UID (мгновенно и без комиссии):

Биржа UID
Bybit 136462734

Дешевле всего комиссия в сетях TRON (TRC20) и TON. Отправляйте только USDT и только в указанной сети — перевод по неверной сети невозвратен.

Спасибо за поддержку! 🙏

Нет возможности поддержать?

Если поддержать проект напрямую не получается — вы всё равно можете помочь, арендуя серверы по этим реферальным ссылкам:


📄 Лицензия

GNU Affero General Public License v3.0 (AGPL-3.0).

Проект свободен для использования, изменения и self-hosting. Если вы предоставляете доступ к изменённой версии панели по сети (в т.ч. как сервис), вы обязаны открыть исходный код своих изменений на тех же условиях.

Packages

 
 
 

Contributors