Remnawave v2.2.0

Remnawave v2.2.0

kastov

Свежее обновление Remnawave состоит из множества новых функций и улучшений, не обошлось и без исправления некоторых найденных багов.

В этой небольшой статье пройдемся по ключевым изменениям, на которые стоит обратить внимание после обновления.

Внешние сквады (External Squads)

Итак, в версии 2.0 ( релиз которой был 29-ого июля) появились Внутренние Сквады (Internal Squads), название само по себе подразумевает, что должны быть так же и внешение сквады, которые будут направлены на переопределение настроек, которые получаются пользователи.

В то время как внутренние сквады больше направлены на внутреннее использование, внешение сквады имеют полностью противоположный эффект.

Многие задавались вопросом – как для определенного пользователя или определенной группы пользователей изменить некоторые параметры подписки, которую эти пользователи получают? Например, для 5 пользователей из 500 хотелось бы отдавать другой роутинг или другое анонс-сообщение (которые настраиваются в разделе Subscription - Settings). Так как один пользователь мог иметь несколько внутренних сквадов – эти настройки даже в теории невозможно было бы добавить во внутренние сквады. Собственно – для этого и нужны внешние сквады. У одного пользователя может быть активен только один внешний сквад, а уже в настройках внешнего сквада вы можете настроить (а лучше сказать переопределить) некоторые параметры подписки. В частности – изменить шаблон на основе которого генерируется подписка или изменить другие настройки.

Собственно, подводя небольшой итог: у внешних сквадов одна цель – переопределять некоторые параметры подписки, которую получают пользователи.

Шаблоны подписок (Subscription Templates)

В прошлых версиях у вас мог быть только один шаблон для каждого типа подписки.

Например, для всех клиентских приложений, у которых под капотом ядро Mihomo – у вас был один единый шаблон, что могло вызывать некоторые трудности, когда для разных пользователей или разных устройств требовались различные конфигурации, которые отличались в мелочах.

В новой версии мы изменили подход, теперь у нас есть строгое фиксированные типы клиентских шаблонов: MIHOMO, XRAY JSON, CLASH, STASH и SING BOX. (Внимательные пользователи могли заметить здесь отсутствие типа SingBox Legacy – о нем чуть дальше, продолжайте чтение).

Как вы видите, для конкретного типа шаблона – в данном случае Xray Json, мы создали множество разных шаблонов. Теперь мы можем их использовать например при настройке одного из внешних сквадов или в Редакторе Правил Ответов (Response Rules).

Правила ответов (Response Rules)

В прошлых версиях Remnawave самостоятельно определял каким клиентским приложениям какую подписку выдавать (на основе User Agent Remnawave определял к какому типу принадлежит клиентское приложение – Mihomo, Xray, и тд).

Этот раздел был полностью переработан, и теперь Remnawave позволяет максимально гибко и удобно настраивать этот момент.

Кастомизация правил ответов существует и в других панелях, но настолько гибкой настройки – вы не встретите нигде, кроме Remnawave.

С виду – это обычная JSON конфигурация, однако из-за большого количества опций и вариантов запоминать параметры на память было бы сложно и неудобно.

В нашем редакторе (который на скриншотах) вы можете навестись курсором на любой объект, на любое значение и вы получите описание этого обьекта, а в некоторых случаях еще и примеры использования. Само собой, при таких раскладах так же и доступна полная поддержка "дописывания", просто начните вводить и редактор вам подскажет какие поля и обьекты здесь разрешены, а какие – нет.

С помощью этого редактора перед вами открывается огромное количество возможностей, ради которых раньше приходилось неудобно настраивать конфигурацию реверс-прокси. Например, вы хотите полностью заблокировать доступ к подпискам, если клиент использует приложение Sing-box – теперь это довольно просто сделать, требуется лишь добавить одно правило в список.

Для демонстрации всей мощи этого функционала, приведу небольшой пример.

Определенное правило

На скриншоте вы можете заметить кастомное правило, которое у меня получилось добавить буквально за 5 минут. Расскажу, что здесь происходит.

Цель: выдавать шаблон подписки Happ Android (тип Xray Json) только для приложения Happ и только если запрос пришел с Android, а так же дополнительный добавить в ответ хедер.

Следовательно, в голове мы можем построить такую логическую цепочку: если запрос пришел от приложения Happ и с платформы Android, необходимо переопределить шаблон, а так же добавить хедер.

В обьект responseModifications.subscriptionTemplate мы прописали наш существующий шаблон (в разделе "Шаблоны Подписок"), а чуть ниже добавили хедер, которые получит клиент при запросе подписки.

Самое замечательное, что все, что вы видите на скриншоте уже полностью провалидировано, в том числе название шаблона, который мы переопределили.

Этот список шаблонов был получен в реальном времени на основе тех, которые у вас уже имеются. В данном случае были получены все шаблоны для типа Xray Json (XRAY_JSON), так как тип ответа (в обьекте чуть выше) выбран как XRAY_JSON.

И это лишь маленькая часть того, как гибко можно настроить этот раздел. Различные варианта сравнений (от простого равно до регулярных выражений), разное комбинирование условий в рамках правила (AND, OR).

Понятное дело, что тестирование такого функционала может привести к крайне печальным последствиям для вашей production-среды – поэтому был так же добавлен отдельный "режим" – отладчик. С его помощью вы можете БЕЗ ПРИМЕНЕНИЯ изменений в редакторе получить строчку, которую вы можете импортировать в такие приложения как Postman, Insomnia и увидеть, какой тип ответа будет использован, и под какое правило попал ваш запрос.

Нажмите на три полоски рядом с кнопкой сохранить и выберите опцию Debugger

Процесс может выглядеть вот так: в редакторе собираете правила (пока что не сохраняете!), вызываете отладчик (он в реальном времени возьмет текущее содержимое вашего редактора) и выдаст команду. Копируете, одним кликом добавляете в Insomnia или другое приложение.

При использовании Hoppscotch некоторые хедеры мы не можем передать, так как запрос иницируется с браузера, следовательно User-Agent мы переопределить не можем. Рекомендуется использовать Postman или Insomnia.

Как вы видите на скриншоте, мой запрос (так как он не содержит каких-то особых хедеров клиентских приложений) попал в fallback-правило (в редакторе оно внизу).

Само собой, редактор правил полностью поддерживает функционал подгрузки публичных шаблонов.

Чтобы другие пользователи могли загрузить ваш кастомный шаблон – не забудьте отправить PR в наш репозиторий шаблонов: https://github.com/remnawave/templates

Важная заметка касательно этого раздела: если вы переопределяете шаблон ответов (и при этом пользователь находится во внешем скваде, в котором тоже переопределен шаблон) – у SRR (так я называю "Правила ответов") будет наисвыший приоритет.

Сниппеты для Профилей (Snippets for Config Profiles)

Напомню, что профилем в контексте Remnawave является серверная конфигурация ядра Xray, которую вы создаете в панели, а после этого она попадает на ваши ноды.

Так вот, профили так же получили небольшой буст, который позволяет вам создавать небольшие "сниппеты", которые вы можете потом использовать в любом из профилей.

На данный момент сниппеты поддерживаются только для обьектов outbounds и routing.rules.

Например, у вас есть несколько профилей – допустим 10 штук, в каждом из 10 штук раздел роутинга у вас одинаковый и вы бы хотели быстро и удобно заменить правила во всех профилях сразу. Раньше бы вам пришлось ручками пройтись по каждому профилю и изменить его, что может повлечь за собой ошибки из-за усталости или невнимательности.

С функционалом сниппетов вам будет достаточно изменить "правило" или "правила" в одном месте, а потом они автоматически подтянутся в профили.

Для примера создадим простой сниппет, который, я думаю, вы довольно часто используете. В нем буквально одно правило – если IP попадает в категорию geoip:private – отправляем в outbound BLOCK.

После создания мы легко и просто можем указать сниппет уже в реальном обьекте правил. И естественно, присутствует полная поддержка подсказок – начните вводить и перед вами списком появяется все ваши существующие сниппеты. А если вы наведетесь на них – так же отобразится превью содержимого.

Настройки Remnawave

Некоторые настройки, которые раньше конфигурировались через .env файл и для применения изменений требовали полный перезапуск панели переехали в свой собственный раздел уже внутри панели. Никаких больше перезапусках при изменении логотипа!

Внимательный читатель мог так же заметить, что раздел API токены тоже переехал

Многие .env переменные теперь игнорируются и вы можете безопасно их удалить из содержимого .env файла и настроить соотвествующие функции внутри панели.

Полный список больше не нужных .env переменных:

TELEGRAM_OAUTH_ENABLED
TELEGRAM_OAUTH_ADMIN_IDS
OAUTH2_GITHUB_ENABLED
OAUTH2_GITHUB_CLIENT_ID
OAUTH2_GITHUB_CLIENT_SECRET
OAUTH2_GITHUB_ALLOWED_EMAILS
OAUTH2_POCKETID_ENABLED
OAUTH2_POCKETID_CLIENT_ID
OAUTH2_POCKETID_CLIENT_SECRET
OAUTH2_POCKETID_ALLOWED_EMAILS
OAUTH2_POCKETID_PLAIN_DOMAIN
OAUTH2_YANDEX_ENABLED
OAUTH2_YANDEX_CLIENT_ID
OAUTH2_YANDEX_CLIENT_SECRET
OAUTH2_YANDEX_ALLOWED_EMAILS
BRANDING_LOGO_URL
BRANDING_TITLE

Благодаря этому был так же добавлен функционал быстрого изменения способов входа – и опять же – без необходимости перезапускать панель! Настройки брендирования станут намного удобнее, ведь любые изменения будут видны моментально.

Вход с помощью ключей входа (Passkey)

А так же, благодаря тому, что часть настроек переехала в панель – вы теперь с легкостью можете добавить ваш ключ входа и входить в панель без ввода каких-либо паролей или использования сторонних средств (по типу Telegram, Github).

Добавление ключа входа
Вход с помощью ключа входа

При желании вы можете даже отключить вход по паролю и комбинировать разные метода входа в любых сочетаниях. На скриншоте как раз пример – включен только метод входа с помощью ключа входа, все остальные методы аутентификации отключены.

Прочие изменение и исправления ошибок

  • Перечисление SNI в Хосте через запятые (sni-1.com,sni-2.com,sni-3.com) – если SNI перечислены в таком формате – Remnawave при запросе подписки будет выбирать случайное значение из предоставленного списка
  • Получение уведомлений и вебхуков для пользователей, которые не подключались определенный срок – включается через .env переменные. По умолчанию эта опция выключена.
### Not connected users notification (webhook, telegram)
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED=false
# Only in ASC order (example: [6, 12, 24]), must be valid array of integer(min: 1, max: 168) numbers. No more than 3 values.
# Each value represents HOURS passed after user creation (user.createdAt)
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS=[6, 24, 48]
  • Некоторые элементы внутри панели получили редизайн (frontend)
  • Изменена логика обновления пользователя (метод patch – /api/users/)
  • Исправлена ошибка при которой изменение внутренного сквада пользователя могло не удалить пользователя с нод, к которым после изменение сквада у пользователя не должно быть доступа
  • Исправлена ошибка при которой кастомное поле Server Description (Host) могло не передаваться в Xray Json подписку
  • Оптимизация модальных окон (frontend)
  • Добавлен 400 код ошибки в документацию OpenAPI (backend)
  • Общие изменения некоторых компонентов для стандартизации визуальной части панели (frontend)

Переводы

Отдельно хочу выразить благодарность тем, кто принимает активное участие в переводе Remnawave на другие языки!

Try Remnawave

Свежее обновление уже доступно для тестирования на сайте: https://try.tg

С момента запуска TryRemnawave было задеплоено 247 инстансов панели и я считаю это отличным достижением! Спасибо!

Как обновиться?

Перед обновлением не забудьте сделать бекап. Вы можете воспользоваться одним из инструментов, представленных здесь: https://remna.st/docs/awesome-remnawave#backup-restore

Обновиться, как и всегда, можно командой:

cd /opt/remnawave && docker compose pull remnawave && docker compose down && docker compose up -d

Перед обновлением убедитесь, что сторонние сервисы, которые могут использовать API Remnawave поддерживают новую версию. Уточнить эту информацию вы можете в чатах проектов, которые используете.

Актуальную документацию API вы можете посмотреть здесь: https://remna.st/api

Полезные ссылки

Быть в курсе новостей: https://t.me/remnalog

Поговорить о чем угодно (флудилка, оффтоп): https://t.me/+RE36-TXEXjRkYmE6

Поговорить о панели или спросить совета: https://t.me/+xQs17zMzwCY1NzYy

Подписаться на канал: https://t.me/remnawave

Поддержать Remnawave: https://remna.st/donate

Поделиться идеей или сообщить о баге: https://hub.remna.st



Report Page