Маршрутизация Xray: JSON обычных правил
Импорт: Подключение → режим трафика → собственный маршрут → обычная конфигурация, не импорт серверов. Выберите профиль и уже имеющиеся узлы. Глава описывает только формат обычной формы. Для DNS/sniffing за рамками обычных настроек и дополнительных inbounds используйте отдельный продвинутый JSON-шаблон. Оба типа делят лимит в три профиля и не конвертируются при редактировании.
Структура
| Поле | Контракт |
|---|---|
| name | Непустое уникальное имя, до 32 символов |
outbounds |
Обязательные 1–3 пустых слота, необязательный freedom/fragment, затем контролируемый dnsOut для прямого/пустого DNS-ответа |
| routing.domainStrategy | IPIfNonMatch; приложение нормализует значение |
| routing.rules | Упорядоченные правила; пустой список оставляет поведение по умолчанию |
dns |
Основные/резервные DNS прокси и direct, кеш/один выход и FakeDNS |
inbounds |
Только заполнитель sniffing tunIn без listener |
routing.balancers |
Только стратегия proxy roundRobin/leastPing |
observatory |
Только probeURL, probeInterval, enableConcurrency |
| geodata.assets | Зависимости импорта, только file и HTTPS url |
Обычная конфигурация дополнительно принимает описанные ниже ограниченные DNS, заполнитель sniffing, выбор proxy и Observatory. Реальные узлы, системные выходы, слушатели, журналы/metrics и произвольные balancers не допускаются.
Условия и действия
Поддерживаемые условия: domain и ip — массивы строк; port, например "443", "8000-8080", "80,443"; network — tcp, udp или tcp,udp; protocol и localOS — массивы строк. Имя правила — ruleTag. В редакторе протоколы и ОС находятся в разделе дополнительных условий.
Выберите ровно одно действие:
| Действие | JSON |
|---|---|
| VPN | "balancerTag": "proxy" |
| Напрямую | "outboundTag": "direct" |
| Блокировать | "outboundTag": "block" |
Не используйте outboundTag: proxy, type, enabled, sourceIP, sourcePort, attrs, inboundTag или условия процесса. Неподдерживаемые поля отклоняются.
Разные типы условий — AND. Обычные значения одного списка — альтернативы. Для «домен ИЛИ IP» создавайте разные правила. Отрицательные IP-списки следуют семантике Core; к ним нельзя безусловно применять простое объяснение OR.
Домены: full:host.example.com — точное имя; domain:example.com — домен и поддомены; geosite:CN — проверенная стандартная категория; ext:other.dat:category — собственная. Строка без префикса — ключевое слово, не точное имя. Не расширяйте намерение пользователя до подстроки/регулярного выражения.
IP: адрес, CIDR, geoip:CN или ext:other.dat:category. Категория должна существовать.
Порядок и fallback
Первое подходящее правило определяет действие. IPIfNonMatch разрешает домен и выполняет IP-aware проход только после неудачного первого. Безусловное конечное правило proxy может предотвратить второй проход.
По умолчанию round robin: без совпадения используется первый outbound, fallback balancer — первая полная прокси-цепочка. leastPing добавляет после пользовательских правил proxy catch-all для управляемого входа и возвращается к первой полной цепочке. Существующие сессии не переносятся. Выбор прокси.
Настоящие узлы и системные outbounds генерируются приложением; в Custom нужны только три поддерживаемых ссылки действия.
DNS, sniffing и выбор прокси
Прежняя запись app-dns-direct остаётся допустимой. Расширенный формат принимает повторные app-dns-proxy/app-dns-direct в порядке основного и резервов, плюс необязательный app-dns-fake. У resolver только address/tag. Корневые disableCache/disableFallbackIfMatch задают кеш и резервирование в одном выходе; отсутствующая группа использует 8.8.8.8. Домены, finalQuery и IPv6-политику формирует App, они не экспортируются.
Полный пример
Реклама блокируется; GitHub идёт через VPN раньше Microsoft; Apple/Microsoft/Bing/Китай/частные назначения объединены в отдельные доменное и IP-правила. Нужны оба стандартных DAT и два подходящих узла. Секретов и незаполненных параметров нет.
{
"name": "Mainland China direct",
"outbounds": [
{},
{}
],
"dns": {
"servers": [
{
"tag": "app-dns-direct",
"address": "8.8.8.8"
}
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"ruleTag": "Block ads",
"domain": [
"geosite:CATEGORY-ADS-ALL"
],
"outboundTag": "block"
},
{
"ruleTag": "GitHub through VPN",
"domain": [
"geosite:GITHUB"
],
"balancerTag": "proxy"
},
{
"ruleTag": "Direct domains",
"domain": [
"geosite:PRIVATE",
"geosite:APPLE",
"geosite:MICROSOFT",
"geosite:BING",
"geosite:CN"
],
"outboundTag": "direct"
},
{
"ruleTag": "Direct IPs",
"ip": [
"geoip:PRIVATE",
"geoip:CN"
],
"outboundTag": "direct"
}
]
}
}Протоколы и операционные системы
protocol: http, tls, quic, bittorrent; localOS: ios, android, darwin, windows, linux. Оба — массивы. Protocol означает распознанный протокол приложения, не VLESS/VMess. localOS — система, где работает Core, не удалённый сервер и не пакет Android.
{
"name": "Block QUIC on mobile",
"outbounds": [
{}
],
"dns": {
"servers": [
{
"tag": "app-dns-direct",
"address": "8.8.8.8"
}
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"ruleTag": "Mobile QUIC",
"protocol": [
"quic"
],
"localOS": [
"ios",
"android"
],
"outboundTag": "block"
}
]
}
}FakeDNS
FakeDNS по умолчанию выключен и сохраняется дополнительным tagged DNS server. Сохраните direct server; не экспортируйте пулы и не добавляйте корневой boolean. Поддерживаемые настройки sniffing сохраняются.
{
"name": "FakeDNS routing",
"outbounds": [
{}
],
"dns": {
"servers": [
{
"tag": "app-dns-direct",
"address": "8.8.8.8"
},
{
"tag": "app-dns-fake",
"address": "fakedns"
}
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"ruleTag": "Private networks",
"ip": [
"geoip:PRIVATE"
],
"outboundTag": "direct"
}
]
}
}Версия · DNS/FakeDNS · Зависимости
Fragment
Fragment изначально выключен; Smart и каждый обычный Custom сохраняют собственную настройку. Значения и правила шаблонов описаны в руководстве Fragment.
Для явного прямого/пустого ответа не-A/AAAA после слотов и Fragment допустим контролируемый dnsOut. Точные границы — в других DNS-запросах; произвольные вспомогательные выходы не поддерживаются.