Перейти к содержимому

Роутинг

Prizrak-Box собирает профиль из двух частей:

  • прокси — ключи из подписки или добавленные вручную;
  • шаблон — всё остальное: группы, правила, DNS, TUN, геоданные.

Шаблон бывает двух видов:

ШаблонРоутинг
Что этоYAML-шаблон mihomo в формате RemnawaveJSON-профиль маршрутизации 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=false
vless://…

Шаблон — это обычный конфиг 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:
template-update-interval: 24 # часы между обновлениями шаблона
primary-group: VPN # главная группа подписки
ПолеГде читаетсяЧто значит
template-update-intervalYAML шаблоначасы между обновлениями шаблона
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.yamlhttps://cdn.jsdelivr.net/gh/remnawave/templates@main/by-davoyan/subscription-templates/ultimate-mihomo-ru.yaml24 ч
RU-Bundle by Legizhttps://github.com/remnawave/templates/raw/main/by-legiz/subscription-templates/mihomo-ru-bundle.yamlhttps://cdn.jsdelivr.net/gh/remnawave/templates@main/by-legiz/subscription-templates/mihomo-ru-bundle.yaml24 ч

Как встроенный шаблон обновляется:

  • При сборке приложения. Свежая версия скачивается и кладётся в приложение. Если недоступен основной адрес, берётся запасной.
  • В приложении. Шаблон обновляется по тем же адресам раз в 24 часа. В меню шаблона есть «Обновить» и «Сбросить к встроенному».
  • После обновления приложения. Если встроенная копия свежее скачанной, берётся она.
  • Профили. После обновления шаблона профили на нём пересобираются.

Профили на прежних встроенных шаблонах переходят на новые сами: RU-Bundle и RU-Bundle + smart — на RU-Bundle, остальные — на Ultimate.

Шаблон добавляется через «Шаблоны и роутинги» → «Добавить»:

  • вставить из буфера;
  • ввести ссылку;
  • сканировать QR-код;
  • выбрать файл.

Что можно передать:

  • YAML-файл или его текст;
  • ссылку https:// на YAML;
  • ссылку prizrak-box://template/… (см. Ссылки);
  • base64 YAML.

Шаблон, добавленный по https, помнит все свои адреса и обновляется по интервалу. Шаблон с тем же адресом заменяет прежний.

Интервал обновления шаблона, по убыванию приоритета:

  1. update-interval в ссылке prizrak-box://template/…;
  2. заголовок Template-Update-Interval в ответе сервера шаблона;
  3. prizrak-box: template-update-interval в самом YAML;
  4. 24 часа.

Значение — часы от 0 до 8760, 0 означает «не обновлять». Шаблон из base64 сам не обновляется. Если он пришёл в prizrak-routing, он меняется вместе с этим заголовком.


Роутинг — JSON-профиль маршрутизации в формате Happ и INCY (docs.happ.info, «Роутинг»). Prizrak-Box читает его так же, как Happ, и делает из него YAML-шаблон для ядра.

Ключи JSON нечувствительны к регистру. true можно писать строкой или значением. Пустое или отсутствующее поле берёт значение Happ по умолчанию. JSON строгий: висячие запятые и комментарии — ошибка.

ПолеЧто делаетПо умолчанию
NameназваниеDefault
GlobalProxyкуда идёт всё, что не попало в списки: true — через VPN, false — напрямуюtrue
RouteOrderпорядок проверки категорий, например block-direct-proxyblock-direct-proxy
DomainStrategyAsIs, IPIfNonMatch, IPOnDemandIPIfNonMatch
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домашний DNSDoH dns.google, 8.8.8.8
DnsHostsсвои записи hostscloudflare-dns.com → 1.1.1.1, dns.google → 8.8.8.8
FakeDNSfake-ip для сайтов из списковfalse
Geositeurl, Geoipurlсвои geosite.dat и geoip.datфайлы Loyalsoldier v2ray-rules-dat
UseChunkFilestrue — файлы урезаются до используемых списков, false — берутся целикомtrue
GeositeHash, GeoipHashSHA-256 файлов (INCY): новый хеш — повод скачать заново—
LastUpdatedдата версии: Unix-время или ISO-дата (INCY)—
geoUpdateIntervalHoursчасы между проверками геофайлов—

Записи в списках сайтов:

  • geosite:код — правило GEOSITE по файлу роутинга;
  • domain: и full: — встроенный rule-provider;
  • keyword:, regexp: и запись без префикса — DOMAIN-KEYWORD / DOMAIN-REGEX.

Записи в списках IP:

  • geoip:код — правило GEOIP;
  • адреса и подсети — встроенный rule-provider.
  • Правила.
    • Правила идут в порядке 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».

Интервал проверки геофайлов, по убыванию приоритета:

  1. выбранный пользователем в меню роутинга;
  2. заголовок подписки Routing-Geo-Update-Interval;
  3. строка #routing-geo-update-interval: в теле подписки;
  4. geoUpdateIntervalHours в самом роутинге;
  5. если ничего не задано — только вручную.

Поверх полей 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
RuleSetUrlsrule-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://обязательно
behaviordomain, ipcidr, classicalclassical
formatyaml, text, mrsпо расширению адреса: .yaml / .yml → yaml, .mrs → mrs, остальное → text
intervalсекунды между обновлениями; 0 — только при первом скачивании86400
proxyчерез что скачивать: PROXY или DIRECTPROXY
headerзаголовки запроса, например {"User-Agent": ["Mozilla/5.0"], "Authorization": "Bearer …"}; значение — строка или список строк—
size-limitнаибольший размер файла в байтах, 0 — без ограничения0
fallbackзапасные адреса ["https://…", "https://…"]—

Строка — то же, что объект с одним url.

Допустимые сочетания:

formatbehavior
yaml, textdomain, ipcidr, classical
mrsdomain, 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.mrs

path задаёт приложение, из роутинга его указать нельзя.


СсылкаЧто делает
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 — добавить и применить:
    • к активному профилю, собранному из ключей;
    • к этому профилю, если ссылка открыта в его окне шаблонов.
  • Ограничение подписки. Применение возможно, только если подписка профиля это разрешает (rule, см. ниже). Иначе шаблон или роутинг просто добавляется в список.
  • открыта как ссылка, вставлена, введена или отсканирована;
  • введена в поле адреса вместе с адресом подписки;
  • пришла от подписки: заголовками prizrak-routing и 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 его разрешает).

Ссылки роутингов Happ / INCY, по нескольку через ;. Применяется первый. Работает только для подписок с ключами.

При каждом обновлении подписки берётся первый непустой источник, остальные не смотрятся. Каждый заголовок сначала ищется в HTTP, затем строкой в теле.

№ИсточникДля каких подписок
1prizrak-routingключи и YAML
2routingтолько ключи
3ссылки роутинга в строках ответатолько ключи

Ссылки, введённые вместе с адресом при добавлении подписки, применяются один раз и только при rule=true.

Что подписка разрешает пользователю менять в профиле, и её главная группа:

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, всегданельзя: выбора шаблона в карточке профиля нет
subonlyYAML-подписка — её собственное содержимое («Шаблон подписки»); подписка с ключами — первый из prizrak-routingтолько на «Шаблон подписки» и то, что пришло в prizrak-routing

keys — свои ключи пользователя (ссылки, подписки, AWG .conf, vpn://):

ПодпискаПо умолчанию
прислала prizrak-routingfalse
не прислала prizrak-routing (в том числе прислала только routing)true
  • keys=false.
    • Добавить свои ключи нельзя, используются только ключи самой подписки.
    • Ключи, добавленные раньше, хранятся, но в профиль не идут. Если подписка снова разрешит keys=true, они вернутся.
  • keys=true. Свои ключи добавляются после прокси подписки.

Заголовок ответа сервера шаблона, а не подписки: часы между обновлениями шаблона, от 0 до 8760. Порядок приоритета — в разделе Свои шаблоны.

Часы между проверками геофайлов роутинга, от 0 до 8760, 0 означает «никогда». Порядок приоритета — в разделе Геофайлы.


Если подписка отдаёт YAML и присылает prizrak-routing, Prizrak-Box берёт из неё не только proxies:, но и всё, на чём она построена: proxy-providers, скрытые и обычные группы, цепочки (dialer-proxy, override).

Первое из:

  1. primary-group в заголовке prizrak-routing-override;
  2. prizrak-box: primary-group в YAML подписки;
  3. первая группа без hidden: true — обычно в ней основные серверы.

Если имени из пунктов 1–2 нет среди групп подписки, оно пропускается, а у ключа подписки на странице «Ключи» появляется пометка. MATCH подписки для этого не используется: он может вести и на DIRECT.

  • Из подписки остаются как есть: 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) добавляются в главную группу после её участников.
  • Ключи шаблона — участники главной группы по порядку: её 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.yaml
prizrak-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 по порядку