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.
Архитектура
Типовая структура:
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"domain": ["domain:example.com"],
"outboundTag": "proxy"
},
{
"ip": ["geoip:private"],
"outboundTag": "direct"
}
],
"balancers": []
}
}
Схема:
inbound tag + destination + sniffing + DNS strategy
-> routing rules top-to-bottom
-> outboundTag / balancerTag
-> outbound
Настройка
Перед настройкой нужно:
- определить default outbound;
- описать исключения;
- расположить более специфичные правила выше общих;
- выбрать
domainStrategy; - проверить, когда нужен DNS для IP-match;
- убедиться, что
outboundTagсуществует.
Разбор параметров
| Параметр | Назначение | Комментарий |
|---|---|---|
domainStrategy | стратегия domain/IP matching | AsIs, IPIfNonMatch, IPOnDemand |
rules | массив правил | проверяются сверху вниз |
balancers | балансировщики outbound | применяются через balancerTag |
domain | условия по доменам | domain:, full:, keyword:, regexp:, geosite: |
ip | условия по IP | CIDR, geoip и другие подтвержденные форматы |
port | условия по порту | диапазоны и списки портов |
network | TCP/UDP-условие | полезно для разделения транспортов |
inboundTag | match по входящему тегу | связывает inbound с routing |
outboundTag | target 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