Shadowrocket 规则写法入门:DOMAIN、DOMAIN-SUFFIX、GEOIP、FINAL 逐条解释

逐条说明 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 各自匹配什么、按什么顺序生效,以及 PROXY、DIRECT、REJECT 三种策略怎么搭配。

本文速览

本文适合已完成首次连接、准备编辑 Config 的用户。先区分匹配条件与执行策略,再用六类规则理解从上到下的匹配过程。示例只用于解释语法,不是一份可直接替换现有设置的完整配置;需要代理连接时,以用户已有自己的服务商、服务器与订阅为前提。

一、先确认 Global Routing,再修改 Config

Shadowrocket(小火箭)的规则回答两个问题:这条连接符合什么条件,以及符合条件后走哪种策略。规则不会创建服务器,也不会把不可用的服务器变成可用。开始修改前,应先确认 Home 中已经选中可用服务器,并完成基本连接测试。

Home 管理服务器与连接状态,Config 管理配置文件,Settings 管理应用设置。要按配置规则分流,在 Home → Global Routing 中选择 Config。只编辑文件、没有启用对应配置,不能据此判断规则是否有效。

姿态主要作用本篇检查方式
Config按当前配置的规则决定策略。规则测试使用此姿态。
Proxy以代理方式处理流量,而非按本文的域名规则逐条分流。可辅助比较代理链路是否可用。
Direct以直连方式处理流量。不能用它验证某条 PROXY 规则是否命中。
Scene按已配置的场景设置决定路由行为。先检查场景配置;学习单份规则时使用 Config。

On Demand 决定何时建立或断开连接,不代替域名与 IP 规则。若连接会自动恢复,另行检查 Settings → On Demand。不要把自动连接现象误判为某条 DOMAIN 规则触发了连接。

二、一条规则的结构与匹配顺序

多数基础规则使用“类型、匹配值、策略”的逗号分隔结构。规则放在配置的 [Rule] 段内,通常按从上到下的顺序检查。先命中的规则决定该连接的策略,后面的更具体规则不会自动覆盖它。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

在这段示例中,login.example.com 先命中第一行,使用 DIRECT。www.example.com 没有命中第一行,随后命中第二行,使用 PROXY。其他未匹配连接由 FINAL 接管。若把第二行移到第一行之前,登录域名也会先命中后缀规则。

连接进入 读取目标 顺序匹配 确定策略 建立出站
6 类
本文讲解的基础规则类型
3 种
基础策略:PROXY / DIRECT / REJECT
32 位
IPv4 地址长度,/32 表示单个地址

这些数字描述本文涉及的基础知识,不表示 Shadowrocket 只支持六类规则。编辑时使用英文逗号,每行写一条规则;避免从富文本复制全角标点或不可见字符。

三、DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD

域名规则匹配连接关联的主机名,不匹配网页路径。填写 example.com,而不是包含协议、端口与路径的整条网址。访问路径中的单词也不会因为出现于 URL 中就命中 DOMAIN-KEYWORD。

写法会匹配不会匹配
DOMAIN,example.com,DIRECTexample.comwww.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com、api.example.comnotexample.com
DOMAIN-KEYWORD,example,PROXY主机名中包含 example 的域名仅网页路径包含 example 的请求

DOMAIN:单个主机的精确例外

DOMAIN 适合只调整一个主机,例如让 login.example.com 直连,而其他子域名继续采用代理。它不会自动包含该主机的下级域名。精确例外应放在覆盖范围更大的规则之前。

DOMAIN-SUFFIX:根域名及其子域名

DOMAIN-SUFFIX 适合按域名边界管理一组主机。写 example.com 即可,不需要增加 *.。它同时覆盖根域名与子域名,但不会把 notexample.com 当作同一后缀。

DOMAIN-KEYWORD:主机名子串

DOMAIN-KEYWORD 的范围更宽,容易覆盖没有预料到的域名。除非确实需要按子串匹配,否则优先使用 DOMAIN 或 DOMAIN-SUFFIX。关键字规则一旦放在前面,后面的精确规则同样没有优先权。

四、GEOIP 与 IP-CIDR:按目标 IP 判断

IP 规则使用目标地址,而不是网址文字。访问域名时,可能需要先取得 DNS 解析结果,才能进行 IP 匹配。解析结果变化、地址库差异与 CDN 调度,都可能影响实际命中情况。

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

GEOIP,CN,DIRECT 表示当目标 IP 在所用地址库中归属 CN 时使用 DIRECT。它仅使用目标 IP 的地址库归属,不会分析网页内容或判断经营者所在地。一个中文网站可能使用不同地区的地址,一个域名也可能解析出多个地址。

如果目标由 IPv6 承载,只有 IPv4 的 IP-CIDR 规则不足以覆盖该连接,应另行检查相应 IPv6 规则与网络设置。不要因为 IPv4 示例正确,就认定所有地址族都已处理。

五、PROXY、DIRECT、REJECT 与 FINAL 的搭配

匹配类型与策略是两层概念。DOMAIN-SUFFIX 决定“匹配哪些域名”,PROXY 决定“匹配后如何处理”。将规则最后一项从 DIRECT 改为 PROXY,会改变出站方式,不会扩大域名匹配范围。

策略执行含义检查重点
PROXY交给代理出站处理。确认当前服务器或相关策略选择可用。
DIRECT直接连接目标。确认当前网络能直接访问目标。
REJECT拒绝符合条件的连接。确认拒绝范围不会覆盖必要接口。

FINAL 是兜底规则,没有单独的域名或 IP 匹配值,写法为 FINAL,策略。应把它放在规则段末尾。若把 FINAL 放到中间,后面的规则便无法接管已经由它兜底的连接。

[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

这段示例先处理明确例外,再处理较宽范围,最后兜底。ads.example.com 被拒绝;login.example.com 直连;其余属于 example.com 的域名交给代理。即使它们解析到 CN 地址,也已经由前面的域名规则决定策略,不会继续落到 GEOIP。

六、在 Config 中保存、启用与验证

修改前保留当前可用配置的副本。服务器订阅更新与规则文件更新不是同一件事:Home 中服务器列表刷新成功,不代表 Config 中的规则发生变化。远程维护的配置也可能在更新时覆盖本地修改,编辑前应确认文件来源。

  1. 确认基线。在 Home 选中服务器,打开连接开关并运行 Connectivity Test。测试成功只说明相应测试链路可用,不代表每个网站都能访问。
  2. 找到当前配置。进入 Config,核对当前启用的文件。通过该文件的编辑入口检查 [Rule] 段,保留其他配置段,不要用本文片段替换整份文件。
  3. 只改一个变量。增加一条需要的 DOMAIN 或 DOMAIN-SUFFIX 规则,放到相关宽泛规则与 FINAL 之前,然后保存。
  4. 确认生效条件。启用修改后的配置,并在 Home → Global Routing 中选择 Config。需要时重新建立连接。
  5. 重新发起请求。关闭原有页面或相关应用连接后再测试。已有长连接可能沿用建立时的出站选择,不能代表新规则的结果。
  6. 记录实际证据。结合连接记录或日志,核对目标主机名、目标 IP 与采用的策略。若无改善,恢复上一份可用配置,再检查 DNS 或出站链路。

测试时还应区分端口与规则范围。HTTPS 常用目标端口 443,但 DOMAIN,example.com,DIRECT 本身没有“只匹配 443”的限制。若网页正常、另一个使用不同端口的服务失败,应检查服务监听与网络可达性,而不是直接判定域名规则失效。

七、连接失败时,先区分报错与规则命中

报错原文描述连接失败的某个环节,不会直接证明某条规则写错。下面两种是网络诊断中可能出现的错误文本,不是 Shadowrocket 独有的规则语法提示。应结合失败目标和实际出站判断原因。

报错:Connection refused

原因:连接被目标端或中间设备主动拒绝,可能是端口没有监听。

解法:先确定失败目标是代理服务器还是网站,再核对相应地址与端口;确认规则命中后,检查该出站对应的服务状态。

报错:Operation timed out

原因:连接在等待期限内没有完成,可能涉及网络路径、过滤或目标不可达。

解法:先运行 Home 中的 Connectivity Test,再分别核对 DIRECT 与 PROXY 路径;一次只调整一条目标规则,避免同时更换 DNS 与服务器。

REJECT 的预期结果就是阻止连接。若必要资源被拒绝,应缩小拒绝规则的范围,或把明确允许的精确例外放在它之前。反复重试不会让一条已命中的 REJECT 规则自动改为 PROXY。

八、规则设置常见问题

为什么加了 DOMAIN 规则,子域名还是没有变化?

DOMAIN 只匹配填写的主机名。需要覆盖根域名及其子域名时,改用 DOMAIN-SUFFIX,并检查该规则是否位于其他可命中规则之前。仅有一个子域名需要例外时,为它单独增加 DOMAIN 即可。

规则写在最后一行,为什么一直不生效?

先检查它是否位于 FINAL 之后。把具体规则移到 FINAL 前面,再检查更靠前的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 是否已经命中。规则不是按“越靠后优先级越高”的方式覆盖。

GEOIP 已写 CN,为什么这个网站仍然走 PROXY?

先检查前面是否已有域名规则选择 PROXY,再看目标实际解析地址及地址库归属。GEOIP 的判断依据是 IP 地址库,而非网页内容。若只是一个已知域名需要固定出站,可在前面增加明确的 DOMAIN 规则验证。

订阅刷新成功,为什么规则还是旧的?

服务器订阅与 Config 文件分别检查。先到 Config 确认启用的文件及其规则内容,再判断是否需要更新对应的远程配置。更新前保存本地修改,避免把订阅刷新当作规则更新操作。

浏览器正常,应用里的图片仍然打不开怎么办?

检查图片请求的实际主机名,不要只测试主站。重新发起请求后查看连接记录,确认是否存在另一个资源域名、不同目标 IP 或被 REJECT 的接口,再为明确目标增加最小范围的例外。

Shadowrocket 正版下载