Зачем это писалось

Если вы когда‑нибудь раздавали друзьям или клиентам ссылки на VPN‑конфиги или мелкие VPN‑подписки вручную — знаете боль: один провайдер отвалился, у другого поменялся адрес, третий нужно временно скрыть, а у пользователя должна остаться одна‑единственная «подписка» (URL), которая всегда отдаёт актуальный список серверов. V2Hub — это попытка закрыть эту задачу целиком: не просто прокси‑агрегатор, а полноценная экосистема из API, вебки, CLI, Telegram‑бота и админки.

Уточню сразу: сервис не создаёт VPN‑конфигурации. Про то, как поднять VPN‑сервер вручную, можно почитать на vless.wiki. V2Hub лишь позволяет управлять готовыми подписками и конфигурациями — агрегировать, скрывать, комментировать, резолвить и раздавать их одной ссылкой.

Репозиторий

Где потрогать руками

Роль

v2hub‑api

https://v2hub.link

Ядро — FastAPI‑сервис, который агрегирует и резолвит подписки

v2hub‑core

https://pypi.org/project/v2hub

Python‑библиотека со всеми основными методами для управления своими подписками

v2hub‑admin

https://pypi.org/project/v2hub‑admin

Дополнительный модуль: административный функционал (HMAC‑аутентификация, CRUD пользователей)

v2hub‑cli

https://pypi.org/project/v2hub‑cli

Терминальный клиент на Typer/Rich

v2hub‑panel

https://panel.v2hub.link

Веб‑панель для управления подписками (FastAPI + vanilla JS)

v2hub‑bot

https://t.me/v2hubot

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‑компании.

Ссылки

Лицензии разнятся по репозиториям (например, API — Apache-2.0, панель — GPL-3.0), так что перед использованием в коммерческих целях стоит свериться с конкретным репозиторием.