Перейти к содержимому
Расширенный JSON маршрутизации

Расширенная маршрутизация Xray в JSON

Выберите расширенную маршрутизацию, если обычных правил недостаточно для ваших DNS, sniffing или локальных inbounds. Серверы по-прежнему выбираются в OneXray; реальные proxy-узлы и их реквизиты в шаблоне не нужны. Для управления самими узлами и цепочками используйте полный Raw JSON.

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

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

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

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

Порядок runtime: выбранные узлы, исходные вспомогательные выходы, затем direct/block App. При стандартном roundRobin без совпадения используется первый outbound, catch-all не добавляется. Активный leastPing дописывает после правил proxy-правило для управляемого TUN/LAN; дополнительные входы требуют явных правил. Безусловное правило пользователя может остановить второй проход IPIfNonMatch.

Тег Контракт
proxy Balancer App с roundRobin/leastPing; runtime selector и 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, observatory и метаданные обмена 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 и streamSettings.finalmask только для Freedom. Только 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.

Журналы, stats, metrics, policy, env/ресурсы и физический интерфейс принадлежат App; дополнительно разрешены только ограниченные стратегия proxy и параметры проб ниже.

Sniffing и полный Raw

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

В полном Raw существующий tunIn сохраняет позицию, sniffing и неуправляемые settings. Приложение обновляет только необходимые платформенные параметры; отсутствующий sniffing остаётся отсутствующим. Только отсутствие всего inbound приводит к созданию стандартного. Шесть управляемых полей и адаптация SOCKS описаны в Raw JSON.

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

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

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

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

JSON: advanced-socks.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

{
  "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.

JSON: advanced-fakedns.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.
  • Сохранение проверяет копию через TestXray: слоты заменяются локальными freedom, добавляются фиксированные balancer/direct/block, безопасный inbound несёт пользовательский TUN sniffing. Instance строится и закрывается без Start, VPN и проверки скорости узлов.
  • Затем проверьте старт VPN, сайты, DNS-пути, каждый дополнительный слушатель и FakeDNS. Успешное построение не проверяет сеть, разрешения и привязку портов. Windows/Linux и платформенные функции Apple требуют проверки на соответствующих системах.

Fragment

Расширенный шаблон может определить freedom-outbound с tag fragment; компилятор соединит с ним выбранные узлы, сохранив параметры. См. Fragment.

Общий LAN-прокси

Необязательный выбор прокси

Корневой observatory принимает probeURL/probeInterval/enableConcurrency, а routing.balancers — только стратегию proxy roundRobin/leastPing. Runtime selector/fallbackTag/subjectSelector остаются у App. leastPing при двух цепочках добавляет proxy catch-all для управляемого TUN/LAN; дополнительные входы требуют явных правил. Round robin не добавляет catch-all. Поведение.

Вспомогательные Freedom-outbounds также допускают streamSettings.finalmask; параметры масок проверяет встроенный Core. Это не открывает произвольные network/security узла или физический интерфейс. См. Fragment.

Последнее обновление