Shadowrocket 配置规则分流:从导入到命中验证
简答:Shadowrocket 分流要同时确认四件事:配置文件已经导入、目标文件已经选中、Home → Global Routing 已切换为 Config、实际请求记录命中了预期规则。最快做法是先用一份最小配置验证规则顺序,再根据请求记录补充真实域名;本文只讲 Shadowrocket,不含其他客户端。
定义:Shadowrocket 配置规则分流,是根据请求的域名、IP 地址段或 GeoIP 结果,把流量交给 DIRECT、PROXY、REJECT 或配置中定义的策略组处理。
先看这张 4 层状态速查卡:规则不生效先逐项打勾
本文是第三方使用指南,不是 Shadowrocket 官方页面。Shadowrocket 的节点、配置文件、Global Routing 和实际请求命中属于不同层级;只导入文件,并不能证明分流已经启用。App Store 页面列出了该客户端支持基于域名、域名后缀、关键字、CIDR IP 和 GeoIP 配置规则,也支持从 URL 或 iCloud Drive 导入规则文件,具体菜单名称仍应以设备当前界面为准。App Store 中的 Shadowrocket 功能说明
| 检查层 | 应看到的结果 | 未通过时怎么做 |
|---|---|---|
| 文件已导入 | Config 页面能看到目标 .conf 或配置 URL | 重新导入前先确认来源和链接,订阅链接不要公开分享 |
| 文件已选中 | Config 页面当前使用的是你准备修改的文件 | 检查是否误选了同名副本或内置默认文件 |
| 路由已启用 | Home → Global Routing 显示 Config | 如果是 Proxy 或 Direct,先切换为 Config |
| 规则已命中 | 新请求记录显示目标主机和预期策略 | 重新发起请求,再查规则顺序、策略名和 DNS |
先试这一步:暂时只保留一条明确的 DOMAIN 规则和一条 FINAL 兜底规则,切换到 Config 后重新访问测试域名。如果能看到命中变化,再逐步增加 DOMAIN-SUFFIX、GEOIP 和 RULE-SET,避免一次修改多处而无法判断原因。
Shadowrocket 配置规则分流的 5 步闭环
- 导入节点或订阅。在 Home 页面按当前版本显示的添加入口导入现有节点资料。节点主要负责连接出口;订阅更新成功只表示客户端重新取回了链接返回的内容,不代表配置文件中的规则、DNS 或外部规则集已经同步。完整订阅链接可能包含访问凭据,不要放进截图、公开仓库或群聊。
- 导入配置文件或规则订阅。进入 Config 页面,使用当前界面提供的 URL、文件或 iCloud Drive 导入方式。导入后保留一份备份,并检查文件中是否包含
[General]、[Proxy Group]或[Rule]等段落。节点订阅和规则配置可以是两个不同对象,不能把节点 URL 直接当成规则文件使用。 - 选中配置文件。在 Config 页面点击目标文件,使它成为当前配置。文件“已经出现在列表中”和“当前正在使用”是两个状态;如果改完内容但请求没有任何变化,先确认保存的是当前选中的文件。
- 切换到 Config 路由。回到 Home,在 Global Routing 中选择 Config。Proxy 适合临时判断代理链路,Direct 适合临时判断直连链路;只有 Config 才会按当前配置中的规则判断。不同版本的入口名称可能略有差异,以设备实际显示为准。
- 选节点并验证命中。在 Home 的 SERVER 或节点区域选择一个可用节点并开启连接,然后重新发起一个请求。不要只看连接开关或流量统计,应查看客户端提供的请求记录、Data 或 Diagnostics 页面,确认目标主机、命中的规则和最终策略。Connectivity Test 只能作为连通性辅助检查,不能替代真实目标请求。
如果 Proxy 模式可以访问,而 Config 模式不符合预期,优先检查规则顺序、当前配置文件、策略名称和 DNS;如果 Proxy 模式也失败,再检查节点参数、当前 Wi‑Fi 或移动网络。
规则匹配顺序:精确规则在前,FINAL 放最后
规则应按“更具体 → 更宽泛 → 兜底”的顺序组织。公开的 Shadowrocket 配置仓库示例采用了 [Rule] 段,并展示了 DOMAIN-KEYWORD、DOMAIN-SUFFIX、IP-CIDR、GEOIP 和 FINAL 等写法;其配置文件还包含 DNS 和 IPv6 等通用设置。Shadowrocket 配置仓库中的 default.conf
| 规则类型 | 匹配范围 | 示例 | 使用提醒 |
|---|---|---|---|
DOMAIN | 精确主机名 | DOMAIN,login.example.test,DIRECT | 适合给某个接口或登录域名设置例外 |
DOMAIN-SUFFIX | 域名本身及其子域名 | DOMAIN-SUFFIX,example.test,PROXY | 范围比 DOMAIN 宽,例外必须放在前面 |
DOMAIN-KEYWORD | 主机名包含指定字符串 | DOMAIN-KEYWORD,service,PROXY | 可能误匹配,建议先用请求记录确认 |
IP-CIDR | IPv4 或 IPv6 地址段 | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | no-resolve 用于域名请求命中 IP 规则时跳过本地 DNS 解析,不能理解为关闭所有 DNS |
GEOIP | 按目标 IP 的地理数据库结果 | GEOIP,CN,DIRECT | 受 CDN、解析结果、IPv6 和数据库变化影响 |
FINAL | 前面没有命中的请求 | FINAL,PROXY | 通常只保留一条,并放在规则末尾 |
规则示例:
[Rule]
DOMAIN,login.example.test,DIRECT
DOMAIN-SUFFIX,example.test,PROXY
DOMAIN-KEYWORD,telemetry,REJECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY这里的 DOMAIN 例外必须位于 DOMAIN-SUFFIX 前面;否则登录主机可能先被后缀规则匹配。FINAL 不是失败后的自动重试,而是前面没有命中时采用的最后策略。
两套可复制的最小模板:国内直连/海外代理与国内回程
模板一:国内目标直连,其他请求交给代理
[General]
dns-server = system, 1.1.1.1
ipv6 = false
prefer-ipv6 = false
[Rule]
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
DOMAIN-SUFFIX,example.cn,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY把 example.cn 替换为请求记录中确认过的实际域名;把 PROXY 替换为当前配置中真实存在的策略名。这个结构适合“国内地址尽量直连,未分类请求交给代理”的验证场景,但 GEOIP 不能保证覆盖所有国内服务。
模板二:海外网络访问国内目标时,将国内目标交给回程策略
[General]
dns-server = system, 1.1.1.1
ipv6 = false
prefer-ipv6 = false
[Rule]
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
DOMAIN-SUFFIX,example.cn,回国
GEOIP,CN,回国
FINAL,DIRECT这里的 回国 只是示例策略组名称,必须先在当前配置的 [Proxy Group] 中存在,或者替换为你实际使用的策略名称。模板二的逻辑是:明确的国内域名优先走回程策略,目标 IP 被 GeoIP 判定为 CN 时也交给该策略,其他请求默认直连。若某个国内服务使用海外 CDN,应以请求记录和实际目标 IP 为准补充 DOMAIN-SUFFIX 规则。
策略名不要混用:DIRECT 是直连动作,REJECT 是拒绝动作;PROXY 在配置规则中通常是策略名或策略关键字,不等同于某个固定服务器地址。若配置使用了“香港节点”“自动选择”或其他自定义组名,模板中的动作必须改成配置中已经定义的名称。
DNS、IPv6、QUIC 与按 App 分流:先知道边界再改配置
Shadowrocket 的 App Store 功能说明提到 DNS 请求记录、IPv6、DNS over HTTPS、DNS over TLS、DNS over QUIC 和 HTTPS 解密等能力,但这些选项之间不是同一个开关;是否适合启用,要结合当前网络、配置文件和目标服务判断。Shadowrocket App Store 功能列表
- DNS 分流:
dns-server只是在[General]中指定解析服务器的示例,不等于所有域名都会按照你期待的线路解析。改 DNS 后要重新发起请求,并查看目标主机和连接结果。 - IPv6:如果设备同时拿到 A 和 AAAA 记录,打开或关闭 IPv6 可能改变实际连接地址。排查时记录目标是否使用 IPv4 或 IPv6,不要只根据域名规则判断。
- QUIC/UDP:网页能通过 TCP 访问,不代表 UDP/443 或 QUIC 路径也能访问。遇到部分加载、视频初始化失败或登录异常时,应分别观察协议和请求目标。
- 浏览器安全 DNS:浏览器自带的 DoH 或 DoT 可能让浏览器解析路径与系统 DNS 不一致。遇到浏览器与其他 App 结果不同,先检查浏览器的安全 DNS 开关。
- HTTPS 解密:HTTPS 解密涉及证书安装、信任和隐私范围,不能为了验证普通分流就直接开启。本文不提供绕过证书校验的做法;没有明确需求时保持关闭。
- 按 App 分流:不要直接照抄
PROCESS-NAME。当前检索到的资料无法核实它在 Shadowrocket iOS 当前版本中的通用支持情况;iOS 应用级分流应以当前版本实际提供的功能和官方应用说明为准。 - iCloud 配置:iCloud Drive 可以作为配置文件导入来源之一,但它不是节点订阅或规则命中记录。导入后仍需单独确认文件已选中、Global Routing 已为 Config。
规则不生效时的排查清单
- 确认模式:Home → Global Routing 是否为 Config。若是 Proxy 或 Direct,先切回 Config。
- 确认当前文件:Config 页面选中的文件是否就是刚刚修改的文件,保存后是否重新加载。
- 确认实际主机:网页地址栏中的域名不一定是失败目标,页面可能继续请求登录、图片、接口、字体或 CDN 域名。以请求记录中的主机名为准。
- 确认策略存在:规则动作写成了
PROXY、DIRECT或自定义策略名时,检查该名称是否真的存在。名称拼写不同,规则可能无法按预期执行。 - 确认顺序:精确 DOMAIN 是否位于宽泛 DOMAIN-SUFFIX、DOMAIN-KEYWORD 和 GEOIP 之前,FINAL 是否位于末尾。
- 确认 DNS 与地址族:检查 DNS、IPv4/IPv6、浏览器安全 DNS 和目标协议。TCP 测试不能代表 UDP/QUIC 结果。
- 重新发起请求:修改规则后关闭并重新打开目标页面或 App 请求,再看 Data、请求记录或 Diagnostics 中的结果。旧连接不一定会立即重新匹配。
如果规则仍然无法判断,先回到最小模板,只保留一条明确的 DOMAIN 规则和一条 FINAL 规则。确认命中后再增加 GEOIP、IP-CIDR、规则集或自定义策略,能够减少多个变量同时变化造成的误判。
安全检查清单:不公开完整订阅链接;不把未知配置文件直接设为当前配置;修改前保存备份;外部规则集先查看来源和内容;规则集更新后重新检查策略名称、规则顺序和 FINAL 兜底。
常见问题
Shadowrocket 导入配置后,为什么还要切换 Config?
导入只代表文件进入了客户端管理范围;还要确认文件被选中,并在 Home → Global Routing 中选择 Config。否则当前流量可能仍按 Proxy 或 Direct 处理。
Proxy、Direct 和 Config 应该怎么选?
需要按规则分流时选择 Config;只想判断当前节点或代理链路时可临时选择 Proxy;想判断本地网络是否能直连时可临时选择 Direct。测试完成后恢复 Config,避免把临时结果当成规则结果。
DOMAIN 和 DOMAIN-SUFFIX 有什么区别?
DOMAIN 用于精确主机名,DOMAIN-SUFFIX 用于域名本身及其子域名。需要给某个子域名设置例外时,应把 DOMAIN 放在更宽泛的 DOMAIN-SUFFIX 前面。
GEOIP,CN,DIRECT 能保证所有国内网站直连吗?
不能保证。它依据目标 IP 的地理数据库结果判断,CDN、IPv6、解析结果和数据库变化都可能影响结果。对关键域名,建议根据请求记录增加明确的 DOMAIN 或 DOMAIN-SUFFIX 规则。
为什么规则改了,但请求记录没有变化?
先检查当前文件是否选中、Global Routing 是否为 Config、规则是否保存,再重新发起请求。还要排查前面的宽泛规则是否已经提前命中,以及当前策略名称是否存在。
节点能连接,为什么某个网站仍然打不开?
节点连接成功只说明代理链路具备连接结果,不代表目标域名、DNS、IPv6 或 UDP/QUIC 路径都正常。先用 Proxy 模式测试同一目标,再在 Config 模式查看实际命中的主机和策略。
常见问题
Shadowrocket 配置规则分流最容易漏掉哪一步?
最容易漏掉的是导入后没有在 Config 页面选中目标文件,或 Home → Global Routing 仍然是 Proxy/Direct。文件存在、文件选中、Config 启用和请求命中是四个独立检查点。
如何写一套国内直连、海外代理的最小规则?
可从局域网 IP-CIDR 直连、DOMAIN-SUFFIX 指定直连、GEOIP,CN,DIRECT、FINAL,PROXY 开始,再按请求记录补充实际域名和策略名称。
海外访问国内服务时,如何设置回程规则?
在配置中准备一个实际存在的回程策略组,把明确的国内域名和 GEOIP,CN 指向该策略,最后使用 FINAL,DIRECT;CDN 场景仍需根据实际请求记录补充规则。
PROCESS-NAME 能否直接用于 Shadowrocket 按 App 分流?
当前检索资料不足以核实它在 Shadowrocket iOS 当前版本中的通用支持情况,本文不把 PROCESS-NAME 作为可直接复制的方案。应以当前版本实际提供的应用级功能为准。
规则修改后没有变化,是否一定是客户端没有保存?
不一定。还可能是当前文件未选中、Global Routing 不是 Config、请求被更早的宽泛规则命中、策略名称不存在,或旧连接没有重新发起。