Профили маршрутизации
Профиль маршрутизации определяет, какой трафик идёт через прокси, какой напрямую, какой блокируется, и какие DNS-серверы используются. Формат — JSON профиля маршрутизации Happ. Профиль может прислать подписка, а пользователь может добавить его из ссылки, из QR-кода или вручную в разделе Маршруты.
Профиль — это JSON-объект. Обязателен только Name.
| Ключ | Тип | Действие |
|---|---|---|
Name |
непустая строка | Название профиля. |
GlobalProxy |
bool (или строки "true"/"false") |
true: весь трафик идёт через прокси, списки ниже не используются. Локальные сети и DNS по-прежнему обрабатываются первыми. |
DirectSites |
строка или массив строк | Домены, которые идут напрямую. |
DirectIp |
строка или массив строк | IP и CIDR, которые идут напрямую. |
ProxySites |
строка или массив строк | Домены, которые идут через прокси. |
ProxyIp |
строка или массив строк | IP и CIDR, которые идут через прокси. |
BlockSites |
строка или массив строк | Домены, которые блокируются. |
BlockIp |
строка или массив строк | IP и CIDR, которые блокируются. |
DomainStrategy |
AsIs, IPIfNonMatch, IPOnDemand (любой регистр) |
Стратегия доменов Xray. По умолчанию AsIs. |
RemoteDNSType |
DoH или DoU |
DNS для трафика через прокси: DNS поверх HTTPS или обычный UDP. |
RemoteDNSDomain |
строка | DoH: резолвер как URL (https://1.1.1.1/dns-query) или имя хоста (https:// и /dns-query добавляются). DoU: имя хоста резолвера, используется как udp://<хост>, если IP не задан. Вместе с https:// должно давать корректный хост. |
RemoteDNSIP |
строка | IP резолвера. Для DoH — также адрес, по которому доступно имя хоста резолвера без запроса. Для DoU — адрес сервера. |
DomesticDNSType |
DoH или DoU |
DNS для прямого трафика. |
DomesticDNSDomain |
строка | Как RemoteDNSDomain. |
DomesticDNSIP |
строка | Как RemoteDNSIP. |
DnsHosts |
объект | Статические имена хостов: { "example.com": "203.0.113.5" }. |
FakeDNS |
bool (или "true"/"false") |
Проверяется и сохраняется, но не применяется: клиент всегда передаёт собственную настройку пользователя FakeDNS (Настройки → Расширенные, по умолчанию выключена), и решает она. |
Geoipurl |
строка | Адрес https:// файла geoip.dat. |
Geositeurl |
строка | Адрес https:// файла geosite.dat. |
LastUpdated |
число или строка | Время изменения профиля (и его геофайлов): Unix-секунды или миллисекунды, дата ISO 8601 либо то же число текстом. Значение новее последней загрузки геофайлов вызывает повторную загрузку. |
Правила для значений:
- Список, заданный строкой, делится по запятым и переводам строк. Элементы записываются в синтаксисе маршрутизации Xray:
geosite:category-ru,geoip:ru,geoip:private,domain:example.com,full:www.example.com,keyword:ads,regexp:..., CIDR вроде10.0.0.0/8. - Ключ со значением неверного типа отклоняет весь профиль («Expected string», «Expected boolean», «DNS type must be DoH or DoU», «Invalid domain strategy», «Invalid DNS endpoint», «DnsHosts must be an object», «Expected string or list of strings»). Логические значения можно писать строками.
- Неизвестный ключ игнорируется с предупреждением («Unknown routing profile key»). Имена ключей зависят от регистра.
- Комментарии JSON и завершающие запятые допускаются.
Во что превращается профиль
Заголовок раздела «Во что превращается профиль»Правила проверяются сверху вниз; срабатывает первое подходящее.
- DNS-трафик уходит во встроенный обработчик DNS.
- Если у пользователя включён Обход локальных сетей, частные адреса (
geoip:private) идут напрямую. - Исключённые маршруты пользователя идут напрямую.
- Запросы локального (domestic) резолвера идут напрямую; запросы удалённого (remote) резолвера — через прокси.
- В режиме Правила и если
GlobalProxyне равенtrue:BlockSites,BlockIp,DirectSites,DirectIp,ProxySites,ProxyIp— в таком порядке. - Всё остальное: прокси (или напрямую в режиме Напрямую).
Режим маршрутизации пользователь выбирает отдельно: Правила используют профиль, Весь трафик отправляет всё через прокси, Напрямую — всё напрямую; списки профиля в последних двух режимах не используются.
DNS: удалённый резолвер обслуживает трафик через прокси. Локальный резолвер обслуживает домены из DirectSites и ожидает ответы внутри DirectIp, поэтому эти имена разрешаются локально. Если ничего не задано, клиент использует https://1.1.1.1/dns-query.
Геофайлы
Заголовок раздела «Геофайлы»Записям geosite: и geoip: нужны файлы геоданных в формате v2ray.
- mins скачивает
Geoipurlкакgeoip.dat, аGeositeurlкакgeosite.dat. Адреса должны быть HTTPS; выполняется не более 5 перенаправлений, и каждое тоже должно быть HTTPS. - Если существует файл
<url>.sha256sum, его ведущий 64-символьный хеш должен совпасть с загрузкой; при несовпадении загрузка отклоняется, а прежний файл сохраняется. - Файл скачивается, если его нет, если с последней загрузки прошло 7 дней и более или если
LastUpdatedпрофиля новее последней загрузки. Перед заменой старого файла новый проверяется. - Если в правилах есть
geoip:илиgeosite:, а адресов в профиле нет, mins скачивает файлыrunetfreedom/russia-v2ray-rules-dat. - Пользователь может управлять файлами и вручную в Маршруты → Геоданные.
Встроенные шаблоны
Заголовок раздела «Встроенные шаблоны»На экране Маршруты есть три шаблона, они сохраняются как обычные профили и показывают полный профиль:
| Шаблон | GlobalProxy |
DirectSites |
DirectIp |
Геофайлы |
|---|---|---|---|---|
| Глобальный | true |
нет | geoip:private |
Loyalsoldier/v2ray-rules-dat |
| Россия · напрямую | false |
geosite:category-ru |
geoip:private, geoip:ru |
runetfreedom/russia-v2ray-rules-dat |
| Китай · напрямую | false |
geosite:cn |
geoip:private, geoip:cn |
Loyalsoldier/v2ray-rules-dat |
У всех трёх общие значения: BlockSites: ["geosite:category-ads-all"], пустые ProxySites, ProxyIp и BlockIp, RemoteDNSType: "DoH", RemoteDNSDomain: "https://1.1.1.1/dns-query", RemoteDNSIP: "1.1.1.1", DomesticDNSType: "DoH", DomesticDNSDomain: "https://dns.google/dns-query", DomesticDNSIP: "8.8.8.8", DomainStrategy: "IPIfNonMatch", FakeDNS: false.
{ "Name": "Russia", "GlobalProxy": false, "DirectSites": ["geosite:category-ru"], "DirectIp": ["geoip:private", "geoip:ru"], "BlockSites": ["geosite:category-ads-all"], "ProxySites": [], "ProxyIp": [], "BlockIp": [], "RemoteDNSType": "DoH", "RemoteDNSDomain": "https://1.1.1.1/dns-query", "RemoteDNSIP": "1.1.1.1", "DomesticDNSType": "DoH", "DomesticDNSDomain": "https://dns.google/dns-query", "DomesticDNSIP": "8.8.8.8", "DomainStrategy": "IPIfNonMatch", "FakeDNS": false, "Geositeurl": "https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat", "Geoipurl": "https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat", "LastUpdated": "1798761600"}Доставка профиля вместе с подпиской
Заголовок раздела «Доставка профиля вместе с подпиской»| Как | Подробности |
|---|---|
Заголовок ответа routing (или строка #routing:) |
Значение — профиль одной строкой JSON, base64 от JSON (можно с префиксом base64:), адрес https:// с JSON либо ссылка маршрутизации mins://, happ:// или incy://. См. Заголовки ответа. |
| Ссылка маршрутизации отдельной строкой в теле | Те же ссылки, что в разделе Ссылки и deep link. |
Как клиент обращается с профилем подписки:
- Он сохраняется как неактивный профиль и виден в Маршруты с источником Из подписки; он заменяется при каждом обновлении подписки, которое несёт профиль внутри ответа. Профиль, заданный только адресом, скачивается при импорте подписки и обновлениями подписки заново не скачивается.
- Серверы этой подписки используют его только после того, как пользователь принял
routing-enable(заголовокroutingс профилем сам выставляет его вtrue).routing-enable: falseне даёт этим серверам использовать профиль маршрутизации вообще. См. Подтверждение. - Серверы, переданные как полный Xray JSON, профиль подписки не используют; у них остаётся собственный раздел
routing.
Профили, доставленные ссылками mins://routing/add|onadd/... и QR-кодами, отделены от подписок: они сохраняются как импортированные профили и активны только при onadd.