rospanel

module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 16, 2026 License: AGPL-3.0

README

РосПанель

РосПанель

Self-hosted панель управления VPN на Xray-core — от одного личного сервера до сети нод.

Release Go Xray-core React Platform Deploy

Что это · Где взять сервер · Быстрый старт · Возможности · CLI · Архитектура · Дисклеймер · Разработка · Поддержать


Что это

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

Самодостаточна: один статический бинарник — ни nginx, ни certbot, ни сторонних скриптов. TLS панель выпускает себе сама через ACME, а домен не обязателен: сертификат встанет и на голый IP. Панель открывается по своему адресу сразу после установки — без DNS, без reverse-proxy и без SSH-туннелей. Конфиг Xray генерируется из состояния панели (JSON руками не трогаете), пользователи добавляются и удаляются на лету без обрыва чужих подключений, а при повреждении БД панель сама поднимается из последнего бэкапа.

[!NOTE] Это панель управления (control plane), а не VPN-клиент. Она настраивает и обслуживает ваш собственный сервер. Назначение — образовательное и исследовательское (см. Дисклеймер).


🖥️ Где взять сервер

Панели хватит самого дешёвого VPS: 1 vCPU, 1 ГБ RAM, любой Linux — этого достаточно и для панели, и для Xray на десятки пользователей.

Если ещё не выбрали хостинг — зарегистрируйтесь по ссылкам ниже. Это бесплатный для вас способ поддержать проект: цена та же, а часть от аренды идёт на развитие панели.

VDSina · Aeza · NetGrid · Serv.host · u1Host · Waicore

Спасибо тем, кто регистрируется по этим ссылкам 🙏


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

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

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

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

Домен не обязателен. Скрипт спросит про него: есть домен — введите, нет — нажмите Enter, и панель поднимется на IP сервера. Сертификат Let's Encrypt она получит в обоих случаях: он выдаётся и на IP-адрес, никаких предупреждений в браузере не будет.

Домен можно задать заранее, тогда вопроса не будет: curl -Ls … | sudo ROSPANEL_HOST=vpn.example.com bash.

Вариант 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

[!NOTE] --network host нужен, чтобы Xray слушал 443/TCP, 80/TCP и UDP-порты Hysteria2 напрямую; NET_ADMIN — чтобы панель могла править правила фаервола: port-hopping и лимиты соединений (nftables), бан за перебор (iptables).

🔑 Вход по умолчанию
Поле Значение
Логин admin
Пароль admin
Путь панели /rospanel/

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

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

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

🌐 Добавить ноду

Нода — это чистый Ubuntu-сервер с тем же бинарником в режиме ноды: конфиг ей генерирует панель, отдельно настраивать нечего. Заводится всё из UI: Сервера → Добавить ноду, где нужно указать название и домен-или-IP ноды. Дальше — два способа на выбор.

Способ 1 — команда установки. Панель покажет готовую однострочную команду; выполните её на сервере ноды от root:

curl -Ls https://raw.githubusercontent.com/AppsGanin/rospanel/main/install.sh \
  | sudo bash -s -- --join 'https://<панель>/<node-api-path>/v1/join#<токен>'

Копируйте команду целиком из диалога — и адрес, и токен в ней подставляются автоматически. Токен показывается один раз и живёт 24 часа; <node-api-path> — отдельный неугадываемый сегмент для синка нод (не путь панели и не путь REST API: смена любого из них не отвяжет ноды). Если панель работает на голом IP (сертификат не от публичного CA), панель сама добавит в команду --insecure.

Способ 2 — установка по SSH. Вкладка «Установить по SSH» в том же диалоге: панель сама зайдёт на сервер (адрес, порт, пользователь + пароль или приватный ключ PEM), зальёт свой бинарник и поставит агента — лог установки идёт вживую. Версия ноды гарантированно совпадёт с версией панели. Данные SSH нигде не сохраняются.

Через несколько секунд после установки нода появится в списке как онлайн: она сама стучится к панели исходящим HTTPS, поэтому входящий доступ к ней панели не нужен и пробрасывать ничего не требуется.

systemctl status rospanel-node        # сервис ноды
journalctl -u rospanel-node -f        # лог агента
rospanel node status                  # локальный статус

[!NOTE] Один сервер — либо панель, либо нода: они делят 443-й порт. Если на машине уже стоит сервис панели, node install его выключит.


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

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

Один конфиг, один набор учёток: VLESS-Vision (TCP/443 + uTLS), Trojan-WS (fallback на 443), Hysteria2 (UDP + port-hopping), VLESS-gRPC-REALITY (маскировка под чужой TLS). Панель спрятана за секретным путём, любой другой путь отдаёт сайт-заглушку (11 шаблонов). TLS из коробки — ACME (Let's Encrypt / ZeroSSL) с авто-продлением; сертификат можно выпустить и на голый IP, без домена и DNS.

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

Лимиты трафика и срок с авто-отключением и авто-сбросом квоты (день/неделя/месяц/год), лимит устройств по уникальным IP. Учёт трафика через Xray Stats, онлайн-статус, список подключений; истёкших можно авто-удалять. Поиск и фильтры не тормозят на сотнях юзеров, а групповые операции (вкл/выкл/сброс/продление/удаление) идут одной перезагрузкой 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-апстримы и правила по зонам с балансировкой по живым (Observatory).

🌐 Сеть серверов (мультинода)

Одна панель управляет мастером и любым числом удалённых нод. Сервер добавляется из UI: копируете одну команду для чистого Ubuntu или даёте панели зайти по SSH и поставить агента — лог установки идёт вживую. Нода сама стучится к панели (исходящий HTTPS long-poll), поэтому панели не нужен доступ к нодам, а её переезд ноды не отвязывает. Пользователи, лимиты и тарифы раскатываются на все ноды; трафик и устройства считаются в общие лимиты.

Каждый сервер настраивается отдельно (протоколы, выходы, DNS, ключи REALITY, домен и TLS, geo-базы, заглушка). Нода — тот же бинарник в режиме ноды: конфиг ей генерирует панель, локальный xray -test с откатом страхует от несовместимости версий, обновление идёт из UI со сверкой SHA256.

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

Планы: цена, срок, лимиты трафика и устройств; цена 0 — бесплатный тариф. Есть пробный период, бесплатный тариф-фоллбэк для истёкших, продление и перенос пользователей. Приём платежей — провайдеры на выбор: ЮКасса, PayPalych, RioPay, RollyPay, SeverPay, Platega, PayPear, AuraPay (карты, СБП, ₽), CryptoBot и Heleket (крипта). Клиент платит в боте или на странице подписки — тариф включается сам. Подтверждает вебхук (подпись проверяется), поллинг страхует, если вебхук не дошёл; обработка идемпотентна, сумма сверяется с заказом. Без провайдеров оплату подтверждает админ.

[!WARNING] Провайдеры оплаты пока не проверены на боевых аккаунтах. Если вы подключили какой-то из них — пожалуйста, сообщите в issue, работает он или нет (какой провайдер, что получилось, что сломалось). Это поможет отметить проверенные провайдеры и починить остальные.

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

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

🤖 Интеграции

Админ-бот в Telegram: управление юзерами, тарифы, QR-подписка, бэкапы по расписанию, уведомления о событиях (регистрации, истечения, сбой Xray, оплаты, сертификат). Клиентский бот: саморегистрация, личное меню с подпиской и статистикой, покупка тарифа. REST API с именованными ключами (Authorization: Bearer), OpenAPI из кода и Swagger UI; вебхуки шлют подписанные HMAC-SHA256 события с ретраями. Подробнее — docs/api.md.

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

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

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

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

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

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


🛠️ 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 его пропускает.

Режим ноды

Тот же бинарник умеет работать как управляемая панелью нода. Команду install подставляет диалог «Добавить ноду» в панели — руками её обычно набирать не нужно.

rospanel node install --join '<url>'   присоединиться к панели и поставить сервис (root)
rospanel node run                       агент ноды (точка входа systemd)
rospanel node set-panel <url>           переключить ноду на новый адрес панели
rospanel node status                    локальный статус ноды
rospanel node uninstall [-y]            снять сервис ноды (данные сохраняются)

--join берётся из диалога добавления ноды; токен в нём одноразовый и живёт 24 часа. Как завести ноду от начала до конца — 🌐 Добавить ноду.


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

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

Стек: 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.

Защита от флуда (nftables-лимиты на публичных 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. Выберите сеть и внимательно скопируйте адрес — сеть отправителя и получателя должны совпадать. Отправляйте только USDT и только в указанной сети: перевод по неверной сети невозвратен. Дешевле всего комиссия в TRON (TRC20) и TON.

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

Bybit. Если у вас тоже Bybit — переводом по UID 136462734: мгновенно и без комиссии.

Нет возможности поддержать деньгами? Тоже можно помочь — арендуйте серверы по реферальным ссылкам из раздела Где взять сервер. Вам это ничего не стоит, а проекту помогает.


📄 Лицензия

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
actor
Package actor carries WHO is performing an action across layer boundaries.
Package actor carries WHO is performing an action across layer boundaries.
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.
autobackup
Package autobackup runs scheduled local backups of the data directory.
Package autobackup runs scheduled local backups of the data directory.
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).
branding
Package branding holds the configurable panel identity: display name, accent colour and logo.
Package branding holds the configurable panel identity: display name, accent colour and logo.
connguard
Package connguard installs host-level nftables rules that cap, per source IP, both the number of concurrent TCP connections and the rate of new connections to the public proxy ports.
Package connguard installs host-level nftables rules that cap, per source IP, both the number of concurrent TCP connections and the rate of new connections to the public proxy ports.
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.
cron
Package cron is a minimal standard 5-field cron parser/matcher (minute, hour, day-of-month, month, day-of-week).
Package cron is a minimal standard 5-field cron parser/matcher (minute, hour, day-of-month, month, day-of-week).
datasec
Package datasec provides at-rest encryption for secrets stored in SQLite.
Package datasec provides at-rest encryption for secrets stored in SQLite.
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.
netguard
Package netguard provides SSRF-safe outbound HTTP helpers.
Package netguard provides SSRF-safe outbound HTTP helpers.
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.
nodeagent
Package nodeagent runs the panel-managed node: it holds an outbound long-poll to the panel, applies the Xray config the panel pushes, and reports traffic back.
Package nodeagent runs the panel-managed node: it holds an outbound long-poll to the panel, applies the Xray config the panel pushes, and reports traffic back.
nodeapi
Package nodeapi defines the wire contract between the panel and a node agent.
Package nodeapi defines the wire contract between the panel and a node agent.
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.
payments
Package payments is the payment-provider registry: one Descriptor per provider (see registry.go), each wrapping that provider's HTTP API behind a Client — create a payment for an order, query its status (the polling fallback), and authenticate a webhook.
Package payments is the payment-provider registry: one Descriptor per provider (see registry.go), each wrapping that provider's HTTP API behind a Client — create a payment for an order, query its status (the polling fallback), and authenticate a webhook.
provision
Package provision installs a RosPanel node on a remote server over SSH, so the operator can add a node from the panel UI without touching a terminal.
Package provision installs a RosPanel node on a remote server over SSH, so the operator can add a node from the panel UI without touching a terminal.
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.
selftest
Package selftest answers the question a health page can't: not "is Xray running?" but "does a client actually get through?".
Package selftest answers the question a health page can't: not "is Xray running?" but "does a client actually get through?".
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.
telegram
Package telegram is a self-contained Telegram Bot API client plus the panel's admin bot: it long-polls for commands (view/add/remove users) and pushes scheduled backups to the linked admin chat.
Package telegram is a self-contained Telegram Bot API client plus the panel's admin bot: it long-polls for commands (view/add/remove users) and pushes scheduled backups to the linked admin chat.
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.
tlsutil
Package tlsutil handles low-level X.509 certificates: generating the self-signed cert used as the internal pre-ACME fallback, reading certificate metadata for display, computing SHA-256 pins, and writing key pairs to disk.
Package tlsutil handles low-level X.509 certificates: generating the self-signed cert used as the internal pre-ACME fallback, reading certificate metadata for display, computing SHA-256 pins, and writing key pairs to disk.
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