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

Маршрутизация 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 и два подходящих узла. Секретов и незаполненных параметров нет.

JSON: custom-cn.json

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

JSON: custom-protocol.json

{
  "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 сохраняются.

JSON: custom-fakedns.json

{
  "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-запросах; произвольные вспомогательные выходы не поддерживаются.

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