3x-ui Admin Guide
Xray JSON

routing: маршрутизация

Xray JSON. Глава 34 из 38.

routing: маршрутизация

Цель

Разобрать блок routing: как Xray выбирает outbound для каждого соединения и почему порядок правил влияет на безопасность, диагностику и производительность.

Теория

Routing отправляет inbound data через разные outbound connections на основе правил. Xray проверяет правила сверху вниз. Когда найдено первое подходящее правило, соединение отправляется в указанный outboundTag или balancerTag.

Если ни одно правило не совпало, трафик отправляется через первый outbound. Это делает routing и порядок outbounds связанными частями одной логики.

История

Routing нужен для split tunneling, блокировок, разделения трафика по доменам, IP-диапазонам, портам, inbound-тегам, пользователям и protocol-сигнатурам. Без routing Xray был бы простой точкой проксирования, а не гибким traffic router.

Архитектура

Типовая структура:

json
{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "domain": ["domain:example.com"],
        "outboundTag": "proxy"
      },
      {
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ],
    "balancers": []
  }
}

Схема:

code
inbound tag + destination + sniffing + DNS strategy
  -> routing rules top-to-bottom
  -> outboundTag / balancerTag
  -> outbound

Настройка

Перед настройкой нужно:

  • определить default outbound;
  • описать исключения;
  • расположить более специфичные правила выше общих;
  • выбрать domainStrategy;
  • проверить, когда нужен DNS для IP-match;
  • убедиться, что outboundTag существует.

Разбор параметров

ПараметрНазначениеКомментарий
domainStrategyстратегия domain/IP matchingAsIs, IPIfNonMatch, IPOnDemand
rulesмассив правилпроверяются сверху вниз
balancersбалансировщики outboundприменяются через balancerTag
domainусловия по доменамdomain:, full:, keyword:, regexp:, geosite:
ipусловия по IPCIDR, geoip и другие подтвержденные форматы
portусловия по портудиапазоны и списки портов
networkTCP/UDP-условиеполезно для разделения транспортов
inboundTagmatch по входящему тегусвязывает inbound с routing
outboundTagtarget outboundдолжен совпадать с outbounds[].tag

Типовые ошибки

  • поставить широкое правило выше точного;
  • забыть, что первое совпадение завершает выбор;
  • указать outboundTag, которого нет;
  • не учитывать default outbound;
  • включить IP-стратегию DNS без понимания DNS-блока;
  • ожидать domain matching без domain или sniffing-информации.

Безопасность

Routing может как защищать от утечек, так и создавать их. Если default outbound является direct, то все несовпавшие правила уйдут напрямую. Если DNS-стратегия не соответствует задаче, маршрутизация по IP может работать не так, как ожидается.

Чек-лист

  • Понятен default outbound.
  • Правила упорядочены от частных к общим.
  • Все outboundTag существуют.
  • domainStrategy выбран осознанно.
  • DNS-блок согласован с routing.
  • Split tunneling проверен на утечки.
  • Логи позволяют увидеть выбранный маршрут.

Источники для сверки

  • Project X: Routing — https://xtls.github.io/en/config/routing.html