# Расширенный JSON маршрутизации

Source: https://onexray.com/ru/docs/configuration/advanced-routing/
Description: Собственные DNS, sniffing, входящие подключения и порядок правил с серверами из OneXray.


Путь: **Подключение → способ обработки трафика → Новый собственный маршрут → Расширенный JSON**. Импортируйте файл или отредактируйте JSON, задайте имя и сохраните. Затем выберите маршрут и существующий сервер, подписку или регион. Это шаблон Custom Routing, **не полный Raw экспертного режима**: реальные proxy-узлы и их реквизиты в нём не нужны.

Обычные и расширенные маршруты делят лимит трёх профилей; имя уникально, 1–32 символа. Тип сохранённого профиля не переключается: преобразования через форму с потерей полей нет. Для другого типа создайте профиль. У Raw отдельный лимит.

## Слоты узлов и теги

Начните outbounds с 1–3 последовательных пустых объектов, затем добавляйте вспомогательные выходы. Чередовать их нельзя. Автоматическому выбору, подписке и региону нужно соответствующее число разных пригодных узлов. Выбор одного конкретного сервера заменяет всю область слотов одним узлом. Смена серверов не меняет шаблон.

Во время работы сначала идут выбранные узлы, затем пользовательские вспомогательные выходы в исходном порядке, затем direct/block. Если ни одно правило не совпало, Xray использует **первый outbound**, не balancer. Приложение не добавляет catch-all; явно заданное безусловное правило может остановить второй проход IPIfNonMatch.

| Тег | Контракт |
| --- | --- |
| proxy | Balancer roundRobin приложения, полные tags узлов, fallbackTag: direct и нужный Observatory. Ссылка только через balancerTag, не outboundTag/dialerProxy. Прямой fallback не означает блокировку при отказе. |
| direct, block | Выходы приложения: можно ссылаться, нельзя определять в шаблоне. |
| tunIn | Платформенный inbound; разрешены ссылки из правил. Шаблон задаёт только tag и sniffing. |
| dnsOut | DNS outbound пользователя; при необходимости определите явно, приложение его не добавит. |
| app-entry-*, app-exit-* | Внутренние имена узлов; определения и ссылки запрещены. |
| Остальные | Пользовательские inbounds, DNS-запросы и вспомогательные выходы. Имя DNS не задаёт скрытый прямой/proxy-маршрут. |

Шаблон не добавляет конечный выход и не накладывает произвольные изменения на узлы приложения. dialerProxy ссылается на реальный outbound, не balancer. Для полного владения узлами и цепочками используйте Raw.

## Допустимый JSON

Корень: name, outbounds, inbounds, dns, routing, fakedns и метаданные обмена geodata.assets. Имя и зависимости хранятся отдельно от JSON шаблона. Поля mode/enabled/ID узлов не добавляются.

| Часть | Поля и границы |
| --- | --- |
| routing | domainStrategy и упорядоченные rules; стратегия и ruleTag сохраняются. |
| Правило | ruleTag, domain, ip, port, network, protocol, localOS, inboundTag, localIP, localPort, balancerTag, outboundTag. Выберите одно действие. |
| tunIn | Только tag/sniffing, без protocol/listen/port/settings. |
| Дополнительный inbound | tag, protocol, listen, port, settings, sniffing; протокол socks, http или tunnel. Несколько независимых экземпляров допустимы. |
| SOCKS settings | auth, users/accounts, udp; сохраняются все пары user/pass. |
| HTTP settings | users/accounts, без allowTransparent. |
| Tunnel settings | rewriteAddress, rewritePort, allowedNetwork. Это перенаправление порта, не ещё один системный TUN. |
| sniffing | enabled, routeOnly, destOverride, metadataOnly, domainsExcluded, ipsExcluded; отдельно для каждого входа. |
| Вспомогательный outbound | tag, protocol, settings, streamSettings.sockopt.dialerProxy. Только freedom/blackhole/dns, settings по синтаксису встроенного Core; без реальных удалённых proxy-узлов. |
| DNS | Поддерживаемые Core hosts, servers, clientIp, tag, параметры кеша, fallback и параллельных запросов. |
| FakeDNS | Стандартные пулы fakedns с ipPool/poolSize и полная цепочка DNS/sniffing. При отсутствии пулов действуют значения Core. |

Не принимаются process, sourceIP/source/sourcePort, attrs, routing user и HTTP allowTransparent. Значения полей проверяет libXray; приложение проверяет границы шаблона и владение ресурсами, не создавая вторую грамматику доменов/IP. Этот список не ограничивает полный Raw.

## DNS принадлежит шаблону

OneXray не вставляет proxy/direct DNS servers, не выводит domains из прямых правил, не добавляет правила 53/853 и не меняет порядок. Задайте весь путь DNS, включая используемый DNS outbound и обработку не-A/AAAA запросов, в видимом JSON.

Корень DNS: hosts, servers, clientIp, tag, disableCache, serveStale, serveExpiredTTL, disableFallback, disableFallbackIfMatch, enableParallelQuery, useSystemHosts. Сервер — строка адреса либо объект: address, port, clientIp, domains, expectedIPs, unexpectedIPs, skipFallback, tag, timeoutMs, параметры кеша/устаревших ответов, finalQuery. Используйте синтаксис встроенного Core.

Корневой и серверный queryStrategy нужно опустить: это поле приложения, шаблон с ним отклоняется. IPv6 задаёт UseIP/UseIPv4 без изменения адресов DNS. Транспорты +local обходят маршрутизацию Xray и не могут соблюдать обязательный интерфейс Windows/Linux; на этих системах они отклоняются. DNS tag не меняет этот факт. См. [DNS](https://onexray.com/ru/docs/configuration/dns/).

log, stats, metrics, policy, env/пути ресурсов, Observatory, balancers и интерфейс выхода управляются приложением и не принимаются в шаблоне. Используйте **Расширенные → VPN Tunnel / Xray**.

## Sniffing и полный Raw

Явный объект tunIn.sniffing в расширенном шаблоне сохраняется целиком; пропущенные дочерние поля получают значения Core. Без всего объекта действуют значения приложения, включая обнаружение FakeDNS. Один routeOnly не включает sniffing; явно выключенный sniffing не включается скрыто.

В **полном Raw** существующий tunIn сохраняет позицию, sniffing и неуправляемые settings. Приложение обновляет только необходимые платформенные параметры; отсутствующий sniffing остаётся отсутствующим. Только отсутствие всего inbound приводит к созданию стандартного. Шесть управляемых полей и адаптация SOCKS описаны в [Raw JSON](https://onexray.com/ru/docs/configuration/raw-json/).

## Полные примеры

Все примеры используют узлы приложения. Для двух автоматических слотов нужны два пригодных узла; можно выбрать один конкретный сервер. Не-A/AAAA DNS из туннеля явно отбрасывается; при необходимости измените эту политику. Примеры не обещают защиту от всех утечек или блокировку при отказе.

### Локальный SOCKS и TUN routeOnly

Замените пароль дополнительного SOCKS — это входящий аккаунт, не реквизиты удалённого сервера. Подключите локальный клиент к 127.0.0.1:12080. Его трафик явно идёт в proxy, нематченный системный трафик — через первый узел. Не-loopback listen открывает доступ соответствующей сети: проверьте авторизацию и firewall. Мобильный фон может ограничить слушатели. Счётчик главной страницы учитывает только tunIn.

[JSON: advanced-socks.json](https://onexray.com/examples/advanced-socks.json)

```json
{
  "outbounds": [
    {},
    {},
    {
      "tag": "dnsOut",
      "protocol": "dns",
      "settings": {
        "rules": [
          {
            "action": "hijack",
            "qType": "1,28"
          },
          {
            "action": "drop"
          }
        ]
      }
    }
  ],
  "inbounds": [
    {
      "tag": "tunIn",
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      }
    },
    {
      "tag": "local-socks",
      "protocol": "socks",
      "listen": "127.0.0.1",
      "port": 12080,
      "settings": {
        "auth": "password",
        "users": [
          {
            "user": "local-user",
            "pass": "CHANGE_THIS_PASSWORD"
          }
        ],
        "udp": true
      },
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      }
    }
  ],
  "dns": {
    "servers": [
      {
        "tag": "dns-proxy",
        "address": "8.8.8.8"
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "ruleTag": "Proxy DNS",
        "inboundTag": [
          "dns-proxy"
        ],
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "Tunnel DNS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 53,
        "outboundTag": "dnsOut"
      },
      {
        "ruleTag": "DNS over TLS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 853,
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "Local SOCKS uses VPN",
        "inboundTag": [
          "local-socks"
        ],
        "balancerTag": "proxy"
      }
    ]
  },
  "name": "Local SOCKS and Sniffing"
}
```


### Прямой Китай и раздельный DNS

Нужны стандартные geosite.dat:CN и geoip.dat:CN. Прямой DNS 1.1.1.1 должен быть доступен без выбранного proxy; при необходимости замените его. DNS-правила предшествуют правилам назначения. Catch-all отсутствует, поэтому возможен второй IP-проход IPIfNonMatch.

[JSON: advanced-split-dns.json](https://onexray.com/examples/advanced-split-dns.json)

```json
{
  "outbounds": [
    {},
    {},
    {
      "tag": "dnsOut",
      "protocol": "dns",
      "settings": {
        "rules": [
          {
            "action": "hijack",
            "qType": "1,28"
          },
          {
            "action": "drop"
          }
        ]
      }
    }
  ],
  "inbounds": [
    {
      "tag": "tunIn",
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      }
    }
  ],
  "dns": {
    "servers": [
      {
        "tag": "dns-proxy",
        "address": "8.8.8.8"
      },
      {
        "tag": "dns-direct",
        "address": "1.1.1.1",
        "domains": [
          "geosite:CN"
        ],
        "skipFallback": true
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "ruleTag": "Proxy DNS",
        "inboundTag": [
          "dns-proxy"
        ],
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "Direct DNS",
        "inboundTag": [
          "dns-direct"
        ],
        "outboundTag": "direct"
      },
      {
        "ruleTag": "Tunnel DNS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 53,
        "outboundTag": "dnsOut"
      },
      {
        "ruleTag": "DNS over TLS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 853,
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "China websites",
        "domain": [
          "geosite:CN"
        ],
        "outboundTag": "direct"
      },
      {
        "ruleTag": "China IPs",
        "ip": [
          "geoip:CN"
        ],
        "outboundTag": "direct"
      }
    ]
  },
  "name": "China Direct and Split DNS"
}
```


### Явный FakeDNS

DNS, два пула и destOverride: fakedns заданы вместе. Система должна отправлять fake IP в туннель; не исключайте диапазоны. После переподключения кешированные IP могут устареть. Реальный DNS сохранён для запросов, которым он нужен. См. [ограничения FakeDNS](https://onexray.com/ru/docs/configuration/dns/).

[JSON: advanced-fakedns.json](https://onexray.com/examples/advanced-fakedns.json)

```json
{
  "outbounds": [
    {},
    {},
    {
      "tag": "dnsOut",
      "protocol": "dns",
      "settings": {
        "rules": [
          {
            "action": "hijack",
            "qType": "1,28"
          },
          {
            "action": "drop"
          }
        ]
      }
    }
  ],
  "inbounds": [
    {
      "tag": "tunIn",
      "sniffing": {
        "enabled": true,
        "routeOnly": true,
        "destOverride": [
          "http",
          "tls",
          "quic",
          "fakedns"
        ]
      }
    }
  ],
  "dns": {
    "servers": [
      "fakedns",
      {
        "tag": "dns-proxy",
        "address": "8.8.8.8"
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "ruleTag": "Proxy DNS",
        "inboundTag": [
          "dns-proxy"
        ],
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "Tunnel DNS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 53,
        "outboundTag": "dnsOut"
      },
      {
        "ruleTag": "DNS over TLS",
        "inboundTag": [
          "tunIn"
        ],
        "port": 853,
        "balancerTag": "proxy"
      },
      {
        "ruleTag": "Private networks",
        "ip": [
          "geoip:PRIVATE"
        ],
        "outboundTag": "direct"
      }
    ]
  },
  "name": "Explicit FakeDNS",
  "fakedns": [
    {
      "ipPool": "198.19.0.0/16",
      "poolSize": 32768
    },
    {
      "ipPool": "fc00:1::/64",
      "poolSize": 32768
    }
  ]
}
```


## Импорт, обмен и проверка

- Тип обычного JSON задаётся выбранным редактором: импортируйте в расширенный JSON, не угадывайте тип по DNS и не отправляйте его в обычную форму.
- App Link: /config/add?type=custom-advanced&data=\<base64\>#\<name\>. Обычный Custom использует custom. Типизированные ссылки доступны и через существующий импорт App Links.
- geodata.assets содержит только file/url, без стандартных файлов; конфликт имён отклоняется. Импорт загружает зависимости во временную область, сохранение фиксирует их и удаляет метаданные. Вставка manifest в текст не запускает загрузку: используйте **Импорт**. Обмен восстанавливает зависимости по смысловым ссылкам routing/DNS/sniffing. См. [Geodata](https://onexray.com/ru/docs/configuration/geodata/).
- Сохранение проверяет копию через TestXray: слоты заменяются локальными freedom, добавляются фиксированные balancer/direct/block, безопасный inbound несёт пользовательский TUN sniffing. Instance строится и закрывается без Start, VPN и проверки скорости узлов.
- Затем проверьте старт VPN, сайты, DNS-пути, каждый дополнительный слушатель и FakeDNS. Успешное построение не проверяет сеть, разрешения и привязку портов. Windows/Linux и платформенные функции Apple требуют проверки на соответствующих системах.


