访问验证

Shadowrocket 配置规则怎么写:Config、规则顺序与生效排查

更新于 2026-11-12 · liuheng2024.store

简答:Shadowrocket 规则写在当前配置文件的 [Rule] 区域,基本格式是“规则类型,匹配条件,策略”。写完后要在 Home → Global Routing 中选择 Config,并确认当前启用的配置文件;如果规则不生效,优先检查 Config、规则顺序和策略,再检查 DNS 与连接。最常见的错误是把例外规则放在宽泛规则后面。

定义:Shadowrocket 配置规则是一组按照先后顺序匹配域名、IP 或请求特征,并将请求交给 DIRECT、PROXY、REJECT 或自定义策略的文本规则。

先看最小模板:规则写在哪里、怎么让它生效

写了规则却不生效,多半不是语法本身,而是没有选 Config,或者把精确例外放在了 DOMAIN-SUFFIX 等宽泛规则后面。本文为第三方使用指南,Shadowrocket 的实际菜单、规则类型和按钮名称可能随当前 App 版本变化;遇到界面不一致时,以设备中显示的选项和 App 内置说明为准。

目标规则示例注意事项
单个主机直连DOMAIN,login.example.com,DIRECT只匹配这个精确域名
整个域名范围走代理DOMAIN-SUFFIX,example.com,PROXY覆盖根域名及其子域名
未命中请求兜底FINAL,DIRECT应放在规则末尾

可先用下面的语法示例测试顺序:

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,DIRECT

这不是完整配置文件,也不包含任何服务器信息。规则通常由“类型、匹配条件、策略”组成,字段之间使用英文半角逗号。相关规则说明可参考 Shadowrocket 规则与 Global Routing 说明、Shadowrocket 中文规则参考;这些页面属于公开第三方资料,不能替代 App 内置说明。

从零编辑配置:图形添加与纯文本编辑怎么选

  1. 先确认已有配置:打开 Shadowrocket 底部或首页的 Config,在配置列表中点选准备使用的文件。文件出现在列表中,不代表它已经启用。
  2. 先做备份:在修改前使用当前版本提供的复制、导出或分享配置功能保存副本。若界面没有完全相同的按钮,保留原文件内容即可,避免直接覆盖唯一配置。
  3. 选择编辑方式:如果当前版本提供规则编辑器或 Add Rule,可在配置文件的 Rule 区域逐条添加;如果提供纯文本编辑入口,则打开文件内容,查找 [Rule] 后逐行修改。公开资料显示,规则既可以在规则编辑器查看,也可以直接位于配置文件的 [Rule] 区域。
  4. 使用图形界面添加:进入 Config → 选择目标文件 → 打开规则编辑或 Add Rule → 选择规则类型、填写匹配值和策略 → 保存。新增规则通常会出现在当前列表位置,保存后仍要检查它是否位于宽规则之前。
  5. 使用纯文本编辑:在 [Rule] 下让每条规则单独占一行,例如 DOMAIN,login.example.com,DIRECT。不要把普通分流规则放进 [General] 或 [Host]。
  6. 启用并测试:回到 Home → Global Routing → 选择 Config。再次确认 Config 页面中选中的文件就是刚才修改的文件,然后重新发起同一个网页或应用请求。

服务器列表、订阅内容和配置文件是不同对象:导入订阅只负责增加或更新服务器条目,不会自动把某个配置文件设为当前规则文件。配置文件、规则区域和 Global Routing 的关系,可对照 Shadowrocket 使用说明与配置排查。

规则类型对比:DOMAIN、IP、USER-AGENT 和最终兜底

类型匹配对象适合场景限制或风险
DOMAIN一个精确域名只处理某个主机,例如登录接口不会自动覆盖其他子域名
DOMAIN-SUFFIX根域名及其子域名统一处理一个域名范围范围较宽,例外必须放在前面
DOMAIN-KEYWORD域名中包含指定字符串确实存在稳定关键词特征时使用容易误匹配无关域名
IP-CIDRIPv4 地址段已知目标网段或局域网地址不等于 IPv6,可能受 DNS 解析影响
IP-CIDR6IPv6 地址段需要处理 IPv6 目标时使用不能用 IPv4 网段代替
GEOIP目标 IP 的地理库归类做较宽泛的地区策略不是按域名注册地、语言或设备位置判断
USER-AGENT请求中的 User-Agent请求明确带有可识别 UA 时分流并非所有 App 或请求都会携带可用 UA
FINAL前面规则都未命中的请求设置默认直连、代理或拒绝策略放在中间会遮挡后续规则

常用策略包括 DIRECT、PROXY 和 REJECT。它们是处理动作,不是服务器协议名称。若写自定义策略组,名称必须与当前配置中已经定义的策略完全一致;拼写不一致会导致规则引用失败,这与规则是否命中是两回事。

iOS 常规规则不是按桌面端进程名直接分应用。实际分流通常依赖域名、IP、GEOIP、USER-AGENT、RULE-SET 或 DOMAIN-SET。USER-AGENT 只能在请求确实带有可识别 UA 时发挥作用,例如 USER-AGENT,curl*,DIRECT;它不能保证覆盖某个 App 的全部网络请求。关于匹配范围和请求特征,可参考 Shadowrocket 规则类型与策略说明。

手写规则、RULE-SET、DOMAIN-SET 和 App 分流怎么选

方式什么时候使用优点需要检查什么
手写单条规则只处理少量固定域名、网段或例外容易理解、便于逐条回滚类型、顺序、策略名称和半角标点
RULE-SET需要引用包含完整规则类型的外部规则列表适合维护较多域名、IP 或 GEOIP 规则列表地址是否可访问、内容格式是否被当前版本支持
DOMAIN-SET外部列表只提供域名,策略由当前规则行指定适合集中维护域名清单列表是否确实是域名列表,而不是带规则类型的列表
USER-AGENT请求带有稳定且可观察的 User-Agent可按请求特征处理部分流量不能当作通用的按 App 分流方案
App 分流当前版本明确提供对应入口时由 App 界面管理,减少手写规则以当前 App 的实际选项为准,不要把进程名直接填入 DOMAIN

社区配置参考中将 RULE-SET 描述为包含规则类型的外部规则列表,将 DOMAIN-SET 描述为不带规则类型前缀的外部域名列表;写法示例分别为 RULE-SET,https://example.com/list.list,PROXY 与 DOMAIN-SET,https://example.com/domains.list,PROXY。这些地址仅用于说明格式,不能直接当作可用规则源。

外部规则集与本地规则仍然要遵守当前配置中的先后顺序。若前面已经有更宽的 DOMAIN-KEYWORD、DOMAIN-SUFFIX 或 FINAL,后面的规则集可能没有机会命中。因此建议先用一两条手写规则验证逻辑,再引入规则集;规则集地址、返回内容和当前 App 的支持情况都应自行核对。

常见错误写法速查:写错在哪里、怎么改

错误写法问题改成
DOMAIN,https://docs.example.com/path,PROXY把协议和路径粘进了域名条件DOMAIN,docs.example.com,PROXY
DOMAIN-SUFFIX,example.com,PROXY使用中文逗号DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,docs.example.com:443,PROXY把端口当成域名的一部分域名规则只填写主机名;端口需使用对应端口规则
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,login.example.com,DIRECT
宽规则先命中,例外无法生效DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL 提前结束后续匹配把 FINAL 移到所有规则末尾
DOMAIN-SUFFIX,example.com,proxy策略名称大小写或拼写与配置不一致使用当前配置中真实存在的策略名称

域名规则的匹配值应是主机名,不要包含 https://、端口、路径、查询参数或完整网页地址。每条规则单独换行,逗号使用英文半角;如果复制后仍不确定,可先只保留一条 DOMAIN 和一条 FINAL 进行测试。

规则不生效:按检查、判断、处理、回滚排查

现象一:写了规则,但请求完全不按分流走

  • 检查:打开 Home → Global Routing,查看是否为 Config;再打开 Config,确认当前选中的文件就是修改后的文件。
  • 判断:如果处于 Proxy 或 Direct,当前请求不会按照这份规则文件进行常规分流;如果文件只是出现在列表中,也不代表它已启用。
  • 处理:选择正确文件,切换到 Config,保存后重新打开同一个目标请求。
  • 回滚:如果切换后出现新的连接问题,恢复原配置和原 Global Routing 模式,再逐项测试。

现象二:精确例外始终不生效

  • 检查:看它前面是否存在 DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP 或更早的规则集。
  • 判断:规则通常从上到下检查,第一条命中后,后面的规则不会自动重新接管。
  • 处理:把精确 DOMAIN 规则移到宽泛规则之前,并检查域名是否只写主机名。
  • 回滚:只移动一条规则,记录原位置;确认后再整理完整规则顺序。

现象三:日志显示有请求,但不知道命中了哪条规则

  • 检查:打开当前版本提供的 Data、请求记录或 Diagnostics,查看请求目标、匹配规则或策略字段;不同版本的字段名称可能不同。
  • 判断:如果记录只显示目标地址和连接结果,没有显示匹配规则,不要把它当成规则命中证据。可以用一条明显的临时规则,将目标交给与原策略不同的动作,再比较同一请求。
  • 处理:先确认请求目标是哪个主机,再对照规则顺序;随后分别用 DIRECT 与 PROXY 做对比,不要同时更改 DNS、节点和规则。
  • 回滚:删除临时规则,恢复原策略,并保留原配置副本。

现象四:Connectivity Test 成功,但网页仍打不开

  • 检查:Connectivity Test 位于 Home,用于按照当前 Test Method 执行连接测试;它测试的是选定测试目标和方法,不等于所有网页、DNS 查询或登录请求都成功。
  • 判断:测试成功只能说明该测试路径有结果,不能证明目标网站的规则、DNS、认证和页面资源全部正常。
  • 处理:按“连接开关与服务器 → DNS → 当前配置 → 规则命中 → 实际目标请求”的顺序检查,并保持网络和目标一致。
  • 回滚:恢复原服务器、原 DNS 和原配置,只留下一个最小规则进行复测。

关于 Connectivity Test 与实际目标访问的区别,可参考 Shadowrocket 测试方法与 Diagnostics 说明。如果已确认规则命中、策略也存在,但目标仍失败,再单独检查节点连接、DNS 解析和目标服务,不要继续盲目调整规则顺序。

发布前自查清单

  • 是否编辑了当前真正启用的配置文件?
  • Home → Global Routing 是否选择了 Config?
  • 规则是否位于 [Rule] 区域?
  • 每条规则是否单独换行,并使用英文半角逗号?
  • DOMAIN 条件是否只填写主机名,没有协议、路径和端口?
  • 精确例外是否放在 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或规则集之前?
  • FINAL 是否位于规则末尾?
  • PROXY 或自定义策略是否在当前配置中真实存在?
  • 需要按 App 判断时,是否确认了当前版本确实提供对应入口?
  • 使用 RULE-SET 或 DOMAIN-SET 时,是否核对了外部列表的格式和可访问性?
  • 是否只修改一个变量,并用同一网络、同一目标重新测试?
  • 是否保留原配置,以便失败时回滚?

完成自查后,仍应把问题拆成三层:规则是否命中、策略是否可用、目标请求是否成功。不要把 VPN 图标、Connectivity Test 成功和网页一定能打开当成同一个结论。

常见问题

Shadowrocket 的规则应该写在什么位置?

普通分流规则应写在当前配置文件的 [Rule] 区域。编辑后还要确认该文件已被选中,并在 Home → Global Routing 中选择 Config;仅仅把文件放进 Config 列表并不代表它正在生效。

DOMAIN 和 DOMAIN-SUFFIX 有什么区别?

DOMAIN 用于精确匹配一个主机名,例如 login.example.com;DOMAIN-SUFFIX 用于匹配根域名及其子域名,例如 example.com 和 www.example.com。需要设置例外时,应把 DOMAIN 放在 DOMAIN-SUFFIX 前面。

为什么写了 FINAL 后,后面的规则没有效果?

规则通常按从上到下的顺序匹配,第一条命中后就采用对应策略。FINAL 会接管前面没有命中的请求,如果放在中间,后面的规则通常没有机会执行,因此应将 FINAL 放在规则末尾。

规则里的域名可以写 https://、端口或路径吗?

不应这样写。DOMAIN 和 DOMAIN-SUFFIX 的匹配值应填写主机名,例如 docs.example.com,不要包含 https://、:443、/path、查询参数或完整网页地址。

RULE-SET 和 DOMAIN-SET 应该怎么选?

如果外部列表本身包含 DOMAIN、IP-CIDR 等规则类型,考虑 RULE-SET;如果列表只提供域名,通常考虑 DOMAIN-SET,并在当前规则行指定策略。两者都要核对列表地址、返回格式和当前 App 版本的支持情况。

Shadowrocket 能不能像桌面客户端一样按进程名分流?

iOS 常规规则主要依赖域名、IP、GEOIP、USER-AGENT、RULE-SET 或 DOMAIN-SET,并不能简单把进程名填入 DOMAIN 规则。当前版本是否提供特定 App 分流入口,应以设备中的实际界面为准;USER-AGENT 也只对能观察到稳定请求标识的流量有效。

Connectivity Test 成功,为什么网页还是打不开?

Connectivity Test 只按当前 Test Method 检查指定测试目标,不等于所有网页、DNS 查询、登录请求和页面资源都成功。应继续检查当前 Global Routing、启用的配置、目标规则、DNS、策略和实际网页请求。

相关阅读

参考资料

  1. GitHub:Shadowrocket 使用手册资料
  2. Shadowrocket 中文规则参考:匹配顺序、域名与地址规则(shadowrocketzh.com)
  3. Shadowrocket Rule Syntax:DOMAIN、DOMAIN-SUFFIX、GEOIP 与 FINAL(dark-rocket.com)
  4. Shadowrocket 使用说明:配置文件、规则分流与诊断(shadow-help.com)
  5. Shadowrocket Rules & Configuration Reference:配置结构与排错(rocket-setup.com)
  6. Shadowrocket Features and Settings:Global Routing、规则与策略(shadow-official.com)
  7. Shadowrocket Features & Settings:Connectivity Test、DNS 与 Diagnostics(shadowrocketofficial.com)
  8. GitHub:Shadowrocket 配置规则类型与 RULE-SET、DOMAIN-SET 示例
  9. shadow-help.com(shadow-help.com)