Роутинг
Prizrak-Box собирает профиль из двух частей:
- прокси — ключи из подписки или добавленные вручную;
- шаблон — всё остальное: группы, правила, DNS, TUN, геоданные.
Шаблон бывает двух видов:
| Шаблон | Роутинг | |
|---|---|---|
| Что это | YAML-шаблон mihomo в формате Remnawave | JSON-профиль маршрутизации Happ / INCY |
| Откуда | встроенный, файл, ссылка, base64, подписка | ссылка happ://, incy://, prizrak-box://, автороутинг по https, конструктор |
| Как применяется | прокси вписываются в группы шаблона | роутинг сначала превращается в YAML-шаблон, дальше как шаблон |
В приложении шаблоны и роутинги живут в одном списке «Шаблоны и роутинги». У каждой строки пометка «шаблон» или «роутинг», источник, запасные адреса и время обновления; если в последний раз ответил запасной адрес, строка говорит «обновлён с …». В меню строки (долгое нажатие) — «Скопировать ссылку» и «QR-код»: ссылка …/add/… со всеми адресами, name и update-interval.
Запущенный профиль. Если сменить шаблон или роутинг у профиля, который сейчас подключён, приложение сначала спросит: профиль перезагрузит конфигурацию (VPN не выключается, новые соединения ждут несколько секунд, открытые обычно сохраняются). Так же — при «Обновить», «Сбросить», «Обновить geodata» и ссылке onadd. Фоновое обновление (подписка, интервал шаблона или роутинга, geodata) перезагружает профиль само, только если YAML изменился, и сначала скачивает новые файлы. Если роутинг тяжёлый для iOS, у профиля изменились настройки tun или перезагрузка не удалась, на главном экране появится карточка «Перезапустить профиль?»; при следующем подключении изменения применятся сами.
Как подписка превращается в профиль
Заголовок раздела «Как подписка превращается в профиль»Адрес из поля «URL»│├─ только ссылки роутинга/шаблона (prizrak-box:// happ:// incy://) → в список «Шаблоны и роутинги», профиль не создаётся├─ ключи (vless://…, vpn://, .conf AWG/WireGuard, несколько подписок) → профиль из этих ключей, без запроса│└─ адрес подписки → GET ├─ недоступен → fallback-url → fallback-domain; new-url / new-domain → переход на новый адрес ▼ ответ → если зашифрован age → расшифровка ключом профиля ▼ заголовки профиля = HTTP-заголовки, а каких нет — строки «#имя: значение» из тела ▼ определение формата: 1. ссылки прокси или vpn:// (первая строка не «#» — ссылка) → КЛЮЧИ 2. конфигурация AmneziaWG / WireGuard ([Interface] … [Peer]) → КЛЮЧИ 3. одна строка base64, внутри — что-то из п. 1–2 → КЛЮЧИ 4. YAML (proxies:, proxy-groups:, rules: …) → YAML 5. иначе (в том числе Xray JSON) → ошибка «формат не поддерживается» │ ├─ YAML без prizrak-routing → проверка ядром → профиль как есть ├─ YAML с prizrak-routing → proxies: из YAML + шаблон по prizrak-routing → проверка ядром └─ КЛЮЧИ → прокси (конвертер ядра; vpn:// и .conf — разбор AmneziaWG) → шаблон по prizrak-routing / routing / ссылкам в теле → проверка ядромКак устроен запрос.
- Запрос один. Формат ответа выбирает панель по User-Agent
prizrak-box/…, приложение лишь определяет его по содержимому. - HWID. Если в настройках включена отправка, с запросом уходят
x-hwid,x-device-os,x-ver-osиx-device-model.
Что считается ключами:
- ссылки прокси:
vless://,trojan://,ss://,vmess://,hysteria2:///hy2://,tuic://и другие, которые понимает ядро; vpn://— ссылки Amnezia;- конфигурации AmneziaWG и WireGuard (
.conf); - base64 с любым из перечисленного (обычный или URL-safe,
=в конце не обязателен).
Прокси получают имена ключей. Если имя повторяется, к нему добавляется номер: «NL», «NL 2».
Заголовки в теле ответа.
- Любой поддерживаемый заголовок можно передать строкой
#имя: значениев начале тела подписки. - Это работает для ключей, base64 (после декодирования), YAML и расшифрованного age.
- Если заголовок есть и в HTTP, и в теле, побеждает HTTP.
#profile-title: Моя VPN#prizrak-routing: prizrak-box://template/onadd/https://example.com/t.yaml#prizrak-routing-override: rule=subonly; keys=falsevless://…Шаблоны
Заголовок раздела «Шаблоны»Формат шаблона
Заголовок раздела «Формат шаблона»Шаблон — это обычный конфиг mihomo в формате шаблонов Remnawave (Mihomo). Прокси профиля дописываются по имени в proxies групп, после прокси, которые в группе уже указаны, в порядке ключей. Собственные прокси шаблона (например, type: direct или type: dns) в группы не дописываются — как в Remnawave.
Секции proxy-providers не нужны: итоговый профиль их не содержит, прокси всегда стоят в proxies:.
Какие группы что получают:
| Группа | Получает прокси профиля |
|---|---|
без поля remnawave | все |
remnawave: { include-proxies: false } | ни одного |
remnawave: { shuffle-proxies-order: true } | все, в случайном порядке |
remnawave: { select-random-proxy: true } | один, выбранный случайно |
с use: провайдера, помеченного remnawave: { include-proxies: true } | все |
proxy-groups: - name: 🚫 Недоступные сайты # получит все прокси после своих двух type: select proxies: - 🎲 Любой доступный сервер - 🇷🇺 Без VPN
- name: ⚪🔵🔴 RU сайты # прокси не получает type: select remnawave: include-proxies: false proxies: - 🇷🇺 Без VPN
- name: 🎲 Любой доступный сервер # все прокси, перемешанные type: fallback hidden: true url: https://www.gstatic.com/generate_204 remnawave: shuffle-proxies-order: trueПодробности:
- Перемешивание и случайный выбор. Случайный порядок (
shuffle-proxies-order) и случайный прокси (select-random-proxy) выбираются заново при каждой сборке профиля: при обновлении подписки, смене ключей или шаблона. - Фильтры группы.
filter,exclude-filterиexclude-typeотбирают, какие прокси получит группа.- Регулярные выражения — как в ядре (regexp2), несколько выражений разделяются обратной кавычкой.
- В Remnawave
filterк явно перечисленным прокси не применяется. В Prizrak-Box применяется: так группы по странам работают и безinclude-all.
- Пустая группа. Если группе ничего не досталось, она получает
empty-fallback, а без негоCOMPATIBLE, как в ядре. - Служебные поля. Поле
remnawaveв корне шаблона и в группах,include-all,include-all-proxies,include-all-providersиuseв итоговый профиль не попадают. - Якоря YAML. Якоря и ссылки на них (
&имя,*имя,<<: *имя) работают, где бы ни лежал якорь. Например, вx-anchors:у RU-Bundle. Ключ-контейнер ядро просто пропускает.
Ключ prizrak-box: в шаблоне
Заголовок раздела «Ключ prizrak-box: в шаблоне»prizrak-box: template-update-interval: 24 # часы между обновлениями шаблона primary-group: VPN # главная группа подписки| Поле | Где читается | Что значит |
|---|---|---|
template-update-interval | YAML шаблона | часы между обновлениями шаблона |
primary-group (или primary_group) | YAML подписки, к которой применяется prizrak-routing | главная группа подписки, см. YAML-подписка с prizrak-routing |
- Ключ читает только приложение, из итогового профиля он убирается — и из «Шаблона подписки» тоже.
- Если внутри него лежит якорь, на который ссылаются из других мест, значения подставляются до удаления ключа.
Встроенные шаблоны
Заголовок раздела «Встроенные шаблоны»| Шаблон | Основной адрес | Запасной адрес | Обновление |
|---|---|---|---|
| Ultimate by Davoyan (по умолчанию) | https://github.com/remnawave/templates/raw/main/by-davoyan/subscription-templates/ultimate-mihomo-ru.yaml | https://cdn.jsdelivr.net/gh/remnawave/templates@main/by-davoyan/subscription-templates/ultimate-mihomo-ru.yaml | 24 ч |
| RU-Bundle by Legiz | https://github.com/remnawave/templates/raw/main/by-legiz/subscription-templates/mihomo-ru-bundle.yaml | https://cdn.jsdelivr.net/gh/remnawave/templates@main/by-legiz/subscription-templates/mihomo-ru-bundle.yaml | 24 ч |
Как встроенный шаблон обновляется:
- При сборке приложения. Свежая версия скачивается и кладётся в приложение. Если недоступен основной адрес, берётся запасной.
- В приложении. Шаблон обновляется по тем же адресам раз в 24 часа. В меню шаблона есть «Обновить» и «Сбросить к встроенному».
- После обновления приложения. Если встроенная копия свежее скачанной, берётся она.
- Профили. После обновления шаблона профили на нём пересобираются.
Профили на прежних встроенных шаблонах переходят на новые сами: RU-Bundle и RU-Bundle + smart — на RU-Bundle, остальные — на Ultimate.
Свои шаблоны
Заголовок раздела «Свои шаблоны»Шаблон добавляется через «Шаблоны и роутинги» → «Добавить»:
- вставить из буфера;
- ввести ссылку;
- сканировать QR-код;
- выбрать файл.
Что можно передать:
- YAML-файл или его текст;
- ссылку
https://на YAML; - ссылку
prizrak-box://template/…(см. Ссылки); - base64 YAML.
Шаблон, добавленный по https, помнит все свои адреса и обновляется по интервалу. Шаблон с тем же адресом заменяет прежний.
Интервал обновления шаблона, по убыванию приоритета:
update-intervalв ссылкеprizrak-box://template/…;- заголовок
Template-Update-Intervalв ответе сервера шаблона; prizrak-box: template-update-intervalв самом YAML;- 24 часа.
Значение — часы от 0 до 8760, 0 означает «не обновлять». Шаблон из base64 сам не обновляется. Если он пришёл в prizrak-routing, он меняется вместе с этим заголовком.
Роутинги Happ / INCY
Заголовок раздела «Роутинги Happ / INCY»Роутинг — JSON-профиль маршрутизации в формате Happ и INCY (docs.happ.info, «Роутинг»). Prizrak-Box читает его так же, как Happ, и делает из него YAML-шаблон для ядра.
Ключи JSON нечувствительны к регистру. true можно писать строкой или значением. Пустое или отсутствующее поле берёт значение Happ по умолчанию. JSON строгий: висячие запятые и комментарии — ошибка.
Поля роутинга
Заголовок раздела «Поля роутинга»| Поле | Что делает | По умолчанию |
|---|---|---|
Name | название | Default |
GlobalProxy | куда идёт всё, что не попало в списки: true — через VPN, false — напрямую | true |
RouteOrder | порядок проверки категорий, например block-direct-proxy | block-direct-proxy |
DomainStrategy | AsIs, IPIfNonMatch, IPOnDemand | IPIfNonMatch |
DirectSites, DirectIp | напрямую | — |
ProxySites, ProxyIp | через VPN | — |
BlockSites, BlockIp | блокировать | — |
RemoteDNSType, RemoteDNSDomain, RemoteDNSIP | удалённый DNS (DoH, DoT, DoU, TCP) | DoH cloudflare-dns.com, 1.1.1.1 |
DomesticDNSType, DomesticDNSDomain, DomesticDNSIP | домашний DNS | DoH dns.google, 8.8.8.8 |
DnsHosts | свои записи hosts | cloudflare-dns.com → 1.1.1.1, dns.google → 8.8.8.8 |
FakeDNS | fake-ip для сайтов из списков | false |
Geositeurl, Geoipurl | свои geosite.dat и geoip.dat | файлы Loyalsoldier v2ray-rules-dat |
UseChunkFiles | true — файлы урезаются до используемых списков, false — берутся целиком | true |
GeositeHash, GeoipHash | SHA-256 файлов (INCY): новый хеш — повод скачать заново | — |
LastUpdated | дата версии: Unix-время или ISO-дата (INCY) | — |
geoUpdateIntervalHours | часы между проверками геофайлов | — |
Записи в списках сайтов:
geosite:код— правилоGEOSITEпо файлу роутинга;domain:иfull:— встроенный rule-provider;keyword:,regexp:и запись без префикса —DOMAIN-KEYWORD/DOMAIN-REGEX.
Записи в списках IP:
geoip:код— правилоGEOIP;- адреса и подсети — встроенный rule-provider.
Что получается в YAML
Заголовок раздела «Что получается в YAML»- Правила.
- Правила идут в порядке
RouteOrder: сначала сайты категории, затем её IP, как у Happ. IPIfNonMatch— все правила по сайтам идут раньше любого правила по IP.AsIs— адреса не резолвятся (no-resolve).IPOnDemand— порядок как есть.- Последнее правило —
MATCHна «👻PROXY» или «👻NO_VPN» поGlobalProxy.
- Правила идут в порядке
- Группы.
- 🛡️ VPN — выбор: «⚡️ Авто» и все прокси.
- ⚡️ Авто —
url-testпо всем прокси. - 👻PROXY, 👻NO_VPN, ⛔👻BLOCK — скрытые группы для правил, прокси в них не вписываются.
- DNS.
nameserver— удалённый DNS, через 👻PROXY. DoU и TCP идут как TCP, чтобы работать и через прокси без UDP.proxy-server-nameserverиdirect-nameserver— домашний DNS.default-nameserver— IP-адреса домашнего и удалённого DNS.nameserver-policy: сайты изProxySites— удалённому DNS, сайты изDirectSites— домашнему. Если сайт есть в обоих списках, побеждает удалённый, как у Happ.hosts—DnsHostsи адреса DoH-серверов.
- Fake DNS. Fake-адреса (
198.18.0.1/16) получают только сайты из списков прокси и прямых, как у fakedns в Happ. - Геоданные. Профиль использует собственные файлы роутинга (
geox-url,geodata-mode), автообновления средствами ядра нет.
Геофайлы
Заголовок раздела «Геофайлы»- Когда скачиваются. При добавлении роутинга и по расписанию.
- Урезание. Если
UseChunkFilesнеfalse, в файлах остаются только используемые списки. Так тяжёлые файлы помещаются в память туннеля iOS. - Проверка по
.sha256. Если у провайдера рядом с файлом лежитgeosite.dat.sha256, приложение сначала сверяется с ним. Если хеш совпадает с сохранённым файлом, скачивания нет. - Хеши из роутинга. Новые
GeositeHash/GeoipHashили более свежийLastUpdatedозначают, что файлы надо скачать заново. - Пропущенные списки. Если списка, который упомянут в роутинге, нет в файле, его правило пропускается, а в карточке роутинга появляется пометка.
- Тяжёлый роутинг. Если списки займут больше ~12 МБ памяти, роутинг помечается «тяжёлым для iOS».
Интервал проверки геофайлов, по убыванию приоритета:
- выбранный пользователем в меню роутинга;
- заголовок подписки
Routing-Geo-Update-Interval; - строка
#routing-geo-update-interval:в теле подписки; geoUpdateIntervalHoursв самом роутинге;- если ничего не задано — только вручную.
Расширенный формат Prizrak-Box
Заголовок раздела «Расширенный формат Prizrak-Box»Поверх полей Happ / INCY роутинг Prizrak-Box понимает ещё четыре поля. Они читаются у роутингов, добавленных ссылкой prizrak-box://routing/… или prizrak-box://autorouting/… (в том числе пришедшей в prizrak-routing / routing), JSON-текстом в приложении и в конструкторе. У ссылок happ:// и incy:// эти поля пропускаются. Сами Happ и INCY этих полей не знают и просто их не читают, поэтому тот же JSON работает у них без этих правил.
{ "Name": "Мой роутинг", "GlobalProxy": "true", "DirectSites": ["geosite:category-ru"], "DirectRules": [ "SRC-IP-CIDR,192.168.1.201/32" ], "ProxyRules": [ "PROCESS-NAME,discord.exe", "RULE-SET,rule1", "OR,((NETWORK,UDP),(DOMAIN,baidu.com))" ], "BlockRules": [ "DOMAIN-SUFFIX,ads.example.com" ], "RuleSetUrls": { "rule1": "https://example.com/rule1.yaml", "rule2": { "url": "https://example.com/rule2.mrs", "behavior": "domain" } }}| Поле | Куда ведут правила |
|---|---|
DirectRules | 👻NO_VPN |
ProxyRules | 👻PROXY |
BlockRules | ⛔👻BLOCK |
RuleSetUrls | rule-provider’ы для RULE-SET |
Правила.
- Синтаксис. Любые правила mihomo (справочник), записанные без цели: цель подставляется по полю.
- Параметры после цели сохраняются.
IP-CIDR,1.2.3.0/24,no-resolveпревращается вIP-CIDR,1.2.3.0/24,PROXY,no-resolve. - Логические правила
AND,ORиNOTпишутся как есть. - Порядок.
- Правила из этих полей идут раньше всех
…Sitesи…Ip, по порядкуRouteOrder. DomainStrategyк ним не применяется: у IP-правилno-resolveпишите сами.
- Правила из этих полей идут раньше всех
GEOSITEиGEOIPчитаются по геофайлам роутинга. Их коды сохраняются, когда файлы урезаются.- Проверка ядром. Каждое правило проверяется парсером ядра. Неверное пропускается, а в карточке роутинга появляется пометка. Остальной роутинг работает.
- Не принимаются:
MATCH— последнее правило задаётGlobalProxy;SUB-RULE;- правила со своей целью.
RULE-SET и RuleSetUrls.
RULE-SET,имя работает, только если имя есть в RuleSetUrls, в том числе внутри AND / OR / NOT. Иначе правило пропускается с пометкой. В профиль попадают только rule-set’ы, на которые есть ссылка в правилах.
Имя rule-set.
- Латиница, цифры,
-и_. - Нельзя использовать имена, которые роутинг занимает сам:
block-domains,block-keywords,block-ips,proxy-domains,proxy-keywords,proxy-ips,direct-domains,direct-keywords,direct-ips.
Значение — адрес строкой или объект.
"RuleSetUrls": { "discord": "https://example.com/discord.yaml", "ru-sites": { "url": "https://example.com/ru.mrs", "behavior": "domain" }, "ru-ips": { "url": "https://example.com/ru-ip.mrs", "behavior": "ipcidr", "interval": 43200 }, "local": { "url": "https://example.com/local.list", "format": "text", "behavior": "classical", "proxy": "DIRECT" }}| Поле объекта | Значения | По умолчанию |
|---|---|---|
url | адрес https:// или http:// | обязательно |
behavior | domain, ipcidr, classical | classical |
format | yaml, text, mrs | по расширению адреса: .yaml / .yml → yaml, .mrs → mrs, остальное → text |
interval | секунды между обновлениями; 0 — только при первом скачивании | 86400 |
proxy | через что скачивать: PROXY или DIRECT | PROXY |
header | заголовки запроса, например {"User-Agent": ["Mozilla/5.0"], "Authorization": "Bearer …"}; значение — строка или список строк | — |
size-limit | наибольший размер файла в байтах, 0 — без ограничения | 0 |
fallback | запасные адреса ["https://…", "https://…"] | — |
Строка — то же, что объект с одним url.
Допустимые сочетания:
format | behavior |
|---|---|
yaml, text | domain, ipcidr, classical |
mrs | domain, ipcidr (classical в mrs не бывает) |
Поэтому файлу .mrs нужен объект с behavior.
Как работают запасные адреса.
- Если основной адрес не ответил или вернул ошибку, адреса из
fallbackпробуются по очереди. - Ответ
304 Not Modifiedот основного адреса — это успех, запасные не пробуются. - Запасные адреса попадают в профиль полем
fallback-urls, если приложение собрано на Prizrak-Core v1.19.33-r7 или новее. На более старом ядре они сохраняются в роутинге, но в профиль не пишутся: работает только основной адрес.
Ошибки. Rule-set с неверным адресом, именем, полем или сочетанием пропускается вместе со всеми правилами, которые на него ссылаются. В карточке роутинга появляется пометка.
Что получается в профиле — для ru-sites из примера:
rule-providers: ru-sites: type: http url: https://example.com/ru.mrs behavior: domain format: mrs interval: 86400 proxy: PROXY path: ./rule-sets/ru-sites.mrspath задаёт приложение, из роутинга его указать нельзя.
Роутинги
Заголовок раздела «Роутинги»| Ссылка | Что делает |
|---|---|
prizrak-box://routing/add/{base64 JSON} | добавить роутинг в список |
prizrak-box://routing/onadd/{base64 JSON} | добавить и применить |
prizrak-box://autorouting/onadd/https://…/routing.json | автороутинг: JSON по адресу, обновляется по нему, применить |
happ://routing/…, incy://routing/…, incy://autorouting/… | то же, что prizrak-box:// |
…/routing/off | не выполняется |
Роутинг с таким же названием заменяет прежний.
Шаблоны
Заголовок раздела «Шаблоны»| Ссылка | Что делает |
|---|---|
prizrak-box://template/add/{base64 YAML} | добавить шаблон в список |
prizrak-box://template/onadd/{base64 YAML} | добавить и применить |
prizrak-box://template/add/https://…/template.yaml | добавить шаблон по адресу, обновляется по нему |
prizrak-box://template/onadd/https://…/template.yaml | то же и применить |
Параметры после #
Заголовок раздела «Параметры после #»Параметры пишутся после #, на сервер они не уходят. Работают для template/… и autorouting/….
| Параметр | Значение |
|---|---|
name | название в списке |
update-interval | часы между обновлениями, 0–8760, 0 — не обновлять |
fallback | запасной адрес; можно повторять, пробуются по порядку |
prizrak-box://template/onadd/https://github.com/remnawave/templates/raw/main/by-davoyan/subscription-templates/ultimate-mihomo-ru.yaml#name=Ultimate&update-interval=24&fallback=https://cdn.jsdelivr.net/gh/remnawave/templates@main/by-davoyan/subscription-templates/ultimate-mihomo-ru.yaml- Адрес шаблона. Собственные
?и&в адресе шаблона не мешают: наши параметры стоят после#. - Адреса в
fallbackпишутся как есть. Кодировать нужно только символы&и#. - «Скопировать ссылку» в меню шаблона или роутинга выдаёт ссылку со всеми запасными адресами.
add и onadd
Заголовок раздела «add и onadd»add— только добавить в список.onadd— добавить и применить:- к активному профилю, собранному из ключей;
- к этому профилю, если ссылка открыта в его окне шаблонов.
- Ограничение подписки. Применение возможно, только если подписка профиля это разрешает (
rule, см. ниже). Иначе шаблон или роутинг просто добавляется в список.
Откуда приходят ссылки
Заголовок раздела «Откуда приходят ссылки»- открыта как ссылка, вставлена, введена или отсканирована;
- введена в поле адреса вместе с адресом подписки;
- пришла от подписки: заголовками
prizrak-routingиroutingили строками в теле ответа.
Заголовки подписки
Заголовок раздела «Заголовки подписки»prizrak-routing
Заголовок раздела «prizrak-routing»Один или несколько шаблонов и роутингов, разделённых ;, в любой комбинации:
prizrak-routing: prizrak-box://template/onadd/https://example.com/t.yaml#fallback=https://mirror.example.com/t.yaml; happ://routing/add/eyJOYW1lIjoi…- Кодирование. Значение можно передать в base64 с префиксом
base64:, какprofile-title. - Строка в теле. Можно передать и строкой
#prizrak-routing: …в теле ответа. - Добавление и применение.
- Всё перечисленное добавляется в список по порядку.
- К профилю применяется первое. Исключение —
rule=subonlyу YAML-подписки, см. ниже.
- Когда применяется заново. Только если значение новое или изменилось. До этого ручной выбор пользователя сохраняется (если
ruleего разрешает).
routing
Заголовок раздела «routing»Ссылки роутингов Happ / INCY, по нескольку через ;. Применяется первый. Работает только для подписок с ключами.
Какой источник берётся
Заголовок раздела «Какой источник берётся»При каждом обновлении подписки берётся первый непустой источник, остальные не смотрятся. Каждый заголовок сначала ищется в HTTP, затем строкой в теле.
| № | Источник | Для каких подписок |
|---|---|---|
| 1 | prizrak-routing | ключи и YAML |
| 2 | routing | только ключи |
| 3 | ссылки роутинга в строках ответа | только ключи |
Ссылки, введённые вместе с адресом при добавлении подписки, применяются один раз и только при rule=true.
prizrak-routing-override
Заголовок раздела «prizrak-routing-override»Что подписка разрешает пользователю менять в профиле, и её главная группа:
prizrak-routing-override: rule=subonly; keys=false; primary-group=VPN- Формат. Пары
ключ=значениечерез;, порядок любой. Незнакомые ключи пропускаются, отсутствующий ключ берёт значение по умолчанию. primary-group— главная группа YAML-подписки (см. YAML-подписка с prizrak-routing). Имя пишется как есть, регистр важен. Имя с эмодзи, не-ASCII или;в HTTP-заголовке передаётся какbase64:от UTF-8, какprofile-title:primary-group=base64:8J+boe+4jyBWUE4=(это «🛡️ VPN»). В строке#prizrak-routing-override: …в теле его можно писать как есть.- Строка в теле. Передаётся и строкой
#prizrak-routing-override: ….
rule — шаблон и роутинг профиля:
rule | Применяется по умолчанию | Можно сменить в карточке профиля |
|---|---|---|
true (по умолчанию) | первый из prizrak-routing | на любой шаблон или роутинг, включая добавленные пользователем |
false | первый из prizrak-routing, всегда | нельзя: выбора шаблона в карточке профиля нет |
subonly | YAML-подписка — её собственное содержимое («Шаблон подписки»); подписка с ключами — первый из prizrak-routing | только на «Шаблон подписки» и то, что пришло в prizrak-routing |
keys — свои ключи пользователя (ссылки, подписки, AWG .conf, vpn://):
| Подписка | По умолчанию |
|---|---|
прислала prizrak-routing | false |
не прислала prizrak-routing (в том числе прислала только routing) | true |
keys=false.- Добавить свои ключи нельзя, используются только ключи самой подписки.
- Ключи, добавленные раньше, хранятся, но в профиль не идут. Если подписка снова разрешит
keys=true, они вернутся.
keys=true. Свои ключи добавляются после прокси подписки.
Template-Update-Interval
Заголовок раздела «Template-Update-Interval»Заголовок ответа сервера шаблона, а не подписки: часы между обновлениями шаблона, от 0 до 8760. Порядок приоритета — в разделе Свои шаблоны.
Routing-Geo-Update-Interval
Заголовок раздела «Routing-Geo-Update-Interval»Часы между проверками геофайлов роутинга, от 0 до 8760, 0 означает «никогда». Порядок приоритета — в разделе Геофайлы.
YAML-подписка с prizrak-routing
Заголовок раздела «YAML-подписка с prizrak-routing»Если подписка отдаёт YAML и присылает prizrak-routing, Prizrak-Box берёт из неё не только proxies:, но и всё, на чём она построена: proxy-providers, скрытые и обычные группы, цепочки (dialer-proxy, override).
Главная группа
Заголовок раздела «Главная группа»Первое из:
primary-groupв заголовкеprizrak-routing-override;prizrak-box: primary-groupв YAML подписки;- первая группа без
hidden: true— обычно в ней основные серверы.
Если имени из пунктов 1–2 нет среди групп подписки, оно пропускается, а у ключа подписки на странице «Ключи» появляется пометка. MATCH подписки для этого не используется: он может вести и на DIRECT.
Пришёл роутинг (Happ / INCY / расширенный JSON)
Заголовок раздела «Пришёл роутинг (Happ / INCY / расширенный JSON)»- Из подписки остаются как есть:
proxies,proxy-providers, всеproxy-groups, а такжеtun,sniffer,profile, порты и прочие настройки. - Из роутинга берутся:
rules,rule-providers,dns,hostsи geodata. Своиrulesиrule-providersподписки уходят. - Группы роутинга
👻PROXY,👻NO_VPN,⛔👻BLOCKдобавляются после групп подписки, скрытыми.👻PROXYведёт на главную группу. «🛡️ VPN» и «⚡️ Авто» не добавляются. Если у подписки уже есть группа с таким именем, к имени группы роутинга добавляется номер. - Свои ключи (при
keys=true) добавляются в главную группу после её участников.
Пришёл шаблон (YAML)
Заголовок раздела «Пришёл шаблон (YAML)»- Ключи шаблона — участники главной группы по порядку: её
proxies(группы стран, серверы), а если у неё естьuse— серверы этих провайдеров.DIRECT,REJECTи проксиtype: directв ключи не идут. Группы шаблона получают ключи по обычным правилам (remnawave,filter,exclude-filter); фильтр видит имя участника, например «🇳🇱 Нидерланды». - Из подписки переносятся как есть: все
proxiesи теproxy-providersи группы, которые нужны ключам — поproxies, поuse, поdialer-proxy. Сама главная группа не переносится: её место занимают группы шаблона. Fallback по странам и цепочки работают, как в подписке. - HTTP-провайдер главной группы добавляется в
useгрупп шаблона, которые получают ключи, вместе с ихfilter. - Без главной группы ключами становятся серверы подписки:
proxies:и серверы inline-провайдеров, как их собирает ядро (фильтр по исходному имени, затемdialer-proxyиoverride); группы, через которые идут цепочки, переносятся. - Совпадение имён. Если имя группы или прокси подписки совпало с шаблоном, к имени из подписки добавляется номер, ссылки на него переписываются.
- Свои ключи (при
keys=true) идут после участников главной группы.
Что ещё
Заголовок раздела «Что ещё»- «Шаблон подписки». Сам YAML подписки остаётся одним из вариантов в списке. Если выбрать его, профиль будет таким, каким его отдала подписка (без ключа
prizrak-box:). Приrule=subonlyон применяется по умолчанию. - Подписка перестала присылать
prizrak-routing— профиль снова становится её YAML как есть.
Пример для Remnawave. Подписка отдаёт Mihomo-шаблон панели, но предлагает пользователю ещё два:
prizrak-routing: prizrak-box://template/add/https://example.com/ru.yaml; prizrak-box://template/add/https://example.com/full.yamlprizrak-routing-override: rule=subonly; keys=falseПользователь видит три варианта: «Шаблон подписки» (по умолчанию) и два шаблона из заголовка. Других шаблонов и своих ключей добавить нельзя.
Все приоритеты на одной странице
Заголовок раздела «Все приоритеты на одной странице»| Что | Порядок |
|---|---|
| Заголовок подписки | HTTP → строка #имя: в теле |
| Источник шаблона/роутинга | prizrak-routing → routing → ссылки в теле |
| Какой из списка применяется | первый; при rule=subonly у YAML-подписки — «Шаблон подписки» |
| Правила в роутинге | DirectRules / ProxyRules / BlockRules (по RouteOrder) → сайты → IP → MATCH по GlobalProxy |
| Интервал обновления шаблона | update-interval в ссылке → Template-Update-Interval → prizrak-box: template-update-interval → 24 ч |
| Интервал геофайлов роутинга | выбор пользователя → Routing-Geo-Update-Interval → #routing-geo-update-interval: → geoUpdateIntervalHours → вручную |
| Адреса шаблона / автороутинга | основной → fallback по порядку |