2026-05-27 07:44:30 +00:00
2026-05-27 06:18:32 +00:00
2026-05-27 07:44:30 +00:00

remnawave-path-rotator

Скрипт для автоматической ротации xHTTP-пути в панели Remnawave.
Меняет path по расписанию сразу в трёх местах через API панели.

Что меняется

Место API
Хост → Переопределения соединений (path) PATCH /api/hosts
Хост → xHttp Extra Params (xHttpExtraParams.path) PATCH /api/hosts
Профиль → config.inbounds[].xhttpSettings.path PATCH /api/config-profiles
Профиль → inbounds[].rawInbound.xhttpSettings.path PATCH /api/config-profiles

Все остальные параметры (mode, xPaddingKey, xPaddingHeader и др.) сохраняются.
Профили без xhttp inbound'ов (например, Reality/TCP) автоматически пропускаются.

Требования

  • Python 3.10+
  • Remnawave с включённым API токеном

Установка

git clone https://github.com/yourname/remnawave-path-rotator
cd remnawave-path-rotator
pip install -r requirements.txt

requirements.txt:

httpx>=0.27.0
apscheduler>=3.10.0

Настройка

Все параметры задаются через переменные окружения:

Переменная Описание По умолчанию
RW_PANEL_URL URL панели Remnawave
RW_API_TOKEN API токен (Settings → API Tokens)
RW_AUTH_COOKIE Куки TinyAuth/сессии (name=value)
RW_HOST_UUIDS UUID хостов через запятую (пусто = все) все
RW_PROFILE_UUIDS UUID профилей через запятую (пусто = все) все
RW_CRON_HOUR Часы для APScheduler (cron-синтаксис) */6
RW_CRON_MINUTE Минуты для APScheduler 0

Получение API токена

Панель → Settings → API Tokens → Create Token. Скопируй значение ey....

Получение куки TinyAuth

Если панель защищена TinyAuth — открой DevTools (F12) → Application → Cookies, найди куку и скопируй name=value.

Запуск

Однократно (для проверки)

export RW_PANEL_URL="https://your-panel.example.com"
export RW_API_TOKEN="eyJhbGci..."
export RW_AUTH_COOKIE="session=abc123"

python3 patch.py --once

По расписанию (встроенный scheduler)

python3 patch.py

Запустит ротацию сразу при старте, затем повторяет по расписанию (*/6 * * * * по умолчанию — каждые 6 часов).

Через системный cron

Если предпочитаешь cron без постоянно запущенного процесса:

crontab -e
0 */6 * * * cd /opt/remnawave-path-rotator && \
  RW_PANEL_URL=https://... \
  RW_API_TOKEN=eyJ... \
  RW_AUTH_COOKIE=name=value \
  python3 patch.py --once >> /var/log/rw_rotator.log 2>&1

Через .env файл

# .env
RW_PANEL_URL=https://your-panel.example.com
RW_API_TOKEN=eyJhbGci...
RW_AUTH_COOKIE=session=abc123
# RW_HOST_UUIDS=uuid1,uuid2       # опционально
# RW_PROFILE_UUIDS=uuid3          # опционально
# RW_CRON_HOUR=*/4                # опционально
set -a && source .env && set +a
python3 patch.py --once

Пример вывода

2026-05-27 10:30:20 [INFO] ═══ Начало ротации путей ═══
2026-05-27 10:30:20 [INFO] Новый путь: /cdn/relay/sync
2026-05-27 10:30:21 [INFO] Получено хостов: 2
2026-05-27 10:30:21 [INFO]   ✓ Хост [🇸🇪 AVR Швеция 1] → /cdn/relay/sync
2026-05-27 10:30:21 [INFO]   ✓ Хост [🇩🇪 AVR Германия] → /cdn/relay/sync
2026-05-27 10:30:21 [INFO] Получено профилей: 3
2026-05-27 10:30:22 [INFO]   ✓ Профиль [se cdn] → /cdn/relay/sync
2026-05-27 10:30:22 [INFO]   ✓ Профиль [fi cdn] → /cdn/relay/sync
2026-05-27 10:30:22 [INFO]   · Профиль [StealConfig] — xhttp inbound'ов нет, пропуск
2026-05-27 10:30:22 [INFO] ═══ Ротация завершена успешно (ошибок: 0) ═══

Генератор пути

Путь собирается из случайных слов технического словаря (~70 слов: api, cdn, relay, sync, grpc, mesh и др.). Количество сегментов — случайное от 2 до 5. Пример результатов:

/cdn/relay/sync
/grpc/auth/v2
/media/fetch/node/pipe
/proxy/stream

Словарь и длину можно изменить прямо в скрипте (WORD_POOL, PATH_MIN_SEGMENTS, PATH_MAX_SEGMENTS).

Лицензия

MIT

S
Description
Py3 script for generating and changing path in CDN strategy configs
Readme 48 KiB
Languages
Python 100%