Shadowrocket怎么设置分流规则?从 Config 到规则验证
简答:先在 Shadowrocket 首页把 Global Routing 改为 Config,再确认当前配置文件已启用。随后按“具体规则在前、宽泛规则在后、FINAL兜底”的顺序添加规则,最后用日志和同一网址验证实际命中的策略。
定义:Shadowrocket 分流规则是根据域名、IP地址或地理区域,把请求分别交给 DIRECT、PROXY、REJECT 或其他策略处理的配置规则。
三步速查:先让分流规则真正参与路由
- 确认客户端和配置来源:Shadowrocket 是规则代理客户端,App Store页面明确列出域名、域名后缀、域名关键词、CIDR IP和GeoIP等规则能力,也支持从网址或iCloud Drive导入规则文件。客户端本身不提供节点或订阅,服务器信息需要自行准备。可先在App Store产品页核对应用名称、开发者和功能。
- 切换到 Config:打开 Shadowrocket 首页,找到
Global Routing,选择Config。不要把首页的 Config 路由模式和底部的 Config 配置文件管理混为一谈:前者决定是否按规则路由,后者决定使用哪份配置。 - 验证而不是只看开关:打开当前配置,检查规则是否保存、策略名称是否存在,再访问一个需要直连或代理的目标。通过连接日志、请求记录或
Connectivity Test对照结果;如果仍然无法判断,暂时用同一目标分别测试Direct、Proxy和Config,然后恢复原来的模式。
最短结论:如果 Global Routing 不是 Config,单独修改 [Rule] 往往看不到预期效果;如果已经是 Config,优先检查当前配置、规则顺序和策略名称。
先分清:节点订阅、配置文件、规则集和策略组
这四个概念解决的是不同问题。节点订阅通常提供服务器条目,例如地址、端口、协议和认证信息;配置文件负责组织通用设置、代理策略组和[Rule]规则;规则集是一批可远程更新或单独导入的匹配条件;策略组则是规则命中后要使用的处理对象,例如一个代理节点、节点组或直连策略。
| 对象 | 主要作用 | 常见误区 |
|---|---|---|
| 节点或订阅 | 提供可连接的服务器条目 | 导入成功不等于服务器一定可连接 |
| 配置文件 | 保存规则、代理组和相关设置 | 配置文件不是节点订阅的同义词 |
| 规则集 | 集中维护一批匹配规则 | 远程更新可能覆盖本地修改 |
| 策略 | 决定命中后直连、代理或拒绝 | PROXY必须对应当前配置中存在的策略名称 |
| Global Routing | 决定当前整体使用 Config、Proxy还是Direct | 选中节点不代表所有请求都按规则分流 |
因此,导入订阅后仍要单独检查配置文件和 Global Routing。Shadowrocket的App Store说明确认了规则匹配和规则文件导入能力,但服务器、配置与实际网络连通性仍需分别验证。
最小可用规则:DOMAIN、DOMAIN-SUFFIX和FINAL怎么写
手动编辑时,规则通常放在配置文件的[Rule]段。每行一般由“匹配类型、匹配值、策略”组成;FINAL只需要策略。下面的域名和地址仅用于演示语法,不代表任何服务或节点:
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,video,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY| 规则类型 | 匹配范围 | 适合场景 |
|---|---|---|
DOMAIN | 精确匹配一个域名 | 只想处理某一个主机名 |
DOMAIN-SUFFIX | 匹配域名及其子域名 | 处理一个站点及其静态资源域名 |
DOMAIN-KEYWORD | 匹配域名中包含的关键词 | 范围较宽,使用前要评估误匹配 |
IP-CIDR | 匹配IPv4网段 | 已知目标地址范围时使用 |
GEOIP | 按目标IP地理归属匹配 | 作为区域性兜底,不宜替代所有域名规则 |
FINAL | 匹配前面没有命中的请求 | 放在规则末尾作为最终策略 |
注意:域名规则中不要写https://、端口或网页路径。需要代理某个站点及其子域名时,通常应优先考虑DOMAIN-SUFFIX;只处理一个精确主机名时使用DOMAIN更窄。
按需求设置:直连、代理和拒绝的示例
指定域名走代理
如果只希望某个域名及其子域名使用代理,可写成:
DOMAIN-SUFFIX,example.com,PROXY这里的PROXY必须是当前配置中已有的节点、策略组或策略名称。它只表示规则选择了代理处理,不代表服务器认证、DNS解析或最终连接一定成功。
指定域名直连
如果某个站点应绕过代理,可把更具体的直连规则放在宽泛规则前面:
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY访问login.example.com时,第一条规则先命中;其他example.com子域名再由第二条规则处理。
按地区作为兜底
一种常见写法是让已识别为某地区的IP直连,再让其余请求走代理:
GEOIP,CN,DIRECT
FINAL,PROXY这只是逻辑示例。GeoIP结果取决于目标地址和客户端可获得的解析信息,不能把它当成绝对准确的地域判断。对必须稳定处理的站点,应优先使用明确的域名规则。
拒绝请求
REJECT可以阻止命中的请求,但广告、登录、通知和页面资源可能共用域名。规则过宽时,可能出现页面能打开但图片、登录或推送异常,因此添加拒绝规则后应测试完整功能,而不是只看首页。
规则顺序决定结果:具体在前,FINAL在后
分流规则通常按配置中的顺序检查,命中后就使用对应策略。可以按下面的顺序整理:
- 先放精确域名或明确例外,例如
DOMAIN,login.example.com,DIRECT。 - 再放域名后缀规则,例如
DOMAIN-SUFFIX,example.com,PROXY。 - 然后放关键词、IP网段或GeoIP等范围更宽的规则。
- 最后只保留一个清晰的
FINAL兜底。
最常见的错误是把宽泛的DOMAIN-KEYWORD或FINAL放在前面,导致后面的具体规则没有机会匹配。另一个错误是规则写了PROXY,但配置中实际策略组叫其他名称。遇到这种情况,应先核对策略列表,而不是不断复制规则。
导入远程配置或规则集前,先备份再验证
- 备份当前状态:记录当前 Global Routing模式、活动配置名称、选中的节点或策略组,并保留原配置文件副本。
- 确认来源和格式:远程配置应明确是完整配置文件还是单独规则集。不要把规则集链接当作完整配置导入,也不要把包含脚本、重写或证书相关内容的文件当作普通分流规则。
- 导入后检查:确认文件已经下载、选中并显示为当前配置;打开内容检查是否存在
[Rule]段、策略名称和FINAL。 - 重新载入:保存后重新选择配置,必要时断开并重新连接。不同版本的菜单名称可能变化,以当前App显示为准。
- 验证单一目标:每次只改一条规则,使用同一网络、同一目标和相近时间测试,并查看日志中实际采用的策略。
- 失败时回滚:如果出现大面积打不开、DNS异常或应用功能缺失,立即恢复备份配置,先确认基础连接正常,再逐项加回规则。
App Store页面还显示,Shadowrocket支持从网址或iCloud Drive导入规则文件;但远程文件的内容、更新频率和兼容性不能仅凭“导入成功”判断,导入后仍需检查和验证。
规则不生效:按这个顺序排查
- Global Routing不是Config:先在首页确认当前模式,若是Proxy或Direct,规则文件可能没有按预期参与路由。
- 配置没有选中:进入Config,确认编辑的文件就是当前启用的文件,避免改了A文件却运行B文件。
- 规则顺序被提前命中:搜索同一域名是否已经被更宽泛的后缀、关键词或规则集匹配。
- 策略名称不存在:检查规则末尾的
PROXY、DIRECT或自定义策略是否与当前配置完全一致。 - FINAL位置错误:把
FINAL移到最后,否则它可能提前接管所有请求。 - DNS或目标信息不可见:域名规则和IP规则依赖不同的匹配信息。若日志没有出现预期域名,先检查DNS解析、请求类型和当前网络。
- 基础连接本身失败:临时切换到Proxy模式测试同一目标。如果Proxy也失败,应先排查节点、认证、协议或本地网络,而不是继续修改分流规则。
- 恢复并逐项重做:撤销最近一次修改,只保留一条测试规则,确认结果后再添加下一条。
完成标准:怎样确认分流已经生效
- 首页的 Global Routing 显示为
Config。 - 当前启用的配置文件与实际编辑的文件一致。
- 规则中的策略名称在当前配置中确实存在。
- 具体规则位于宽泛规则之前,
FINAL位于末尾。 - 日志或请求记录能看到目标请求及其实际处理策略。
- 修改前后使用同一目标进行对比,而不是只凭网页是否打开判断。
- 出现异常时可以恢复到备份配置,并知道是哪一条规则造成变化。
如果只能确认“Shadowrocket已连接”,但无法确认某个请求命中了哪条规则,说明连接层已验证,分流层还没有完成验证。
常见问题
Shadowrocket的Global Routing应该选哪个?
要使用分流规则,通常先选Config;Proxy和Direct更适合临时对比代理路径与直连路径。测试结束后恢复你的原设置。
Shadowrocket规则中的PROXY是什么意思?
PROXY是命中规则后的处理策略名称,表示使用代理路径。它不等于某个具体节点,且必须对应当前配置中存在的策略。
DOMAIN和DOMAIN-SUFFIX有什么区别?
DOMAIN用于精确域名;DOMAIN-SUFFIX通常覆盖该域名及其子域名。只处理一个主机名时用DOMAIN,处理整个站点范围时优先考虑DOMAIN-SUFFIX。
为什么规则写好了却没有生效?
先检查Global Routing是否为Config,再确认当前配置、规则顺序、策略名称和FINAL位置,最后查看日志确认请求实际命中了哪条规则。
远程规则集导入后能不能继续手动修改?
可以先备份再修改,但远程更新可能覆盖本地改动。建议保留原文件,并每次更新后重新检查规则顺序和策略名称。
相关阅读
参考资料
- App Store:Shadowrocket产品页与功能说明
- Shadowrocket规则关键词与匹配顺序说明(shadow-official.com)