本文适合已有自己的服务商与订阅、准备修改 Shadowrocket 规则的用户。先在 Home 核对 Global Routing 是否为 Config,再到 Config 确认当前配置,按“精确例外、宽泛范围、FINAL”整理 Rule 段,最后用新建请求核对命中记录。示例只演示匹配逻辑,不包含连接凭据。
先确认入口:选中配置,再使用 Config 分流
在 Shadowrocket(小火箭)的 Home 页面打开 Global Routing,选择 Config。随后进入 Config,确认要修改的配置已被选中;打开该配置的编辑入口,找到 Rule 段。文本配置中的段落标记写作 [Rule],规则一行一条。修改前先保存一份可恢复的副本,避免把现有可用配置直接覆盖。
Global Routing 的 Proxy、Direct、Config、Scene 不是同一种运行姿态。Proxy 与 Direct 是全局出站选择,不应用来验证某条自定义规则是否正确;本文使用 Config,让请求按所选配置分流。Scene 用于按场景采用相应设置,验证时应先把运行条件固定下来,避免场景变化同时改变结果。
- 在 Home → Global Routing 选择 Config,记录当前使用的代理选择。
- 进入 Config,核对当前配置名称,并在副本中修改 Rule 段。
- 保存配置并确认它仍为当前选中的配置,然后重新建立测试连接。
- 访问一个明确的测试目标,在 Data 的连接记录中检查目标、命中规则与出站信息;可见字段以当前界面为准。
订阅中的服务器列表与 Config 中的分流规则用途不同。更新已有订阅通常是在更新连接资料,不能据此判断 Rule 段已经改变;远程配置更新则可能替换配置内容。排查前要记录究竟更新了哪一种资源,避免把连接参数变化误认为规则顺序变化。
匹配顺序:先命中的规则决定本次策略
Rule 段按从上到下的顺序检查。某条规则命中并选定策略后,不会为了寻找“更精确”的条件继续向下比较。因此,精确规则并不天然高于范围规则;只有把它放到范围规则前面,它才有机会先被命中。
例如希望 api.example.com 使用 PROXY,而 example.com 的其他子域使用 DIRECT,可以使用下面的顺序。示例域名仅用于说明语法;验证网络连接时,应替换为你有权使用、且已知可访问的目标。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
请求目标为 api.example.com 时,第一行 DOMAIN 就会命中;目标为 www.example.com 时,第一行不匹配,再由第二行 DOMAIN-SUFFIX 命中。DOMAIN-SUFFIX 同时覆盖该域名本身及其子域,不等于任意包含这串字符的域名。
判断:例外规则放在范围规则之前
如果同一目标同时符合 DOMAIN 与 DOMAIN-SUFFIX,先调整两行的先后顺序,再测试新请求;增加一条放在后面的精确规则,不能覆盖已经命中的前置范围规则。
策略写法:PROXY、DIRECT、REJECT 只决定处理方式
规则通常由规则类型、匹配值和策略组成,使用英文逗号分隔。例如 DOMAIN,api.example.com,PROXY 中,DOMAIN 是匹配类型,域名是匹配值,PROXY 是命中后的处理策略。不要把整条网址、路径或中文逗号写入只接收域名的字段。
| 策略 | 命中后的行为 | 需要核对的条件 |
|---|---|---|
PROXY | 交给当前配置下的代理选择处理 | 代理选择可用,连接参数与服务端一致 |
DIRECT | 直接连接目标,不经代理服务器转发 | 当前网络能够直接访问目标 |
REJECT | 拒绝匹配请求 | 目标确实应被阻断,且没有误伤必要依赖 |
PROXY 命中不等于远端连接一定成功。即使规则判断完全正确,代理连接的地址、端口或认证参数错误仍会导致失败。DIRECT 也不代表请求脱离了所有系统网络设置;它只说明此处不经代理服务器转发。REJECT 则属于明确拒绝,不应把它造成的访问失败当作线路超时。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
在这段配置中,blocked.example.com 虽然也属于 example.com,仍会被第一行拒绝。若将 REJECT 行移到 DOMAIN-SUFFIX 后面,它就无法阻断这个目标。网站还可能请求独立的登录、图片或接口域名,测试时要逐条查看连接记录,而不是只观察首页能否打开。
FINAL 兜底:放在最后,不填写域名
FINAL 用于接住前面未命中的请求,不包含域名或地址条件。基本写法是 FINAL,PROXY 或 FINAL,DIRECT,不是 FINAL,example.com,PROXY。应保留一条明确的 FINAL 并放在 Rule 段末尾;把它放在中间,会使后面的规则失去匹配机会。
其余请求使用 PROXY
- DOMAIN
- blocked.example.com,REJECT
- DOMAIN-SUFFIX
- example.com,DIRECT
- FINAL
- PROXY
先处理拒绝例外和直接连接范围,其余请求交给 PROXY。
仅指定目标使用 PROXY
- DOMAIN
- blocked.example.com,REJECT
- DOMAIN-SUFFIX
- example.com,PROXY
- FINAL
- DIRECT
先处理拒绝例外和代理范围,其余请求使用 DIRECT。
以上是两套不同的分流意图,不要把两张卡的 FINAL 同时追加到一个 Rule 段。选择哪种兜底,需要依据目标在当前网络中的可达性与自己的连接要求决定。没有某条域名规则时,请求会落到 FINAL;因此,遗漏规则造成的行为变化往往首先表现为兜底策略被使用。
加入 IP-CIDR 与 GEOIP:先处理明确地址范围
域名规则处理的是域名条件,IP-CIDR 处理的是 IP 地址网段。访问本地设备时,可以把已知局域网网段写在较宽泛的地址归属规则之前。下面的 192.168.0.0/16 覆盖从 192.168.0.0 到 192.168.255.255 的地址,但不代表所有家庭网络都使用这个网段,实际应按路由器的地址规划调整。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
IP-CIDR匹配 IPv4 网段;本例针对已知局域网地址,不应直接扩展成“所有本地资源都已覆盖”的判断。no-resolve表示不要为了匹配这条 IP 规则而主动触发域名解析,不表示整个请求过程都不使用 DNS。GEOIP,CN,DIRECT根据目标 IP 的地理归属数据匹配;域名后缀和用户位置不参与这项判断。- 域名可能解析到不同地址,地址归属数据也可能与预期不一致;需要固定走向的域名,应优先使用前置的明确域名规则。
若一个请求只有域名信息,又没有可供地址规则使用的目标 IP,带 no-resolve 的局域网规则不会单独为它启动解析。相反,IP 相关判断可能涉及已有解析结果或解析过程。遇到“同一域名有时走向不同”的情况,先核对实际目标 IP 与命中记录,再考虑 DNS 或地址归属因素,不要直接认定规则顺序随机变化。
保存后验证:用三类请求区分规则错误与连接错误
每次只改一组规则,保存后重新建立请求。浏览器或应用可能复用已经建立的连接,旧连接不会因为规则文件刚刚保存就变成一次全新的匹配测试。必要时关闭测试应用的现有连接,或在合适时机断开再连接 Shadowrocket,然后重新访问目标。
- 验证精确例外。选择同时符合精确条件与范围条件的目标,检查是否命中前置的 DOMAIN,而不是后面的 DOMAIN-SUFFIX。
- 验证范围规则。选择同一后缀下另一个未列入例外的目标,检查它是否由 DOMAIN-SUFFIX 处理。
- 验证 FINAL。选择已知可访问、且不符合前面任何条件的目标,检查是否使用预定兜底策略。
- 验证 REJECT。临时使用一个可控测试目标,确认拒绝规则生效;结束后删除临时规则,避免影响日常访问。
测试记录至少写明目标域名、实际 IP、Global Routing 姿态、命中规则与结果。不要只写“打不开”。如果记录显示命中了预期规则但连接失败,应检查出站连接;如果记录显示命中了另一条规则,应先回到规则顺序和匹配条件,不要同时修改协议参数。
判断:先确认命中,再检查出站
命中规则不对时,调整配置选择、匹配范围或顺序;命中正确但访问失败时,检查 DIRECT 的网络可达性或 PROXY 的连接参数。每轮只修改一个因素,保留可恢复副本。
维护规则:更新后复查例外与兜底
远程配置更新后,应重新查看 Rule 段开头的例外规则和末尾的 FINAL,确认自定义内容没有被替换。订阅更新后则核对原先使用的代理选择是否仍有效。两者属于不同维护动作,只有把配置内容与连接资料分开记录,才能解释更新前后的行为变化。
- 保存当前可用配置副本,并记录自定义规则的用途与预期策略。
- 新增 DOMAIN-SUFFIX 前,搜索是否已有更宽的范围规则;把需要保留的精确例外放在它前面。
- 删除重复或不可达规则,确保 FINAL 下方没有仍希望生效的规则。
- 需要检查完整字段时,参阅配置字段说明;需要重新核对首次连接流程时,参阅使用教程。
规则决定请求如何分流,不提供连接服务。客户端买断 ≠ 线路套餐;本文以用户已有自己的服务商与订阅为前提。Shadowrocket 是闭源商业应用,主要用于 iPhone 与 iPad,唯一获取入口是 App Store,系统要求以 App Store 页面标注为准。