自定义规则用于决定请求采用哪一种连接策略,适合已经在 Shadowrocket 中配置好自己的服务、需要调整分流结果的用户。本文先确认 Global Routing 的工作姿态,再说明规则语法、例外顺序和 FINAL 的位置,最后给出保存与验证步骤;默认策略以当前 Config 为准,不把任何一份示例当作所有网络环境的通用配置。
Global Routing:先确认规则是否参与处理
Global Routing 是 Home 中控制整体路由方式的设置,不等同于某一条规则的策略。Shadowrocket(小火箭)的自定义规则主要在 Config 姿态下参与分流;编辑前应进入 Home → Global Routing,确认当前选项,再到 Config 核对正在使用的配置文件。默认选项以当前应用显示为准,本文的规则验证统一使用 Config。
Config
推荐按当前配置中的规则决定请求去向。选中 Config 并不代表所有请求都使用 PROXY,最终结果仍由实际命中的规则决定。
适合:编写自定义规则、验证域名例外与最终策略。
Proxy
将整体路由设为代理姿态,不按本文的常规规则列表逐条分流。可以临时用于比较同一目标经代理访问的结果,但测试后应恢复原设置。
适合:隔离规则影响,检查已有代理连接是否可用。
Direct
将整体路由设为直连姿态。此时更改常规分流规则不能作为判断规则是否正确生效的依据。
适合:检查当前网络对目标的直接访问能力。
Scene
按已配置的场景管理路由选择。排查时需要同时核对场景条件与对应动作,不能只看某一份配置中的规则文字。
适合:已经明确设置场景条件、需要按环境切换的使用方式。
On Demand 是连接触发机制,而不是 DOMAIN-SUFFIX 等规则的替代品。若断开连接后又自动建立连接,应另查 Settings → On Demand 的当前条件;若连接已经建立但请求去向不符,则优先检查 Global Routing、当前 Config 和命中规则。两类问题应分开处理。
规则语法:匹配条件与处理策略分开写
规则行由规则类型、匹配值和策略构成,常见形式是 类型,匹配值,策略。FINAL 没有匹配值,只写最终策略。编辑纯文本时使用英文半角逗号,不把网址中的协议前缀、路径或查询参数写进域名匹配值。以下内容属于配置文件的 [Rule] 段,而不是 Home 中的服务器地址栏。
| 关键字 | 示例写法 | 匹配含义 |
|---|---|---|
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 匹配 example.com 本身及其子域名,不匹配 notexample.com。 |
IP-CIDR | IP-CIDR,192.168.1.0/24,DIRECT,no-resolve | 匹配指定 IPv4 网段;no-resolve 避免仅为这条规则主动解析域名。 |
GEOIP | GEOIP,CN,DIRECT | 依据 IP 地理数据库判断地址归属,不依据网页语言或域名后缀判断。 |
FINAL | FINAL,PROXY | 接住前面均未匹配的请求,采用指定策略。 |
IP-CIDR 的 /24 是网络前缀长度,上例覆盖 192.168.1.0 至 192.168.1.255。如果只针对一个 IPv4 地址,可使用 /32。这些数值不是服务器端口;域名规则同样不应写成 example.com:443。按端口区分请求属于另一类匹配需求,不能靠修改 DOMAIN-SUFFIX 的匹配值实现。
匹配顺序:先写具体例外,再写宽泛条件
规则顺序是逐条判断的优先次序,不是系统自动计算的“最精确匹配”。在通常的规则分流过程中,请求命中前面的有效规则后就使用其策略,不再靠后面的常规规则覆盖。因此,具体域名例外应放在较大的域名范围之前,网段与地区规则放在适当位置,FINAL 留在末尾。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
这是一份用于理解顺序的片段:api.example.com 命中第一条走 DIRECT;www.example.com 命中第二条走 PROXY;直接访问 192.168.1.20 时由网段规则处理。其他请求是否命中 GEOIP 取决于目标地址和数据库结果,只有前面均未命中才落入 FINAL。example.com 是说明用域名,不代表可用服务。
- 把
DOMAIN-SUFFIX,example.com,PROXY移到精确域名规则前面,会先接住 api.example.com,使后面的 DIRECT 例外失去作用。 - 把
GEOIP,CN,DIRECT放在某些域名例外之前,可能在具备目标 IP 信息时先命中地区条件;有明确去向要求的域名应优先写出。 - 把
FINAL,PROXY写在中间,会让其后的常规规则无法承担预期的匹配作用;新增规则应插在 FINAL 前面。 - 同一域名重复出现且策略相反时,先命中的规则决定结果。排查时搜索整个规则段,而不只看刚添加的一行。
PROXY、DIRECT、REJECT:按目标选择策略
策略描述命中后的处理动作,不描述规则匹配范围。PROXY 将请求交给代理路径,DIRECT 使用当前网络直接连接,REJECT 拒绝请求。默认最终策略以当前 Config 为准;推荐先确定未分类流量的预期去向,再选择 FINAL,而不是在没有验证的情况下统一替换。
| 策略 | 适用条件 | 验证重点 |
|---|---|---|
PROXY | 该目标明确需要通过用户已有的代理服务访问。 | 核对当前选择的服务或策略组及其连接状态;规则命中不等于远端连接成功。 |
DIRECT | 局域网设备,或已经确认当前网络可以直接访问的目标。 | 检查本地路由、网络权限和目标服务本身;DIRECT 仍然需要正常的 DNS 与网络连接。 |
REJECT | 明确不希望建立连接、且已确认拒绝影响的目标。 | 先用精确 DOMAIN 范围测试,避免误拒绝登录、支付或页面依赖的公共域名。 |
FINAL,PROXY 表示未分类请求仍走代理,适合明确希望保留这种兜底行为的配置;FINAL,DIRECT 则让未分类请求直接连接,适合已经充分列出代理目标的配置。二者不存在脱离使用目标的统一优劣。若把 FINAL 设为 REJECT,所有未列出的请求都会被拒绝,新增域名也可能立刻不可用,因此不宜作为初次编写规则的起点。
DOMAIN,blocked.example.com,REJECT
DOMAIN,printer.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
上例展示同一域名范围内的策略例外,不是可直接照搬的联网方案。PROXY 的实际出口还要结合当前选中的服务和配置中引用的策略名称核对;如果规则引用自定义策略组,必须确保名称与配置定义一致。不要把 Global Routing 中的 Proxy 姿态与规则行里的 PROXY 当成同一层设置。
保存与验证:一次只改一项
验证是将“编辑内容”“当前启用文件”和“实际请求结果”对应起来的过程。开始前在 Config 保留原文件的副本,并记录原有 Global Routing 选项。本文以前提为用户已有自己的服务商与订阅,仅调整路由规则;Home 中的 Subscribe 更新与 Config 文件的更新是不同对象,刷新服务器订阅不等于已经替换正在使用的规则。
-
确认姿态
进入 Home → Global Routing → Config。记录 Home 当前选择的服务,避免规则修改与服务切换同时发生,导致结果无法比较。
-
定位文件
进入 Config,确认当前选中的配置;打开该文件的编辑入口,核对 Rule 列表或纯文本中的
[Rule]段。不同编辑视图的入口文案以当前应用显示为准。 -
添加例外
在较宽泛的规则与 FINAL 前插入一条明确目标规则。若用纯文本编辑,只修改已有
[Rule]段,不把示例重复粘贴成两个规则段。 -
保存应用
保存后回到 Config,确认仍选中修改后的文件,再返回 Home。必要时断开并重新建立连接,以新的请求验证;已有长连接不适合作为修改后立即生效的判断依据。
-
核对记录
重新访问目标,在应用的请求记录中核对目标域名或 IP、所用策略及可见的规则信息;Settings → Log 用于进一步查阅诊断信息,具体记录字段以当前界面为准。
合格的验证记录至少包含目标、期望策略和实际策略三项。例如,对自己的测试目标写明“精确域名规则期望 DIRECT,记录显示 DIRECT”;若结果是 PROXY,则先检查当前文件与上方宽泛规则,不要立即修改 DNS。本文示例推演不代表真实网络实测,也不提供可直接访问的测试服务。
DNS 与地址规则:避免把解析问题当作顺序问题
DNS 将域名转换成地址,而 IP-CIDR 与 GEOIP 需要可供判断的地址信息。DOMAIN-SUFFIX 优先依赖域名匹配,IP-CIDR 则按地址范围判断。请求是否携带域名、是否已经解析、配置中的解析选项与缓存状态,都会影响排查时能看到的信息,因此不能只凭网页是否打开来推断命中了哪条规则。
- no-resolve 的边界:
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve不会仅为匹配该条规则而主动解析域名,但它不是全局关闭 DNS,也不保证其他规则不会触发解析。 - GEOIP 的边界:地区结果来自目标 IP 和数据库。使用相同语言的两个站点可能得到不同地区结果,同一域名的不同地址也可能有不同归属。
- IPv6 的边界:
IP-CIDR示例是 IPv4 网段规则,不能当成已经覆盖 IPv6。若实际连接使用 IPv6,应另行检查相应地址规则与配置支持。 - 缓存的边界:浏览器缓存和现有连接可能让请求没有按预期重新发起。更改规则后应建立新的测试请求,必要时重新连接再观察。
推荐排查顺序是先确认姿态和文件,再确认命中规则,最后检查解析地址与服务连通性。如果实际记录已经显示期望的策略,而目标仍不可用,问题就可能位于 DNS、远端服务、TLS 或当前网络路径;此时继续调整 FINAL 的位置通常不能解决连接故障。
常见问题:规则不生效与更新覆盖
规则加了,为什么还是全部走代理?
先打开 Home → Global Routing,确认不是 Proxy,而是 Config;再到 Config 核对选中的文件。若这两项正确,查看目标是否先命中了上方 DOMAIN-SUFFIX 或其他宽泛规则,把明确的例外放到其前面,再保存并发起新请求。
FINAL 后面的规则还能起作用吗?
在本文讨论的常规规则列表中,不应依赖 FINAL 后面的规则。把全部匹配条件移到 FINAL 前面,并只保留一条明确的最终策略。检查重复 FINAL 时应搜索整个规则段,而不只检查文件底部几行。
订阅更新后,自定义规则为什么不见了?
先区分更新对象:Home 的 Subscribe 通常更新服务器信息,远程 Config 更新则可能替换配置内容。进入 Config 检查当前文件是否被更新或切换;需要稳定保留本地改动时,先保存独立副本,并在每次更新后比较规则段。
网站首页能开,登录却失败,要改 FINAL 吗?
先查看登录时新出现的域名与实际策略。登录可能使用独立域名,也可能被 REJECT 或分配到不同出口。只对已确认的相关域名添加必要例外,并放在宽泛规则前,不要直接把整套规则全部改成 DIRECT 或 PROXY。
规则维护的完成条件是结果可解释、修改可回退:每一条例外都对应明确目标,每一次验证都能指出命中位置,FINAL 的处理方向与预期一致。若仍无法解释结果,应恢复备份并逐条增加规则,而不是同时叠加多套来源不同的配置片段。更多界面入口可查阅选项手册。