DevOps скрипты¶
Каталог скриптов для управления инфраструктурой ShivaVPN.
Репозиторий: vpn/docs (каталог scripts/)
Требования: клон monorepo + SSH-ключи (Доступы) + credentials (Vaultwarden)
Ограничения для L2
Скрипты с пометкой ⚠️ L3 запускать только по согласованию с DevOps Lead.
Быстрая навигация¶
Диагностика аккаунтов¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| audit_account.py · ↓ | Полный аудит аккаунта (MySQL + VPN + VUSA + devices + логи) | L2 |
| check_backend_configs.py · ↓ | Что бэкенд API отдаёт юзеру | L2 |
| check_panel_configs.py · ↓ | Что на XUI панелях для юзера | L2 |
| verify_user_configs.py · ↓ | Полнота конфигов (MySQL vs XRAY) | L2 |
| check_users_on_vpn.py · ↓ | Проверить пользователей на VPN серверах | L2 |
| find_orphan_accounts.py · ↓ | Найти аккаунты без VPN конфигов | L2 |
| audit_configs.py · ↓ | Аудит VPN конфигураций на серверах | L2 |
Проверка серверов¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| check_vpn_server.py · ↓ | Полная проверка VPN сервера (10 проверок) | L2 |
| verify_all_layers.py · ↓ | 4-слойная верификация MySQL↔VCS↔XUI↔Configs | ⚠️ L3 |
| verify_transport_params.py · ↓ | Проверка Reality параметров MySQL vs XUI SQLite | L2 |
| server-inspect.sh · ↓ | Инспекция сервера (диск, docker, порты) | L2 |
Управление серверами¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| commission_servers.py · ↓ | Ввод/вывод серверов | ⚠️ L3 |
| create_inbound.py · ↓ | Создание дополнительного inbound на сервере | ⚠️ L3 |
Инвентарь и мониторинг¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| infrastructure.py · ↓ | Python-библиотека работы с Ansible inventory | L2 |
| inventory_reconcile.py · ↓ | Аудит Ansible ↔ MySQL ↔ VCS | L2 |
| kuma-sync.py · ↓ | Синхронизация Uptime Kuma | L2 |
| health-monitor.sh · ↓ | Мониторинг всех сервисов | L2 |
| sentry_check.py · ↓ | Проверка Sentry | L2 |
SSH и доступ¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| ssh-internal.sh · ↓ | SSH к внутренней сети через jump host | L2 |
| ssh-helpers.sh · ↓ | Алиасы для быстрого доступа | L2 |
| quick-access.sh · ↓ | Быстрые команды | L2 |
| test_vpn_ssh_access.py · ↓ | Тест SSH к VPN серверам | L2 |
Abuse и трафик¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| find_tcp_abusers.py · ↓ | Поиск абьюзеров по TCP сессиям (realtime) | L2 |
| collect-abuser-snapshots-v3.py · ↓ | Сбор realtime снэпшотов абьюзеров | ⚠️ L3 |
| analyze_traffic_patterns.py · ↓ | Анализ паттернов трафика | L2 |
Whitelist прокси¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| audit_wl_proxies.py · ↓ | Аудит WL прокси — MySQL vs nftables | L2 |
| setup-whitelist-proxy.sh · ↓ | Настройка нового WL proxy | ⚠️ L3 |
| setup-subscription-proxy.sh · ↓ | Настройка subscription proxy | ⚠️ L3 |
Бэкап и утилиты¶
| Скрипт | Что делает | Уровень |
|---|---|---|
| backup-mysql.sh · ↓ | Бэкап MySQL | L2 |
| devops-tools.sh · ↓ | Интерактивное DevOps меню | L2 |
| update-repos.sh · ↓ | Обновление локальных репо | L2 |
| monitor-deletions.sh · ↓ | Мониторинг операций удаления | L2 |
Конфигурация¶
Все скрипты читают credentials из Vaultwarden автоматически через конфиг-модули.
Python: from config import Config → Config.MYSQL_HOST, Config.BACKEND_HOST, etc.
Shell: source ./scripts/config.sh → $SHIVA_MYSQL_HOST, $SHIVA_BACKEND_HOST, etc.
Файл credentials/CREDENTIALS.md должен существовать в monorepo (git-ignored).
Детальное описание¶
audit_account.py¶
Исходник: audit_account.py
Главный диагностический инструмент. Проверяет аккаунт на всех уровнях.
Исходник: audit_account.py на GitLab
python3 scripts/audit_account.py 1234567890123456
python3 scripts/audit_account.py 1234567890123456 --hours 48 # логи за 48ч
Что проверяет: статус в MySQL · конфиги на VPN серверах (VUSA) · кэш в VPN Config Service · устройства (Redis) · backend логи
Когда: пользователь не подключается, нет конфигов, пропали дни подписки.
check_backend_configs.py¶
Исходник: check_backend_configs.py
Эмулирует запрос пользователя к API: логинится с deviceId из Redis, получает конфиги, показывает VLESS-ссылки.
python3 scripts/check_backend_configs.py 1234567890123456
python3 scripts/check_backend_configs.py 1234567890123456 austria # конкретная страна
Когда: юзер видит меньше серверов, конфиги не обновляются.
check_panel_configs.py¶
Исходник: check_panel_configs.py
Ходит на X-UI панели (HTTP:33081 + HTTPS:2053 fallback), показывает конфиги клиента, Reality параметры, WL proxy ссылки.
python3 scripts/check_panel_configs.py 1234567890123456
python3 scripts/check_panel_configs.py 1234567890123456 146.70.35.202 # конкретный сервер
Когда: расхождение между MySQL и реальным сервером.
verify_user_configs.py¶
Исходник: verify_user_configs.py
Проверяет полноту конфигов (MySQL VUSA vs реальные XRAY).
python3 scripts/verify_user_configs.py 1234567890123456 # один аккаунт
python3 scripts/verify_user_configs.py --all # все активные (долго!)
check_vpn_server.py¶
Исходник: check_vpn_server.py
10 автоматических проверок: SSH, диск, Docker, порты, БД, API, inbounds, клиенты, дубликаты, тест add/delete.
python3 scripts/check_vpn_server.py 146.70.35.202 # один сервер
python3 scripts/check_vpn_server.py --all # все активные
python3 scripts/check_vpn_server.py --all --include-inactive
python3 scripts/check_vpn_server.py --list # список из inventory
Когда: после деплоя, при жалобах на сервер.
verify_all_layers.py ⚠️ L3¶
Исходник: verify_all_layers.py
18 проверок целостности: MySQL ↔ VCS (PostgreSQL) ↔ XUI панели ↔ конфиги.
Запускается на backend-сервере, не локально
cat scripts/verify_all_layers.py | ./scripts/ssh-internal.sh 10.99.87.249 \
'cat > /tmp/verify.py && python3 /tmp/verify.py'
verify_transport_params.py¶
Исходник: verify_transport_params.py
MySQL transport_params vs X-UI SQLite. Reality поля: publicKey, shortId, serverName, network, security.
python3 scripts/verify_transport_params.py # все серверы
python3 scripts/verify_transport_params.py vpn-monovm-at-01 # конкретный
python3 scripts/verify_transport_params.py --json # машиночитаемый
commission_servers.py ⚠️ L3¶
Исходник: commission_servers.py
Ввод/вывод VPN серверов. Создаёт inbound'ы, настраивает sysctl, проверяет порты.
Подробнее: Деплой VPN-сервера.
create_inbound.py ⚠️ L3¶
Исходник: create_inbound.py
Создание дополнительного inbound на существующем сервере.
python3 scripts/create_inbound.py --server IP --port 8443 --dest ozon.ru
python3 scripts/create_inbound.py --server IP --port 10443 --dest eh.vk.com:443 --fingerprint qq # stealth
infrastructure.py¶
Исходник: infrastructure.py
Python-библиотека для программного доступа к Ansible inventory.
from infrastructure import Infrastructure
infra = Infrastructure()
servers = infra.get_active_vpn_servers() # все активные VPN
backend = infra.get_backend_ip() # 10.99.87.249
inventory_reconcile.py¶
Исходник: inventory_reconcile.py
Аудит Ansible ↔ MySQL ↔ VPN Config Service. Находит расхождения.
python3 scripts/inventory_reconcile.py # аудит + рекомендации
python3 scripts/inventory_reconcile.py --stats # статистика
python3 scripts/inventory_reconcile.py --fix # применить фиксы (с подтверждением)
kuma-sync.py¶
Исходник: kuma-sync.py
Синхронизация мониторов Uptime Kuma с серверным инвентарём.
python3 scripts/kuma-sync.py diff # показать расхождения
python3 scripts/kuma-sync.py sync # добавить недостающие мониторы
python3 scripts/kuma-sync.py sync --remove # + удалить устаревшие
python3 scripts/kuma-sync.py list # все VPN мониторы
ssh-internal.sh¶
Исходник: ssh-internal.sh
Основной инструмент доступа к серверам 10.99.87.x через jump host.
./scripts/ssh-internal.sh 10.99.87.249 # интерактивная сессия
./scripts/ssh-internal.sh 10.99.87.249 "docker ps" # команда
./scripts/ssh-internal.sh 10.99.87.62 "docker exec vpn-db mysql ..." # MySQL
Подробнее: Доступы и SSH.
health-monitor.sh¶
Исходник: health-monitor.sh
Мониторинг всех сервисов.
sentry_check.py¶
Исходник: sentry_check.py
python3 scripts/sentry_check.py health # быстрый health
python3 scripts/sentry_check.py full # полная проверка
find_tcp_abusers.py¶
Исходник: find_tcp_abusers.py
Поиск абьюзеров по TCP сессиям в реальном времени.
python3 scripts/find_tcp_abusers.py # дефолт: >50 TCP сессий
python3 scripts/find_tcp_abusers.py --min-tcp 20 # порог 20
collect-abuser-snapshots-v3.py ⚠️ L3¶
Исходник: collect-abuser-snapshots-v3.py
Сбор realtime-данных абьюзеров в MySQL.
audit_wl_proxies.py¶
Исходник: audit_wl_proxies.py
Сравнивает MySQL записи с реальной конфигурацией nftables и Reality параметрами.
python3 scripts/audit_wl_proxies.py # все прокси
python3 scripts/audit_wl_proxies.py 90.156.219.233 # конкретный
python3 scripts/audit_wl_proxies.py --check-params # + проверка Reality
python3 scripts/audit_wl_proxies.py --fix # применить фиксы
Связано: WL proxy не работает · Whitelist архитектура
setup-whitelist-proxy.sh ⚠️ L3¶
Исходник: setup-whitelist-proxy.sh
Связано: Добавление WL-сервера
backup-mysql.sh¶
Исходник: backup-mysql.sh
Связано: Бэкап и восстановление
Дополнительные скрипты¶
Диагностика пользователей¶
| Скрипт | Описание | Пример |
|---|---|---|
check_users_on_vpn.py |
Проверить пользователей на VPN серверах | python3 scripts/check_users_on_vpn.py |
find_orphan_accounts.py |
Найти аккаунты без VPN конфигов | python3 scripts/find_orphan_accounts.py |
audit_configs.py |
Аудит VPN конфигураций | python3 scripts/audit_configs.py |
Серверы и inbounds¶
| Скрипт | Описание | Пример |
|---|---|---|
collect_inbounds.sh |
Собрать inbound'ы со всех серверов | ./scripts/collect_inbounds.sh |
collect_stream_settings.sh |
Собрать stream settings | ./scripts/collect_stream_settings.sh |
find_expiry_discrepancies.py |
Расхождения expiryTime MySQL vs X-UI | python3 scripts/find_expiry_discrepancies.py |
server-inspect.sh |
Инспекция сервера | ./scripts/server-inspect.sh <ip> |
renew-hiddify-ssl.sh |
Обновление SSL Hiddify панелей | ./scripts/renew-hiddify-ssl.sh |
SSH¶
| Скрипт | Описание | Пример |
|---|---|---|
ssh-helpers.sh |
Алиасы (source в .zshrc) | source ./scripts/ssh-helpers.sh |
quick-access.sh |
Быстрые команды | source ./scripts/quick-access.sh |
test_vpn_ssh_access.py |
Тест SSH к VPN серверам | python3 scripts/test_vpn_ssh_access.py |
Abuse¶
| Скрипт | Описание | Пример |
|---|---|---|
analyze_traffic_patterns.py |
Анализ паттернов трафика | python3 scripts/analyze_traffic_patterns.py |
Subscription ⚠️ L3¶
| Скрипт | Описание | Пример |
|---|---|---|
setup-subscription-proxy.sh |
Настройка subscription proxy | ./scripts/setup-subscription-proxy.sh |
Поддержка и аналитика¶
| Скрипт | Описание | Пример |
|---|---|---|
analyze_support_tickets.py |
Анализ тикетов | python3 scripts/analyze_support_tickets.py |
parse_support_topics.py |
Парсинг тем | python3 scripts/parse_support_topics.py |
vpn_speed_test.py |
Тест скорости VPN через XRAY SOCKS5 | python3 scripts/vpn_speed_test.py |
Мониторинг¶
| Скрипт | Описание | Пример |
|---|---|---|
monitor-deletions.sh |
Мониторинг удалений | ./scripts/monitor-deletions.sh |
Утилиты¶
| Скрипт | Описание | Пример |
|---|---|---|
devops-tools.sh |
Интерактивное DevOps меню | source ./scripts/devops-tools.sh |
update-repos.sh |
Обновление локальных репо | ./scripts/update-repos.sh |
archive-old-docs.sh |
Архивация старых документов | ./scripts/archive-old-docs.sh |
Диагностика для пользователей¶
В каталоге diagnostic/ monorepo — скрипты для пользователей:
| Скрипт | Платформа | Назначение |
|---|---|---|
diagnostic_script_macos.sh |
macOS | Сеть, DNS, VPN порты |
diagnostic_script_russia.sh |
Linux | Блокировки РКН |
shiva-diagnostic-windows.ps1 |
Windows | Основная диагностика |
shiva-diagnostic.cmd |
Windows | Обёртка для PowerShell |
shivavpn-whitelist-diagnostic.ps1 |
Windows | Диагностика whitelist |
Скрипты на jump host (212.70.189.60)¶
| Путь | Описание | Cron |
|---|---|---|
/root/scripts/api-health-monitor.sh |
Health check API | каждую минуту |
/root/scripts/vpn-tools/dedupe_all_servers.py |
Дедупликация X-UI | ежедневно 03:00 |
Архивные скрипты¶
scripts/archive/ (~45 файлов) — заменены VPN Config Service или новыми версиями. Не использовать.
См. также¶
- Доступы и SSH · Runbooks · Ansible · Репозитории
- VPN Config Service · Навигация по проблемам
- Полный каталог в monorepo:
scripts/README.md