# Remnawave Panel v2.2.0

**URL:** https://f.docs.rw/t/topic/173
**Category:** Panel
**Tags:** stable
**Created:** 2025-10-25T21:00:00Z
**Posts:** 1

## Post 1 by @remnawave — 2025-10-25T21:00:00Z

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/e535de4046ae3c4bbfa14625d9a29719256f7425.jpeg)

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/cd66685d46e295b09e1f7ff311bc4d02bca5ac32.jpeg)

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

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

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/85ae6d00f04a1e1cd102b5c4951cd1fe7c68043f.jpeg)

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/eeb0a6b0df990267c37ab97a2d4f32988066d8c7.jpeg)

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

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

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/ac2c6dd8cfcc9c81f448d6f7dfab4dbf867b8b6d.jpeg)

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/75f12e6adb496cbd93542c967e7f0659b03d2a25.jpeg)

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

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

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

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/cbcce9283909df2f145168323767f54b8d3a0e31.jpeg)

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/621d3f13308fac9736a328fafac42f282eeb6f12.jpeg)

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/1e78f5dd369ec31609e0901fc6912ad1c7b9e73b.jpeg)

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

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

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

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/26085c77f8dbdd29ed37f3498c48ea4a8fb44ab8.jpeg)

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

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

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

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

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

 ![](https://f.docs.rw/uploads/default/original/1X/acd04dfcc39b878d00a28d5708f860dfe5190269.jpeg)

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

 ![](https://f.docs.rw/uploads/default/original/1X/5c18f02aaeed68c4be74664f8a0de3dc0a0b9d44.jpeg)

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

### **Настройки Remnawave**

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

 ![](https://f.docs.rw/uploads/default/original/1X/adc24ab7eefe854161dad2728663858f003a99bd.jpeg)

Внимательный читатель мог так же заметить, что раздел 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).

 ![](https://f.docs.rw/uploads/default/original/1X/cf4c44b638d9c55b0a52aa1b394ff4bee2aaf0b9.jpeg)

Добавление ключа входа

 ![](https://f.docs.rw/uploads/default/original/1X/4063c790f0df46570ac1b521737ab1990530b589.jpeg)

Вход с помощью ключа входа

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

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

- Перечисление SNI в Хосте через запятые ([sni-1.com](http://sni-1.com),[sni-2.com](http://sni-2.com),[sni-3.com](http://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](https://try.tg/)

 ![](https://f.docs.rw/uploads/default/original/1X/c475f4f293c2242c0b3485f4d83f9990e897a306.jpeg)

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

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

Перед обновлением не забудьте сделать бекап. Вы можете воспользоваться одним из инструментов, представленных здесь: [❤️ Awesome Remnawave | Remnawave Documentation](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 вы можете посмотреть здесь: [Remnawave Documentation](https://remna.st/api)
