Remnawave

Работа с Remnawave

Подключение, миграция пользователей, совместный режим с 3X-UI, аналитика трафика и режим NO LIMIT+.

Первичная настройка

💡
Remnawave — отдельная панель управления VPN-пользователями. Бот подключается к ней по API и управляет пользователями автоматически.

Шаг 1 — Установка панели Remnawave

Установите панель согласно официальной документации:

docs.rw — Remnawave Panel
⚠️
Subscription Page устанавливать не нужно. Бот использует собственную страницу подписки (SUBPAGE). Раздел Subscription Page из документации Remnawave пропустите.

Шаг 2 — Подключение к боту

После установки панели откройте Панели → Remnawave → Настройки и заполните блоки на этой странице:

  • 1Включите переключатель «Включить Remnawave» (remnawave_enabled).
  • 2В блоке «Подключение к панели»:
    remnawave_base_url URL панели, например https://panel.example.com
    remnawave_api_token API-токен из настроек панели Remnawave
  • 3В блоке «Новые пользователи и миграция»:
    remnawave_default_internal_squad_uuid UUID Squad (группы серверов) из панели Remnawave
    remnawave_default_traffic_limit_gb Лимит трафика по умолчанию в ГБ. 0 = безлимит
  • 4Отдельно: Настройки → Основные → Режим провайдера — выберите Remnawave (subscription_provider для новых пользователей).
  • 5Нажмите Сохранить на странице Remnawave. Бот начнёт создавать новых пользователей в Remnawave.
После сохранения можно проверить подключение — попробуйте выдать триал или создать тестового пользователя через бота.

Добавление и миграция

💡
Миграция выполняется в один клик через раздел веб-админки Инструменты → Миграция. Все данные берутся из базы данных бота — дополнительный экспорт не нужен.

Подготовка перед миграцией

  • 1Установите и полностью настройте панель Remnawave — добавьте серверы, настройте Squad, укажите API-токен в веб-админке.
  • 2Убедитесь, что параметр remnawave_default_traffic_limit_gb выставлен корректно — именно это значение будет присвоено каждому клиенту при миграции:
    Панели → Remnawave → Настройки
    remnawave_default_traffic_limit_gb = 0   # 0 = безлимит
    💡
    Значение используется при регистрации новых пользователей и при миграции. 0 означает безлимитный трафик.
  • 3 Рекомендуется остановить сервис бота на время миграции, чтобы исключить конфликты при одновременной обработке запросов:
    bash
    systemctl stop vpn-bot

Запуск миграции

  • 1Откройте веб-админку → Инструменты → Миграция.
  • 2Выберите направление миграции: в Remnawave.
  • 3Нажмите кнопку запуска — бот обработает всех пользователей из базы данных и создаст их в Remnawave с текущими сроками подписки.
  • 4После завершения миграции запустите бота обратно:
    bash
    systemctl start vpn-bot

После миграции

Все пользователи переходят на Remnawave. После миграции поле subscription_provider у каждого пользователя в базе данных меняется на remnawave. Все операции продления, выдачи подписки и управления устройствами теперь выполняются через Remnawave.
🔄
Если в боте остались настроенные серверы 3X-UI — они продолжают отдаваться в подписке вместе с серверами Remnawave. Это совместный режим по серверам: в подписке клиента присутствуют сервера обеих панелей одновременно.
📊
Ограничение трафика работает только в Remnawave — лимит задаётся через remnawave_default_traffic_limit_gb. На серверах 3X-UI ограничение трафика не предусмотрено.
⏭️
Пользователи, у которых UUID пустой, пропускаются. Пользователи, уже существующие в Remnawave, также пропускаются без ошибки.

Совместный режим с 3X-UI

💡
Совместный режим активируется автоматически, когда в боте одновременно настроены серверы 3X-UI и Remnawave. Оба набора серверов отдаются в подписке пользователя вместе.

Как это работает

📋
В подписке клиента одновременно присутствуют серверы из обеих панелей — Remnawave и 3X-UI. Клиентское приложение видит все серверы в одном списке.
🔄
Провайдер пользователя (subscription_provider) определяет, через какую панель выполняются операции: продление, управление устройствами, изменение лимитов. После миграции или при новой регистрации через Remnawave — это всегда Remnawave.
⚠️
Ограничение трафика работает только в Remnawave. Серверы 3X-UI не поддерживают лимит трафика — на них трафик не ограничивается.

Трафик закончился в Remnawave — что происходит

Это один из ключевых сценариев совместного режима. Когда пользователь расходует весь лимит трафика в Remnawave при активной подписке:

Серверы 3X-UI продолжают работать в штатном режиме — трафик через них не ограничен, подписка активна.
Серверы Remnawave перестают пропускать трафик — пользователь автоматически переключается на серверы 3X-UI (если клиентское приложение поддерживает автовыбор сервера).
Подписка не прерывается — пользователь продолжает пользоваться VPN через серверы 3X-UI до конца оплаченного периода или до пополнения трафика.
💡
Совместный режим позволяет использовать серверы 3X-UI как резервные — они автоматически подхватывают пользователей, у которых закончился трафик в Remnawave, без необходимости ручного вмешательства.

Зачем использовать совместный режим

Ограничение трафика
Remnawave контролирует объём трафика, 3X-UI — безлимитный резерв при исчерпании лимита.
Гео-разнообразие
Разные регионы и страны через разные панели в одной подписке.
Постепенный переезд
Перенос инфраструктуры без отключения пользователей — 3X-UI работает пока мигрируете.

Аналитика трафика

💡
При провайдере Remnawave трафик клиентов в веб-админке (таблица «Клиенты», карточка пользователя) собирается через node-traffic exporter — контейнер на сервере Remnawave, который раз в 10 минут читает Postgres и отправляет сжатый снимок на вебхук бота. Сервис analytics для 3X-UI при этом не используется.

Перед установкой — что должно быть готово

Экспортёр использует те же параметры, что уже прописаны в /opt/remnawave/.env (DATABASE_URL, WEBHOOK_URL, WEBHOOK_SECRET_HEADER). Дополнительно настраивать его конфиг не нужно — но сначала проверьте три пункта ниже.

  • 1Nginx на сервере бота — location для вебхука Remnawave (см. следующий блок).
  • 2Webhook в RemnawaveWEBHOOK_ENABLED, WEBHOOK_URL, WEBHOOK_SECRET_HEADER в /opt/remnawave/.env.
  • 3Веб-админка бота — включено «Принимать вебхуки от Remnawave» и заполнен «Секрет вебхука» (тот же 64-символьный ключ).

Шаг 1 — Location в Nginx (сервер бота)

Убедитесь, что в конфиге Nginx на сервере бота присутствует блок для вебхука Remnawave. Откройте конфиг:

bash
nano /etc/nginx/conf.d/xuiweb.conf

Найдите или добавьте следующий блок внутри секции server { }, перед закрывающей скобкой:

nginx
location /remnawave/webhook {
    proxy_pass http://127.0.0.1:8081/remnawave/webhook;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Content-Type $content_type;
    proxy_set_header Content-Length $content_length;
    proxy_read_timeout 30s;
    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;
}

Сохраните файл (Ctrl+OEnterCtrl+X) и перезагрузите Nginx:

bash
nginx -t && systemctl reload nginx

Шаг 2 — Настройка вебхука в Remnawave

На сервере с Remnawave откройте файл .env:

bash
cd /opt/remnawave
nano .env

Найдите блок # Webhook configuration и выставьте следующие значения:

.env
# Webhook configuration
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://бот.ваш-домен.ru/remnawave/webhook
### Секрет для подписи вебхука — 64 символа (a-z, 0-9, A-Z)
WEBHOOK_SECRET_HEADER=<ваш_секрет_64_символа>

Шаг 3 — Веб-админка бота

Откройте Панели → Remnawave → Настройки → блок «Вебхуки и NO LIMIT»:

  • 1Включите переключатель «Принимать вебхуки от Remnawave» (remnawave_webhook_enabled).
  • 2Заполните поле «Секрет вебхука» (remnawave_webhook_secret) — то же значение, что WEBHOOK_SECRET_HEADER в .env Remnawave. Сохраните страницу.
Если все три шага выполнены (Nginx, webhook в Remnawave, секрет в веб-админке) — для аналитики трафика больше ничего настраивать не нужно, кроме установки экспортёра на сервере Remnawave (следующий шаг). Не путайте с режимом NO LIMIT+: заполнение безлимитного сквада (remnawave_traffic_exhausted_squad_uuid) не обязательно, если вы не используете NO LIMIT+.

Шаг 4 — Установка экспортёра (сервер Remnawave)

На сервере с Remnawave выполните одну команду от root. Скрипт создаст каталог /opt/remnawave_node_exporter, скачает архив, соберёт Docker-контейнер и запустит его в сети Remnawave. Настройки читаются автоматически из /opt/remnawave/.env.

bash
curl -fsSL https://update.3xstore.ru/remnawave_node_exporter/install.sh | bash

Проверка логов после установки:

bash
cd /opt/remnawave_node_exporter && docker compose logs -f
⚠️
Важно. Если Nginx, webhook Remnawave и секрет в веб-админке уже настроены — или у вас полностью настроен режим NO LIMIT+никаких дополнительных действий не требуется, кроме установки скрипта экспортёра на сервере Remnawave командой выше.

Режим NO LIMIT+

💡
NO LIMIT+ — функция для тех, кто полностью перешёл на Remnawave и хочет ограничивать трафик на отдельных группах серверов. При исчерпании лимита бот автоматически переключает пользователя на безлимитный сквад, уведомляет его и сбрасывает счётчик трафика. При следующем продлении или докупке GB возвращается дефолтный сквад с лимитом.

Шаг 1 — Проверка и настройка Nginx

Убедитесь, что в конфиге Nginx на сервере бота присутствует блок для вебхука Remnawave. Откройте конфиг:

bash
nano /etc/nginx/conf.d/xuiweb.conf

Найдите или добавьте следующий блок внутри секции server { }, перед закрывающей скобкой:

nginx
location /remnawave/webhook {
    proxy_pass http://127.0.0.1:8081/remnawave/webhook;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Content-Type $content_type;
    proxy_set_header Content-Length $content_length;
    proxy_read_timeout 30s;
    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;
}

Сохраните файл (Ctrl+OEnterCtrl+X) и перезагрузите Nginx:

bash
nginx -t && systemctl reload nginx

Шаг 2 — Настройка вебхука в Remnawave

На сервере с Remnawave откройте файл .env:

bash
cd /opt/remnawave
nano .env

Найдите блок # Webhook configuration и выставьте следующие значения:

.env
# Webhook configuration
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://бот.ваш-домен.ru/remnawave/webhook
### Секрет для подписи вебхука — 64 символа (a-z, 0-9, A-Z)
WEBHOOK_SECRET_HEADER=<ваш_секрет_64_символа>
⚠️
Значение WEBHOOK_SECRET_HEADER должно быть ровно 64 символа из набора a-z, 0-9, A-Z. Это же значение укажите в Панели → Remnawave → Настройки → блок «Вебхуки и NO LIMIT» → поле remnawave_webhook_secret.

Шаг 3 — Настройка Squad и нод в панели Remnawave

  • 1Откройте панель Remnawave и найдите ноды, которые хотите сделать безлимитными.
  • 2В настройках каждой такой ноды установите коэффициент потребления = 0. Это критически важно — только ноды с коэффициентом 0 не тратят трафик пользователя.
    ⚠️
    Без коэффициента 0 трафик будет продолжать расходоваться даже в «безлимитном» скваде.
  • 3Создайте новый внутренний сквад (Internal Squad) и добавьте в него все ноды с коэффициентом 0. При желании можно добавить хосты-заглушки и включить их в этот же сквад.
  • 4Скопируйте UUID нового сквада — он понадобится на следующем шаге.

Шаг 4 — Настройка в веб-админке бота

Откройте Панели → Remnawave → Настройки → блок «Вебхуки и NO LIMIT»:

  • 1Включите «Принимать вебхуки от Remnawave» (remnawave_webhook_enabled), если вебхук настроен на панели.
  • 2Заполните поля ниже и сохраните страницу.
remnawave_webhook_secret Значение WEBHOOK_SECRET_HEADER из .env Remnawave
remnawave_traffic_exhausted_squad_uuid UUID безлимитного сквада (из шага 3). Можно несколько UUID через запятую

Как работает логика при исчерпании трафика

Remnawave отправляет вебхук боту о том, что трафик пользователя исчерпан.
Бот сбрасывает счётчик трафика пользователя до 0 и переключает его на безлимитный сквад.
Пользователь получает уведомление о том, что трафик закончился и доступ переключён на безлимитные серверы.
При следующем продлении подписки (дни) или докупке GB — пользователь возвращается на дефолтный сквад с лимитом трафика.

Важные нюансы

⚠️
Клиенты с уже исчерпанным трафиком. Если у вас уже есть пользователи с нулевым трафиком — добавьте им хотя бы 1 GB через массовые операции. Это необходимо для корректного срабатывания логики вебхука.
💡
Ручное продление через веб-админку. Продление дней (не GB) через веб-админку возвращает пользователя в дефолтный сквад. Будьте внимательны — только продление днями триггерит возврат, докупка GB — тоже, но простое изменение без оплаты — нет.