本文适合已在 Shadowrocket(小火箭)中准备好自己的服务商配置、需要读懂或调整分流规则的用户。先区分域名与目标 IP,再掌握“首条命中生效、FINAL 放最后”的顺序,最后通过 Config、Global Routing 和连接记录验证结果。示例只说明规则语法,不提供连接服务;客户端买断 ≠ 线路套餐。
一、规则由匹配条件与策略组成
规则用于决定一条连接采用哪种出站策略,不负责创建可用的代理连接。常见写法是“规则关键字,匹配内容,策略”,字段之间使用英文逗号。FINAL 没有匹配内容,因此只有关键字与策略两个字段。配置文件中,这些条目通常写在 [Rule] 段。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这里的 DIRECT 表示直接连接,PROXY 表示通过代理策略出站,REJECT 用于拒绝连接。使用命名策略组时,规则末尾也可以是当前配置中实际存在的组名。不要照抄其他配置里的组名,否则可能出现策略引用无效的问题。本文示例中的 example.com 仅作语法演示,不是服务入口。
要让这些规则参与常规分流,应在 Home → Global Routing 中选择 Config,并在 Config 中确认当前使用的配置。Proxy 与 Direct 属于不同的整体路由姿态,不能用来验证同一套按域名分流的预期;Scene 则应按其场景条件另行核对。编辑了文件,不等于当前连接已采用该文件。
二、DOMAIN 系列匹配域名,不匹配网址路径
先把网址拆开看:https://api.example.com:443/account 的主机名是 api.example.com,端口是 443,路径是 /account。下面三类规则的匹配内容应填写域名或域名片段,不要附上 https://、端口和路径。它们不会依据网页标题或页面正文判断去向。
| 关键字 | 写法示例 | 匹配范围 |
|---|---|---|
DOMAIN | DOMAIN,api.example.com,PROXY | 仅完整域名 api.example.com |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | example.com 本身及其子域名 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,example,PROXY | 域名中包含 example 的目标 |
DOMAIN:给单个主机写例外
DOMAIN,api.example.com,PROXY 不会匹配 www.example.com,也不会匹配 v2.api.example.com。当只有登录接口、某个 API 或一个独立主机需要特殊策略时,完整域名匹配更容易控制范围。域名来源应以实际连接记录为依据,不要仅凭浏览器地址栏猜测所有资源的主机。
DOMAIN-SUFFIX:覆盖一个域名及其子域名
DOMAIN-SUFFIX,example.com,PROXY 可以覆盖 example.com、www.example.com 与 a.b.example.com,但不应匹配 notexample.com 或 example.com.other.test。其含义是域名层级上的后缀,而不是任意字符串结尾。通常填写 example.com,不必写成 *.example.com。
DOMAIN-KEYWORD:范围更宽,需要核对误命中
DOMAIN-KEYWORD,example,PROXY 可能同时匹配 example.com 和 myexample.test。这类规则适合确实需要按字符串覆盖的场景;如果目标只是一个确定的域名家族,优先用 DOMAIN-SUFFIX。过短的关键字会扩大影响范围,也会使后续排错更难定位。
三、GEOIP 与 IP-CIDR 匹配目标 IP
域名规则判断的是名称,IP 规则判断的是连接的目标地址。某个域名解析到哪个 IP,会受到 DNS 结果、网络环境与内容分发部署影响。因此“域名属于某个组织”与“目标 IP 在数据库中归属某个地区”是两种条件,不能互相替代。
GEOIP,CN,DIRECT
IP-CIDR,192.168.50.0/24,DIRECT
IP-CIDR,203.0.113.7/32,PROXY
- GEOIP:
CN是地区代码,匹配依据是 IP 地理数据库中的归属。它不判断页面内容、用户所在地区或域名注册信息。 - IP-CIDR:
192.168.50.0/24覆盖从192.168.50.0到192.168.50.255的地址范围;实际可连接哪些设备仍由本地网络决定。 - 单个 IPv4 地址:
/32只覆盖一个地址。203.0.113.7是文档示例地址,不应拿它测试代理服务是否可用。 - IPv6:需要检查对应的 IPv6 规则,例如
IP-CIDR6;不要把 IPv4 网段当成覆盖全部地址族的规则。
当请求最初以域名形式出现时,判断 IP 类规则可能涉及域名解析。部分 IP 类规则可以附加 no-resolve,表示不要为了这条规则额外发起域名解析;这不等于关闭 DNS,也不保证所有域名请求都能命中该条 IP 规则。入门配置建议先不添加此参数,等明确 DNS 与匹配过程后再调整。
四、首条命中生效,FINAL 负责兜底
规则通常自上而下检查,第一条满足条件的规则决定策略,不会继续向下寻找“更精确”的条目。DOMAIN 并不天然比 DOMAIN-SUFFIX 优先;如果宽范围规则放在前面,后面的精确例外就没有机会生效。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
| 目标条件 | 首先命中的条目 | 结果 |
|---|---|---|
| login.example.com | DOMAIN | DIRECT |
| img.example.com | DOMAIN-SUFFIX | PROXY |
| 其他域名,目标 IP 被归入 CN | GEOIP | DIRECT |
| 前面条件均未命中 | FINAL | DIRECT |
FINAL,DIRECT 表示其余连接直接出站;FINAL,PROXY 表示其余连接交给代理策略。这不是两种写法的优劣比较,而是不同的默认行为。若目标是“只让列出的网站走代理”,前者更符合预期;若把 FINAL 放在首行,后面的条目就失去匹配机会。
五、在 Config 中修改并验证规则
以下步骤以用户已有可用服务商配置为前提。规则决定如何选择策略,代理连接是否成功还取决于服务参数与网络条件。修改前保留原配置副本;若使用会被远程更新覆盖的配置,应先确认本地修改的保存位置与后续更新行为。
-
确认当前配置
进入 Config,确认当前选中的配置文件。通过该文件的编辑入口查看
[Rule]段,不要修改一个尚未启用的副本。 -
添加精确规则
先加一条
DOMAIN,api.example.com,PROXY形式的规则,再按需要扩展为 DOMAIN-SUFFIX。保留英文逗号,并核对策略名称确实可用。 -
选择 Config
返回 Home → Global Routing → Config,确认连接开关已开启。测试期间不要切换到 Proxy 或 Direct,否则验证条件发生变化。
-
发起新连接
保存后重新连接,并重新打开测试页面或重启测试应用,以产生新的请求。已建立的长连接不一定因规则编辑立即换路。
-
核对连接记录
在连接记录中核对目标域名、目标 IP 与所选策略;若当前记录提供匹配规则,也一并核对。将实际结果与首条命中的预期逐项比较。
验证时一次只改一个条件。先证明完整域名规则能命中,再改后缀或增加 IP 范围。网页能打开只是结果之一,不能单独证明它走了预期策略;缓存、本地连接和页面的其他域名都可能干扰判断。
六、区分规则未命中与连接失败
排错应分两步:先确定连接选择了哪条策略,再判断该策略的出站是否成功。下面是 DNS 或网络诊断中常见的错误文本,不保证在每个界面都以同样措辞出现。只有实际记录包含这些信息时,才按对应方向检查。
报错:NXDOMAIN
原因与解法:DNS 查询返回域名不存在——核对请求域名的拼写和当前 DNS 返回结果;先解决名称解析,再验证 GEOIP 或需要目标 IP 的规则。修改 FINAL 不会使不存在的域名获得有效地址。
报错:Connection refused
原因与解法:目标连接被主动拒绝,可能是端口未监听或服务策略拒绝——先确认日志中的策略与目标地址,再向自己的服务商核对服务器地址、端口和协议参数;不能仅凭此错误判定 DOMAIN-SUFFIX 写错。
如果没有报错,但记录显示走了意外的策略,优先回查四项:实际主机名是否不同、前面是否已有宽范围规则、当前选中的配置是否正确、Global Routing 是否为 Config。不要为了消除超时而一次加入大量宽泛规则,否则会丢失对照依据。
七、常见规则疑问
写了 DOMAIN-SUFFIX,为什么登录页面仍不对?
重新发起登录并查看连接记录。登录可能跳转到另一个域名,或精确规则被前面的条目覆盖。先为记录中的实际主机添加 DOMAIN 测试,再决定是否扩大后缀范围。
GEOIP,CN,DIRECT 能替代所有域名规则吗?
不能。它判断目标 IP 的数据库归属,不判断网站内容或用途。需要固定按域名选择策略的请求,应在 GEOIP 之前放置对应的 DOMAIN 或 DOMAIN-SUFFIX 规则。
订阅更新后,为什么规则看起来没有变化?
连接信息订阅与 Config 中的规则文件是不同对象。先在 Config 检查当前文件的 [Rule] 内容,不要把 Home 中连接列表更新成功当成规则已经更新的依据。
打开 On Demand,会自动修正规则吗?
不会。Settings → On Demand 控制按条件触发连接,不负责重排规则或选择域名范围。需要检查规则时,仍应核对 Config 的内容与 Home → Global Routing 的当前姿态。
把 FINAL 改成 PROXY,就能证明代理正常吗?
不能。FINAL 只是给未命中请求指定策略。先确认连接确实采用 PROXY,再核对自己的服务商配置和实际出站结果;测试结束后恢复符合日常需求的兜底策略。