Shadowrocket 规则写法入门:DOMAIN-SUFFIX、GEOIP、FINAL 等关键字怎么匹配

用示例讲清 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 各自匹配的对象、自上而下的生效顺序和常见误写。

本文速览

本文适合已经在 Shadowrocket(小火箭)中配置好自己已有服务、准备调整规则分流的用户。先确认 Global Routing 使用 Config,再区分域名规则与 IP 规则,最后用命中记录验证顺序。文中配置片段只说明语法,不替代完整配置,也不提供节点或订阅。

先确认规则是否参与路由

规则决定某条连接采用哪种策略,不负责创建可用的代理服务。即使写好了 DOMAIN-SUFFIX,example.com,PROXY,也仍需已有可用的代理配置。本文以用户已经有自己的服务商与订阅为前提,重点是检查配置中的 [Rule] 部分。

在 Home → Global Routing 中,Proxy、Direct、Config、Scene 不是同一种工作方式。Proxy 与 Direct 适合临时对照测试;验证当前配置中的规则时,应选择 Config。Scene 用于按场景切换路由行为,不能仅凭显示 Scene 就断定某份规则正在生效。

  1. 备份配置

    进入 Config,确认当前正在使用的配置文件,先保存副本。记录原来的 Global Routing 选择,避免测试后无法恢复。

  2. 选择规则模式

    回到 Home → Global Routing → Config。随后检查 Config 中启用的文件是否就是准备修改的那一份。

  3. 修改单条规则

    在 Config 中打开该文件的编辑功能,定位 [Rule],一次只新增或调整一条规则。保留原有其他配置段。

  4. 保存后验证

    保存配置,重新建立测试连接,查看连接记录中的目标、命中规则与采用的策略。若旧连接仍在复用,先关闭对应页面再重新访问。

域名规则:完整匹配、后缀匹配与子串匹配

常见规则按“类型、匹配值、策略”书写,字段之间使用英文逗号。域名匹配值只写主机名,不带 https://、路径、查询参数或端口。访问 https://api.example.com:443/v1 时,域名规则处理的是 api.example.com,不是整段地址。

关键字示例匹配范围
DOMAINDOMAIN,api.example.com,PROXY只匹配 api.example.com,不包括其子域名。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,DIRECT匹配 example.com 及其子域名,不匹配 notexample.com。
DOMAIN-KEYWORDDOMAIN-KEYWORD,example,PROXY匹配域名中包含 example 的目标,覆盖范围比后缀规则更宽。

DOMAIN-SUFFIX 通常不需要在前面加点,也不需要写成 *.example.com。后缀匹配已经包含域名本身与其子域名。把星号写进普通后缀字段,并不能按预期创建一个通配表达式。

DOMAIN-KEYWORD 适合明确需要子串匹配的场合,不能当作精确域名规则的简写。例如关键字 example 也可能匹配 example-news.test。若只希望覆盖一个站点及其子域名,优先使用 DOMAIN-SUFFIX;只处理一个主机时使用 DOMAIN。

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

上例中,api.example.com 使用 PROXY;www.example.com 使用 DIRECT;example-news.test 才会继续命中关键字规则。这些保留域名只用于讲解语法,不保证对应网页可访问。

IP-CIDR 与 GEOIP:匹配地址,不匹配网址

IP-CIDR 按 IPv4 地址段匹配。192.168.0.0/16 表示覆盖从 192.168.0.0 到 192.168.255.255 的地址范围。单个 IPv4 地址可用 /32 表示。这里的前缀长度描述网络范围,不是端口号。

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,203.0.113.8/32,PROXY,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

片段中的 203.0.113.8 是文档示例地址,不是可用服务地址。no-resolve 表示不要仅为了匹配这条 IP 规则而主动进行域名解析;它不表示整个应用停止 DNS,也不表示所有经过该规则的请求都不需要解析。如果目标地址已经可用,仍可参与地址匹配。

写法判断依据需要注意
IP-CIDR,192.168.0.0/16,DIRECT目标 IPv4 地址是否落在该地址段。不要将网页路径或端口写入地址段字段。
GEOIP,CN,DIRECT目标 IP 在所用地理数据库中的归属。不以网页内容、域名后缀或用户所在位置为判断依据。
FINAL,PROXY此前规则均未命中。没有匹配值字段,直接填写策略。

GEOIP 的结果取决于 IP 地理数据库。一个域名可能因 CDN、DNS 应答或网络环境变化而对应不同地址,因此同一域名的 GEOIP 结果可能变化。如果目标必须固定采用某种策略,通常应在 GEOIP 前写清楚域名规则,而不是仅依赖地址归属。

从上到下匹配,FINAL 放在最后

对本文这些常规规则,同一条连接按规则排列顺序检查,命中后采用对应策略,并不会继续寻找“看起来更精确”的下一条。规则类型本身没有自动优先级;把精确的 DOMAIN 写在宽泛的 DOMAIN-SUFFIX 之后,可能导致它永远没有机会生效。

取得目标 顺序检查 首条命中 采用策略 建立连接
[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

DIRECT 表示直接连接目标,不等于“绕过所有系统网络条件”;PROXY 表示交给代理路径,也不等于“连接一定成功”。如果策略位置填写自定义策略组名称,该名称必须与配置中已有定义完全一致。本文只使用 DIRECT 与 PROXY,避免引入未定义的组名。

规则不生效时,分开检查匹配与连接

“网页打不开”不能直接证明规则写错。先看请求是否命中预期规则,再看该策略能否建立连接。若命中记录已经显示 PROXY,但请求仍然失败,应检查已有代理服务及其连接参数;继续增加同类域名规则通常不会解决传输问题。

  1. 确认 Home → Global Routing → Config,且编辑文件与 Config 当前启用文件一致。
  2. 使用同一个完整地址发起新请求,记录实际主机名。网页跳转、图片和接口可能使用不同域名,应逐条检查。
  3. 检查命中行是否被更靠前的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或 FINAL 截住。
  4. 若命中正确,临时对照 Proxy 与 Direct 的访问结果,测试完恢复 Config。一次只改一个条件。

下面的错误标识来自 Apple 网络错误体系,只在诊断信息确实出现相应原文时使用。它们表示网络请求失败的类别,不是 Shadowrocket 规则解析器的语法报错,也不能单凭错误码确定责任环节。

报错:NSURLErrorDomain Code=-1001

原因与解法:请求在时限内未完成。先核对命中规则与实际采用的策略,再用同一目标对照 Proxy、Direct,并检查本地网络;不要把超时直接等同于 FINAL 写错。

报错:NSURLErrorDomain Code=-1003

原因与解法:系统无法找到指定主机。先检查请求域名拼写与 DNS 解析结果,再核对 DOMAIN 字段是否误填了网址路径;新增 GEOIP 规则不能替代域名解析排查。

常见文本误写还包括中文逗号、把 FINAL,PROXY 写成三字段格式、将 https://example.com 放进 DOMAIN-SUFFIX,以及使用不存在的策略组名。保存前逐行对照字段,不要一次替换整份配置。若配置由远程来源维护,还应确认后续更新是否会覆盖本地修改,并保留可恢复的副本。

常见问题:改一条规则后如何确认结果

已经写了 DOMAIN,为什么子域名没生效?

DOMAIN 只匹配完整主机名。要同时覆盖 example.com 和 api.example.com,使用 DOMAIN-SUFFIX,example.com,DIRECT;若 api.example.com 需要例外策略,把对应 DOMAIN 放到它前面。

只想处理 HTTPS,域名后面加 :443 可以吗?

不要在本文的域名规则字段中加 :443。DOMAIN 与 DOMAIN-SUFFIX 依据主机名匹配,不区分该主机使用 80 还是 443 端口。先用纯域名规则验证,再按实际需求查阅端口相关规则说明。

改成其他协议后,规则也要重写吗?

Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 描述的是代理连接方式,不是域名匹配类型。若策略引用仍然有效,通常不必因协议变更重写 DOMAIN-SUFFIX;应单独核对对应服务的地址、端口和认证参数。

更新已有订阅,会自动得到正确规则吗?

不要将代理列表更新与 Config 规则更新混为一谈。更新已有订阅后,回到 Config 检查当前文件,再到 Home → Global Routing 确认 Config。是否包含规则、是否覆盖本地内容,取决于导入内容的类型与更新方式。

最终验收应包含三个结果:请求的真实主机名正确、命中的规则行正确、采用的策略符合预期。随后再验证页面与接口能否完成请求。这样可以将“规则选择错误”与“选中路径不可用”分开处理,避免靠反复切换来碰运气。

正版核对与上手

Shadowrocket 是 Apple 平台的闭源商业应用,以 iPhone/iPad 为主要使用设备,唯一获取入口是 App Store。核对开发者 Shadow Launch Technology Limited 与应用 ID 932747118;系统要求、兼容性与购买适用范围以 App Store 页面标注为准。客户端一次性买断 ≠ 线路套餐。本站不提供、不销售、不推荐节点或订阅。

去正版核验页 看教程
正版核对与下载