rospanel

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2026 License: AGPL-3.0

README

РосПанель

РосПанель

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

Go Xray-core React Platform Deploy



Что это

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

Главное отличие от Marzban / 3x-ui — радикальная простота: вся панель это один статический бинарник (фронтенд вшит через go:embed), без Docker-обвязки, без внешней БД, без отдельного веб-сервера. Поставил, открыл, добавил юзера.

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


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

🔐 Протоколы (один Xray-конфиг, один набор учёток)
  • VLESS-Vision — TCP/443 + uTLS-fingerprint
  • Trojan-WS — через fallback на 443
  • Hysteria2 — UDP с port-hopping
  • VLESS-gRPC-REALITY — отдельный порт, маскировка под чужой TLS
🎭 Маскировка
  • Панель спрятана за секретным путём
  • Любой другой путь отдаёт сайт-заглушку — сервер неотличим от обычного хостинга
  • 11 готовых шаблонов заглушек
🔑 TLS из коробки
  • ACME: Let's Encrypt и ZeroSSL
  • Self-signed fallback, пока не выпустится настоящий сертификат
  • Авто-продление
🧭 Маршрутизация и выходы
  • Категории block / direct / proxy / WARP / Opera с настраиваемым приоритетом
  • geosite/geoip пресеты (авто-загрузка баз)
  • Cloudflare WARP (WireGuard) — выход через WARP по правилам
  • Opera VPN — бесплатный выход с выбором региона (Европа / Азия / Америка)
  • Прокси — список из URL или вручную, балансировка по живым (Observatory)
📊 Пользователи и статистика
  • Лимиты трафика и срок действия с авто-отключением, авто-сброс (день/неделя/месяц/год)
  • Учёт трафика через Xray Stats API, онлайн-статус, IP подключений
  • Дашборд: CPU / RAM / swap / диск / сеть / VPN-трафик в реальном времени, аптайм
📲 Подписки
  • /<путь>/<токен> — base64-список + страница с QR и deep-links
  • Кнопки импорта в популярные VPN-клиенты
  • Авто-роутинг-заголовки (Happ / INCY / Mihomo)
🧰 Эксплуатация
  • Бэкап / восстановление и сброс к заводским — из дашборда и из CLI
  • Логи приложения с ротацией + просмотрщик прямо в панели
  • Брутфорс-защита: бан по iptables за перебор на SOCKS/HTTP-инбаунде
  • Обновление из GitHub Releases (rospanel update)
  • Режим прокси: socks/http forward-inbound для цепочек РосПанель↔РосПанель

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

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

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

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

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

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>/ форму логина не найти.


🖥️ Скриншоты (Mock)


Дашборд — ресурсы сервера, VPN-трафик и статус выходов в реальном времени


Пользователи — лимиты, срок действия, онлайн-статус, ссылка на подписку


Подключения — настроийка протоколов


Маршрутизация — порядок выходов (proxy / WARP / Opera / direct), geosite/geoip-правила,прокси


🛠️ 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 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, секреты/токены, сессии
  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
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.

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


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

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

Удобнее всего — через 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. Если вы предоставляете доступ к изменённой версии панели по сети (в т.ч. как сервис), вы обязаны открыть исходный код своих изменений на тех же условиях.

Directories

Path Synopsis
cmd
rospanel command
Command rospanel is the RosPanel VPN panel: boot the store, obtain a Let's Encrypt cert (domain or IP), generate the Xray config, and serve the admin API + the masquerade/subscription surface.
Command rospanel is the RosPanel VPN panel: boot the store, obtain a Let's Encrypt cert (domain or IP), generate the Xray config, and serve the admin API + the masquerade/subscription surface.
internal
auth
Package auth provides password hashing (Argon2id), random secret generation, and constant-time helpers used by the panel's authentication and masquerade.
Package auth provides password hashing (Argon2id), random secret generation, and constant-time helpers used by the panel's authentication and masquerade.
backup
Package backup creates and restores tar.gz snapshots of the data directory (SQLite DB, certs, generated config, ACME account).
Package backup creates and restores tar.gz snapshots of the data directory (SQLite DB, certs, generated config, ACME account).
core
Package core ties the store and the Xray supervisor together: mutations go through it so the proxy config is reconciled from the DB after every change.
Package core ties the store and the Xray supervisor together: mutations go through it so the proxy config is reconciled from the DB after every change.
decoy
Package decoy serves an innocent-looking website ("заглушка") for every request that doesn't carry the secret panel path.
Package decoy serves an innocent-looking website ("заглушка") for every request that doesn't carry the secret panel path.
geo
Package geo manages the geoip.dat / geosite.dat databases Xray needs to resolve geosite:/geoip: routing rules.
Package geo manages the geoip.dat / geosite.dat databases Xray needs to resolve geosite:/geoip: routing rules.
hop
Package hop manages Hysteria2 UDP port-hopping via host NAT.
Package hop manages Hysteria2 UDP port-hopping via host NAT.
link
Package link builds client share-links from a user + settings.
Package link builds client share-links from a user + settings.
logbuf
Package logbuf captures the panel's own log output into an in-memory ring buffer and fans new lines out to live subscribers (the dashboard log viewer).
Package logbuf captures the panel's own log output into an in-memory ring buffer and fans new lines out to live subscribers (the dashboard log viewer).
model
Package model holds the core domain types shared across the panel.
Package model holds the core domain types shared across the panel.
netinfo
Package netinfo resolves the server's own public IP, used for unattended first-boot host configuration and the post-factory-reset redirect.
Package netinfo resolves the server's own public IP, used for unattended first-boot host configuration and the post-factory-reset redirect.
opera
Package opera manages the opera-proxy helper binary: a standalone Opera VPN client that exposes a local HTTP proxy.
Package opera manages the opera-proxy helper binary: a standalone Opera VPN client that exposes a local HTTP proxy.
proxypool
Package proxypool fetches and parses outbound proxy lists for the proxy-pool egress: free public lists or a manually-entered set, one "scheme://[user:pass@]host:port" per line.
Package proxypool fetches and parses outbound proxy lists for the proxy-pool egress: free public lists or a manually-entered set, one "scheme://[user:pass@]host:port" per line.
proxyproto
Package proxyproto provides a net.Listener that reads an optional PROXY-protocol v1 header (the text format Xray emits with xver=1) from each accepted connection and exposes the real client address via RemoteAddr.
Package proxyproto provides a net.Listener that reads an optional PROXY-protocol v1 header (the text format Xray emits with xver=1) from each accepted connection and exposes the real client address via RemoteAddr.
server
Package server implements the public-facing masquerade router and the hidden admin panel mounted under the secret path.
Package server implements the public-facing masquerade router and the hidden admin panel mounted under the secret path.
store
Package store is the SQLite-backed persistence layer.
Package store is the SQLite-backed persistence layer.
sub
Package sub builds the per-user subscription: the machine payload consumed by VPN clients and the human-facing page (QR + one-tap import buttons).
Package sub builds the per-user subscription: the machine payload consumed by VPN clients and the human-facing page (QR + one-tap import buttons).
sysstat
Package sysstat samples host metrics (CPU, memory, swap, disk, network) from /proc on Linux.
Package sysstat samples host metrics (CPU, memory, swap, disk, network) from /proc on Linux.
tlsmgr
Package tlsmgr obtains the TLS certificate via ACME (Let's Encrypt) for a domain or an IP address.
Package tlsmgr obtains the TLS certificate via ACME (Let's Encrypt) for a domain or an IP address.
tuning
Package tuning applies host-level network optimizations recommended for an Xray server — currently enabling the TCP BBR congestion-control algorithm, which noticeably improves throughput on lossy/long-haul links.
Package tuning applies host-level network optimizations recommended for an Xray server — currently enabling the TCP BBR congestion-control algorithm, which noticeably improves throughput on lossy/long-haul links.
updater
Package updater self-updates the panel binary from its GitHub Releases: it finds the latest release, downloads the matching asset, verifies its SHA-256 against the release's SHA256SUMS BEFORE the binary is ever executed or swapped in, then atomically replaces the running executable (keeping a .bak for rollback).
Package updater self-updates the panel binary from its GitHub Releases: it finds the latest release, downloads the matching asset, verifies its SHA-256 against the release's SHA256SUMS BEFORE the binary is ever executed or swapped in, then atomically replaces the running executable (keeping a .bak for rollback).
version
Package version exposes the panel's release version.
Package version exposes the panel's release version.
warp
Package warp registers a free Cloudflare WARP account and returns the WireGuard parameters Xray needs to use it as an outbound.
Package warp registers a free Cloudflare WARP account and returns the WireGuard parameters Xray needs to use it as an outbound.
xray
Package xray models the Xray-core config as typed Go structs (so field-name mistakes are compile errors) and supervises the Xray child process.
Package xray models the Xray-core config as typed Go structs (so field-name mistakes are compile errors) and supervises the Xray child process.
Package webui embeds the built React SPA (web/dist) into the Go binary.
Package webui embeds the built React SPA (web/dist) into the Go binary.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL