V2Hub — экосистема сервисов для управления VPN‑подписками (V2Ray/Xray/VLESS/VMess/Trojan/Hysteria2)
Зачем это писалось
Если вы когда‑нибудь раздавали друзьям или клиентам ссылки на VPN‑конфиги или мелкие VPN‑подписки вручную — знаете боль: один провайдер отвалился, у другого поменялся адрес, третий нужно временно скрыть, а у пользователя должна остаться одна‑единственная «подписка» (URL), которая всегда отдаёт актуальный список серверов. V2Hub — это попытка закрыть эту задачу целиком: не просто прокси‑агрегатор, а полноценная экосистема из API, вебки, CLI, Telegram‑бота и админки.
Уточню сразу: сервис не создаёт VPN‑конфигурации. Про то, как поднять VPN‑сервер вручную, можно почитать на vless.wiki. V2Hub лишь позволяет управлять готовыми подписками и конфигурациями — агрегировать, скрывать, комментировать, резолвить и раздавать их одной ссылкой.
Репозиторий | Где потрогать руками | Роль |
Ядро — FastAPI‑сервис, который агрегирует и резолвит подписки | ||
Python‑библиотека со всеми основными методами для управления своими подписками | ||
Дополнительный модуль: административный функционал (HMAC‑аутентификация, CRUD пользователей) | ||
Терминальный клиент на Typer/Rich | ||
Веб‑панель для управления подписками (FastAPI + vanilla JS) | ||
Telegram‑бот для самообслуживания подписчиков |
Что умеет ядро — v2hub‑api
Это самый проработанный компонент, и на нём стоит остановиться подробнее.
Мульти‑источниковая агрегация. Подписка может собирать конфиги из трёх типов источников одновременно: прямые URI (vless://, vmess://, trojan://, ss:// и так далее), внешние подписочные URL другого провайдера, и внутренние ссылки на другие подписки внутри самой системы.
Рекурсивный резолвинг. Если подписка A ссылается на подписку B, которая ссылается на C — всё разворачивается в один плоский список при выдаче клиенту. При этом есть защита от циклических ссылок и настраиваемый лимит глубины вложенности (max_depth, по умолчанию 3).
Тонкая настройка на уровне источника. Каждый источник внутри подписки можно скрыть из финального вывода (is_hidden) без удаления, и добавить к нему собственный комментарий.
Кэширование в два уровня. Redis как быстрый L1-кэш плюс PostgreSQL как источник истины. Celery‑воркер обновляет внешние источники каждые 15 минут по расписанию (Celery beat), так что резолвинг конечному пользователю почти всегда отдаётся из кэша. В ближайших планах — заменить периодический воркер на ленивое (lazy) обновление подписок прямо в момент запроса пользователя.
Безопасность административного контура. Админ‑эндпоинты защищены не токеном, а HMAC‑SHA256 подписью запроса (timestamp + метод + путь + тело), плюс IP‑whitelist поверх этого. Отдельно реализован rate‑limiting на Redis со счётчиками по эндпоинтам и автоматический бан IP при накоплении нарушений.
Технологический стек ядра: FastAPI 0.136, SQLAlchemy 2.0 (async) + asyncpg, Pydantic 2.13, Celery 5.6, Alembic для миграций, Uvicorn + Nginx.
Панель, CLI, бот
v2hub‑panel — минималистичный веб‑интерфейс, позволяющий управлять подписками и источниками через браузер.
v2hub‑cli построен на Typer и Rich — управлять сервисами (создавать подписки, добавлять источники, гонять админ‑операции) можно прямо из терминала с приятным форматированным выводом.
v2hub‑bot — простой бот, суть которого — выдавать токены доступа. В него встроена v2hub‑panel в виде mini‑app для большего удобства.
Библиотеки на PyPI
v2hub — библиотека, которая содержит весь необходимый функционал для полноценной работы конечного пользователя с подписками.
v2hub‑admin — дополнение к основной библиотеке, отвечающее за CRUD пользователей, а также белые и чёрные списки.
Кому это может быть интересно
Тем, кто держит небольшой VPN‑сервис для себя/друзей/небольшой компании и хочет не городить это на коленке, а получить готовую инфраструктуру с мониторингом из коробки.
Тем, кто интересуется тем, как выглядит «production‑ready» FastAPI‑проект целиком: с миграциями, async ORM, HMAC‑аутентификацией, наблюдаемостью и CI/CD — вне зависимости от домена (VPN тут скорее повод, чем суть).
Разработчикам, которые хотят посмотреть пример рекурсивного резолвинга вложенных сущностей с защитой от циклов — паттерн, который переиспользуется далеко за пределами VPN‑тематики.
Будущее проекта
Если проект заинтересует людей и соберёт свой небольшой круг сообщества, мы продолжим его развивать. В конечном счёте цель — сделать V2Hub полноценной заменой Marzban API и 3x‑ui в части управления подпиской: инструментом, который смогут использовать не только энтузиасты и небольшие проекты, но и полноценные VPN‑компании.
Ссылки
Обзор экосистемы: nestthub/nestthub — ecosystems/v2hub
Ядро (API): nestthub/v2hub‑api
Общая логика: nestthub/v2hub‑core
Веб‑панель: nestthub/v2hub‑panel
CLI: nestthub/v2hub‑cli
Админ‑модуль: nestthub/v2hub‑admin
Telegram‑бот: nestthub/v2hub‑bot
Лицензии разнятся по репозиториям (например, API — Apache-2.0, панель — GPL-3.0), так что перед использованием в коммерческих целях стоит свериться с конкретным репозиторием.