- C# 66.2%
- Vue 25.2%
- TypeScript 6.3%
- CSS 1.4%
- Shell 0.6%
- Other 0.3%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| backend | ||
| deploy | ||
| frontend | ||
| socks-egress | ||
| .editorconfig | ||
| .gitignore | ||
| README.md | ||
CaviCodeVPN Core
Ядро платформы CaviCodeVPN — управление пользователями, подписками, SOCKS5 прокси, панель администрирования и Plugin API.
Компоненты
| Директория | Назначение |
|---|---|
backend/ |
C# .NET 8 — Controller API, Plugin API, фоновые сервисы, сбор метрик |
frontend/ |
Vue 3 — панель управления (дашборд, пользователи, логи, плагины, настройки, вики) |
socks-egress/ |
C# .NET 8 — SOCKS5 прокси (RFC1928/1929, CONNECT/UDP ASSOCIATE), валидация учётных данных, server-side policy, учёт трафика |
deploy/ |
Docker Compose и примеры конфигурации |
Быстрый старт
cd deploy
cp .env.example .env
docker compose up -d
- Панель управления: http://localhost:8080
- API: http://localhost:3005
- SOCKS5 прокси: localhost:1080
При первом запуске откроется мастер настройки:
- Шаг 1 — создание учётной записи администратора
- Шаг 2 — настройка сервера (пароль БД, JWT, Egress, метрики). Можно пропустить.
После создания первого администратора маршрут /setup закрывается и перенаправляет в обычный вход.
Панель управления
- Дашборд — метрики CPU/RAM/сеть/диск с графиками, статистика Egress, активные соединения
- Пользователи — создание пользователей, управление подписками и логинами вида
ИмяПользователя-ИмяПодписки - Клиентские фильтры — профили bypass/selective правил и генерация конфигураций подписок через traffic-плагины
- Логи — запросы, соединения Gateway, системные логи контейнеров
- Плагины — установка из Git URL, настройка через iframe UI, обновление из Git/Docker registry, перезапуск, логи контейнеров
- Настройки — параметры сервера (JWT, Egress, метрики, пароль БД) через web-интерфейс
- Админы — управление администраторами (Owner/Admin/Viewer) и 2FA через TOTP-приложения
- API Ключи — ключи для внешних интеграций (Telegram-боты и т.д.)
- Вики — встроенная документация (API, развёртывание, плагины)
Плагины
Core работает самостоятельно как SOCKS5-прокси с биллингом. Плагины устанавливаются через панель управления (Плагины → Установка) указав Git URL репозитория. Core автоматически клонирует репозиторий и запускает Docker Compose или одиночный Dockerfile плагина. Compose-плагины могут использовать готовые образы из registry через CaviCodeVPN_PLUGIN_IMAGE_PREFIX.
Установленные плагины настраиваются через Плагины → карточка плагина → Настройки. При сохранении настроек они синхронизируются в .env файл плагина. Кнопка обновления выполняет git pull --ff-only, docker compose pull для compose-плагинов и затем пересоздаёт контейнеры с актуальными images. При перезапуске плагина контейнеры пересоздаются с обновлёнными переменными окружения.
Server-side страховка Egress
При генерации клиентской конфигурации Core сохраняет выбранный профиль клиентских фильтров на подписке. SOCKS5 Egress получает вместе с credentials egressPolicy и до исходящего TCP CONNECT или UDP datagram блокирует домены и CIDR из профиля. Это не заменяет клиентский bypass в TOML, а страхует от устаревшего или вручную изменённого клиентского конфига: запрещённый destination не выходит наружу с IP VPN-сервера.
При блокировке Egress возвращает SOCKS5 reply 0x02 (connection not allowed by ruleset) и пишет событие в application logs контейнера. Расширение UI request logs отдельными полями решения и причины блока пока не включено в схему БД.
Связанные репозитории
| Репозиторий | Назначение |
|---|---|
| CaviCodeVPN-Plugin-TT | Плагин маскировки через TrustTunnel (Gateway + TT endpoint + сайт прикрытия + ACME) |
| CaviCodeVPN-Plugin-UserSync | Плагин P2P синхронизации пользователей между нодами |
| CaviCodeVPN-Desktop | Avalonia VPN-клиент для Linux/Windows |
Стек
- Backend: C# .NET 8, ASP.NET Core Minimal API, EF Core + Npgsql, JWT/ApiKey/PluginToken аутентификация, BCrypt, TOTP 2FA, TimescaleDB
- Frontend: Vue 3, TypeScript, Vite, Pinia, Canvas-графики, ANSI-цветные логи
- Egress: C# .NET 8, RFC1928+RFC1929 SOCKS5, CONNECT/UDP ASSOCIATE, pull-кеш учётных данных и policy
- БД: PostgreSQL 16 + TimescaleDB
- Инфра: Docker Compose, прямой монтаж docker.sock, Let's Encrypt ACME (в плагинах)
Развёртывание в продакшн
cd deploy
cp .env.example .env
# Отредактируйте .env (пароль БД) или настройте через мастер в браузере
docker compose up -d
По умолчанию Core images берутся из git.dsvinka.ru/cavicode/*. Для локальной сборки используйте deploy/scripts/dev-up.sh.
Пароль PostgreSQL можно задать:
- В
.envфайле перед запуском - Через мастер настройки в браузере (автоматически обновит
.envи перезапустит контейнер)
Подробнее — в Wiki панели управления (раздел «Развёртывание»).