Shadowrocket(小火箭)的规则由匹配条件与执行策略组成。本文适合已经有自己的服务商与订阅、准备调整配置文件的用户:先确认 Global Routing 使用 Config,再按“精确例外在前、宽泛条件在后、FINAL 最后”的顺序整理规则,最后用同一个目标请求核对命中结果。示例仅说明语法,不提供节点或订阅。
一、先确认 Global Routing,再检查规则
规则写进文件,并不等于当前请求一定按该文件分流。Home 用于管理连接与服务条目,Config 用于管理配置文件,Settings 用于应用设置。排查时先确认连接所使用的配置,再查看 Home → Global Routing。本文的规则解释以 Config 姿态为前提,不适用于用 Proxy 或 Direct 临时覆盖分流的情况。
Config
推荐依据当前配置里的规则决定请求策略。最终走 PROXY、DIRECT 还是 REJECT,取决于实际命中的规则,而不是由这个姿态预先决定。
适合:编写规则、验证命中顺序与日常按配置分流。
Proxy
以代理姿态处理流量,不按本文的逐条规则结果进行常规分流。可以用于对照同一目标通过代理时是否能连接,但不能代替规则验证。
适合:短时对照代理连接与 Config 分流的差异。
Direct
以直接连接姿态处理流量。若当前处于 Direct,单纯在配置中增加一条 PROXY 规则,不能作为规则已经生效的证据。
适合:对照本地网络直接访问目标的结果。
Global Routing 中的 Scene 涉及场景选择,应核对场景当前采用的设置;它不是可以写在 [Rule] 内的规则关键字。为减少变量,初次验证规则时明确切到 Config。Settings → On Demand 控制按条件触发连接的行为,也不负责改变规则的先后顺序。
判断:先固定姿态,再改一条规则
若切换到 Config 后结果才发生变化,应先核对原来的 Global Routing 或场景设置;不要同时改 DNS、服务条目和规则顺序,否则无法确定是哪项修改起作用。
二、规则语法:条件在前,策略在后
配置文件中的规则位于 [Rule] 段。多数常见规则使用“类型,匹配值,策略”的结构,使用英文半角逗号分隔。下面三行分别展示精确域名、域名后缀与最终策略;示例域名用于说明,不能当作实际业务清单直接照搬。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
| 策略 | 执行含义 | 检查重点 |
|---|---|---|
PROXY | 使用代理路径处理请求。 | 核对当前选中的代理是否可用;若配置使用自定义策略组,还要核对组内选择。 |
DIRECT | 直接连接目标,不通过代理策略。 | 目标必须能从当前本地网络访问;命中 DIRECT 不代表一定能成功连接。 |
REJECT | 拒绝匹配到的请求。 | 确认条件足够精确,避免拦住登录、图片或其他必要依赖。 |
PROXY 不是服务地址,也不是协议名称。Shadowsocks、VMess、VLESS、Trojan、Hysteria2 与 WireGuard 属于连接协议的范畴;规则决定请求使用哪种策略,服务条目再提供实际连接参数。不要把协议名、订阅地址或服务器端口直接填到规则的策略位置。若引用自定义策略组,其名称必须与配置中定义的名称一致。
三、匹配顺序:上方命中后,下方不再补判
规则从上到下依次检查,命中后执行对应策略。它不是“越精确越自动优先”,也不是把所有命中结果合并。上面的示例中,api.example.com 先命中 DOMAIN,因此使用 PROXY;img.example.com 不满足第一行,随后命中 DOMAIN-SUFFIX,因此使用 DIRECT。
- 先放精确例外。单独处理的完整域名可以放在宽泛后缀前,例如把
DOMAIN,api.example.com,PROXY放在DOMAIN-SUFFIX,example.com,DIRECT之前。 - 再放范围规则。DOMAIN-SUFFIX 同时覆盖指定域名本身及其子域名。
example.com会覆盖example.com与a.example.com,但不是任意包含这段文字的域名。 - 谨慎放置拒绝规则。若先写
DOMAIN-SUFFIX,example.com,REJECT,后面针对api.example.com的放行规则便没有机会执行。 - 最后放 FINAL。当前面的条件均未命中时,再进入最终策略;FINAL 后面的规则无法承担正常的后续匹配工作。
将前两行交换,就会得到不同结果。下面的写法会使 api.example.com 先命中第一行并直接连接;第二行虽然更精确,仍不会推翻已经得到的结果。
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN,api.example.com,PROXY
FINAL,PROXY
四、FINAL 兜底与 IP 规则怎样配合
FINAL 不带域名或网段参数,正确结构是 FINAL,策略,例如 FINAL,PROXY 或 FINAL,DIRECT。它不是失败重试机制:某条 PROXY 规则已经命中但连接失败,不会因此继续向下找到 FINAL 改走 DIRECT。兜底针对的是“没有匹配条件命中”,不是“连接没有成功”。
| 规则写法 | 匹配依据 | 容易混淆的地方 |
|---|---|---|
DOMAIN-SUFFIX,example.com,PROXY | 请求可识别的域名后缀。 | 匹配值不写 https://,也不包含网页路径。 |
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 目标 IPv4 地址是否处于指定网段。 | /16 表示网段前缀,不是端口;该例覆盖 192.168.0.0 至 192.168.255.255。 |
GEOIP,CN,DIRECT | 目标 IP 在地理位置数据库中的归属。 | 不依据网页内容、域名后缀或用户所在地判断。 |
FINAL,PROXY | 前面的规则均未命中。 | 不需要再填匹配值,应放在最后。 |
no-resolve 用于避免为了匹配这条 IP 规则而额外发起域名解析。它不等于关闭整个应用的 DNS,也不会让域名自动变成 IP。若请求本身已经携带可用目标 IP,仍可按该 IP 检查;若只有域名且尚无可用 IP,就不能把这条规则当作必然命中的条件。
GEOIP 的结果受目标 IP 与本地数据库影响,同一域名使用不同解析结果时,命中的地域条件也可能不同。对必须采用固定策略的少数业务域名,优先写明确的 DOMAIN 或 DOMAIN-SUFFIX 例外,再安排 GEOIP 等较宽条件。不要把“解析成功”“匹配规则”和“建立连接成功”当作同一件事。
[Rule]
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
上面的片段展示一种排列顺序,不是完整配置,也不是适用于所有网络的推荐清单。采用前应确认局域网网段、目标域名与最终策略都符合自己的需要。若目标实际使用 IPv6,仅有一条 IPv4 的 IP-CIDR 规则不能覆盖对应 IPv6 地址,需要另行检查相关规则与网络条件。
五、保存后怎样验证命中结果
验证的单位应是一条新建连接,而不是一个已经打开的页面。浏览器可能复用旧连接,网页也可能直接显示缓存;只看页面是否仍能打开,无法判断刚才的规则是否生效。修改前先保存一份原配置,测试过程中每次只改变一个条件或一个策略。
-
确认配置
进入 Config,确认当前选用的文件。编辑该文件的
[Rule]段并保存,不要只修改另一份未启用的副本。 -
固定姿态
回到 Home → Global Routing → Config,确认选择的是 Config,而不是 Proxy、Direct 或尚未核对的 Scene。
-
重建连接
让配置重新生效后重新发起目标请求,必要时断开并重新连接。关闭测试页面的旧连接,避免把连接复用误判成新规则失效。
-
核对记录
查看请求记录中实际出现的目标域名或 IP,以及匹配规则和所用策略。若页面涉及多个域名,逐项区分主文档、登录接口与资源请求。
-
恢复测试项
记录原规则、改动内容和结果,恢复临时添加的拒绝或例外规则。不要把测试用的 REJECT 留在需要正常访问的业务域名上。
例如,已获授权的测试域名设置为 REJECT 后,新的目标请求应呈现被拒绝的结果;但页面上的旧文字仍可能来自缓存,其他域名加载的图片也可能继续显示。这是验证思路,不是本站实测数据。判断时应以对应请求的记录为依据,而不是要求整张网页立刻变成空白。
六、规则分流常见问题
FINAL,PROXY 放了,为什么有些请求还是直连?
先确认 Home → Global Routing → Config,再查看请求是否已命中前面的 DIRECT。FINAL 仅处理此前均未命中的请求。若前面存在 DOMAIN-SUFFIX、IP-CIDR 或 GEOIP 的 DIRECT 条件,应先核对这些行,而不是重复添加 FINAL。
能把网址整段复制进 DOMAIN-SUFFIX 吗?
不能按网址格式填写。将 https://api.example.com/login 中的主机名提取出来;只处理这个主机时写 DOMAIN,api.example.com,PROXY。需要覆盖根域及其子域名时才使用 DOMAIN-SUFFIX,example.com,PROXY,不要带协议、端口或路径。
命中 PROXY 却打不开,是规则顺序错了吗?
若记录已经显示预期的规则与 PROXY,分流选择这一步就已完成。接着分别检查域名解析、当前代理可用性和目标服务状态。延迟测试正常只能说明对应测试有响应,不能证明目标域名解析或目标网站访问一定成功。
加了 REJECT 后登录失败,怎样恢复?
先撤回刚加入的拒绝规则,重新建立连接并复测。若登录恢复,检查被拒绝的域名是否承载认证接口;需要放行的精确 DOMAIN 例外应放在宽泛 REJECT 之前,或者缩小拒绝条件。不要在不清楚依赖关系时拒绝整个业务根域。
整理配置时,先保证少量规则可以解释每一次测试结果,再逐步增加范围。对每条新增规则,应能回答三个问题:它匹配什么、它之前是否已有覆盖条件、命中后使用什么策略。只要这三点清楚,FINAL 就只是末尾的一项明确选择,而不是掩盖前面规则错误的补丁。
获取 Shadowrocket 与查看设置步骤
2 档获取:iPhone / iPad 版在 App Store 一次性付费 $2.99,系统要求以 App Store 页面标注为准;Mac(Apple 芯片 / Intel)、Windows、安卓、Linux 版免费。前往下载页选择设备平台,或查看入门指南中的配置步骤。本站不提供、不销售、不推荐节点或订阅,请使用自己已有的服务。