Перейти к содержанию

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 ConfigConfig.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, проверяет порты.

python3 scripts/commission_servers.py --server <IP>

Подробнее: Деплой 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

Мониторинг всех сервисов.

./scripts/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.

python3 scripts/collect-abuser-snapshots-v3.py

↑ К навигации


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

./scripts/setup-whitelist-proxy.sh <proxy-ip> <upstream-ip:port>

Связано: Добавление WL-сервера

↑ К навигации


backup-mysql.sh

Исходник: backup-mysql.sh

./scripts/backup-mysql.sh
# Сохраняет в ~/shivavpn-backups/mysql/

Связано: Бэкап и восстановление

↑ К навигации


Дополнительные скрипты

Диагностика пользователей

Скрипт Описание Пример
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
ssh -p 2255 root@212.70.189.60 "crontab -l"

Архивные скрипты

scripts/archive/ (~45 файлов) — заменены VPN Config Service или новыми версиями. Не использовать.


См. также