XRay服务器路由规则失效:指定域名/正则未走直连问题排查
问题描述
我在一台安装了XRay代理的服务器上配置路由规则,想要让特定域名或域名掩码不走代理,但配置后未生效。通过NekoBox客户端配置可正常工作,但我想在服务器端统一配置以避免逐个客户端设置。访问ifconfig.me时仍显示代理IP(185.255.111.111)。
配置文件路径为/usr/local/etc/xray/config.json,路由设置如下:
"routing": { "rules":[ { "type": "field", "ip": [ "geoip:private", "geoip:ru" ], "domain": [ "domain:vk.com", "domain:ifconfig.me", "ifconfig.me", "regexp:\\.ru$" ], "outboundTag": "direct" } ], "domainStrategy": "IPIfNonMatch" }
请问我哪里配置错误?
问题分析与修正方案
- 规则逻辑错误:你的路由规则把
ip和domain放在同一条规则里,XRay的field规则是逻辑与关系,意味着请求必须同时匹配IP列表和域名列表才会走direct,这完全不符合你的需求,必须把IP和域名规则拆分成独立的规则条目。 - 域名格式冗余/错误:
- 重复添加了
ifconfig.me,domain:ifconfig.me已经是正确的精确域名匹配格式,不需要单独添加无前缀的ifconfig.me; - JSON中反斜杠需要转义,正则表达式
regexp:\.ru$应写成regexp:\\.ru$,否则正则无法正常生效。
- 重复添加了
- 拆分规则后规避domainStrategy干扰:
IPIfNonMatch会让未匹配域名规则的请求先解析IP再匹配IP规则,拆分独立规则后可以避免这种逻辑带来的匹配冲突。
修正后的路由配置:
"routing": { "rules": [ // 匹配私有IP和俄罗斯IP的请求走direct { "type": "field", "ip": [ "geoip:private", "geoip:ru" ], "outboundTag": "direct" }, // 匹配指定域名和.ru后缀域名的请求走direct { "type": "field", "domain": [ "domain:vk.com", "domain:ifconfig.me", "regexp:\\.ru$" ], "outboundTag": "direct" } ], "domainStrategy": "IPIfNonMatch" }
- 配置修改完成后,重启XRay服务使配置生效:
systemctl restart xray
内容的提问来源于stack exchange,提问作者Xhonor
相关产品推荐
相关产品推荐

