Shadowrocket 分流规则写法:只让指定网站走代理的 Config 示例

用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 写出指定网站走 PROXY,再以 FINAL,DIRECT 兜底,让其余流量直连。文中说明规则自上而下匹配的顺序,以及 Global Routing 选 Config 时规则如何生效。

本文速览

本文适合已经在 iPhone/iPad 的 Shadowrocket 中导入自己已有服务器、希望只代理少数网站的用户。先确认 Global Routing(全局路由)使用 Config(配置),再向当前配置加入域名规则,并把 FINAL,DIRECT 放在规则末尾。下文给出可合并的规则片段、保存与验证步骤,以及规则未命中、资源加载不全时的检查方法;示例域名仅作教学文本。

先确认 Config 与默认服务器

Shadowrocket(小火箭)的连接开关、服务器选择与分流规则是不同的设置。打开连接开关,只表示启用了连接;是否按域名分流,还取决于 Home(首页)中的 Global Routing(全局路由)。本文采用 Config(配置)模式,并以当前配置内的规则决定去向。

开始前,先确认已有服务器能连接。在 Home(首页)服务器列表点选目标条目左侧的选择圆点,将其设为默认服务器,再执行 Connectivity Test(连通性测试)。本文使用内置策略 PROXY(代理);如果原配置将规则指向某个自定义策略组,实际服务器还会受该组选择影响,不能只看默认服务器。

Config(配置)

推荐

按当前配置匹配规则。可以让指定域名使用 PROXY(代理),其他请求使用 DIRECT(直连)。

适合:本文的指定网站代理、其余直连。

Proxy(代理)

将受客户端处理的连接统一交给代理,而不是按本文的域名规则分流。可临时用来区分代理连通问题与规则问题。

适合:短时检查已有服务器是否能访问目标。

Direct(直连)

将受客户端处理的连接直接发送,不会因为配置里写了 PROXY 就改用代理。

适合:检查目标在当前网络下的直连情况。

Scene(场景)

按已设置的场景条件应用相应路由安排。它不是本文需要固定使用的配置规则模式,排查时先切回 Config。

适合:已经配置好场景条件的使用方式。

先固定模式,再修改规则

把 Global Routing 设为 Config 后再测试。若同时切换场景、服务器和规则,访问结果发生变化时就无法确定是哪一项起作用。

最小规则:指定域名代理,其余直连

规则行用英文逗号分隔。对于 DOMAIN-SUFFIX(域名后缀匹配),依次填写规则类型、域名后缀、目标策略。域名位置只写主机名,不写协议头、路径、端口或通配符。下面是规则区片段,不是包含 DNS 等设置的完整配置。

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

把这一段合并到现有配置的 [Rule] 区域,不要在文件里重复创建多个同名规则区。若原配置已有规则,先备份,再检查它们是否会抢先匹配。要得到“只有指定网站走代理”的结果,不能继续保留会把其他域名送往代理的宽泛规则,也不能让旧的兜底规则留在中间。

2 行
最小规则区:1 条域名规则 + 1 条兜底规则
3 项
域名规则字段:类型、匹配值、策略
最后 1 行
FINAL,DIRECT:处理此前未匹配的连接

这里的“其余直连”指该规则区处理且未命中前面规则的连接,不表示整个设备的所有系统通信都一定出现在请求记录中。它也不代表 DNS 查询必然与网页连接采用完全相同的路径;DNS 仍需按当前配置单独检查。

DOMAIN-KEYWORD 与规则顺序

DOMAIN-KEYWORD(域名关键词匹配)检查域名中是否包含指定文本。它适合确实需要按关键词覆盖多个域名的情况,但范围比后缀匹配宽。只知道一个网站主域名时,优先使用 DOMAIN-SUFFIX,避免把名称中碰巧含有相同字符的其他域名一起代理。

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

上面的第二条会匹配域名中含有 media-example 的连接。它不是对网页标题、页面文字或完整 URL 的搜索。不要为了匹配网站中的某个目录而填写 example.com/video;域名规则不按 URL 路径区分同一主机上的不同页面。

请求主机名先命中的规则策略
api.example.comDOMAIN-SUFFIXPROXY
img.media-example.testDOMAIN-KEYWORDPROXY
unrelated.testFINALDIRECT

规则按从上到下的顺序匹配,先命中就使用对应策略,不会自动挑选“看起来更精确”的后续规则。例如,要让 local.example.com 直连、其他同后缀域名代理,就必须把精确域名规则放在后缀规则前面:

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

在 iPhone/iPad 保存并启用配置

下面以已有可用配置为起点。先保留原配置副本,再编辑本地副本;不要直接覆盖唯一可用的文件。远程配置之后重新下载或更新时,可能覆盖本地修改,因此需要区分“更新服务器列表”和“替换规则配置”。

  1. 备份配置

    打开 Config(配置),确认当前选中的文件。使用该文件的操作菜单保留副本,并记录原来的文件名,方便出现问题时切回。

  2. 编辑规则

    在 Config 中打开副本的文件操作菜单,进入 Edit Plain Text(编辑纯文本)。找到 [Rule],把所需域名规则放在 FINAL,DIRECT 前;保留其他必要配置区。

  3. 保存选中

    保存文件并返回 Config,点选刚编辑的本地配置。确认选中标记在该文件上,而不是仍停留在原来的远程配置。

  4. 切换模式

    进入 Home → Global Routing → Config。回到 Home,确认默认服务器后打开连接开关;首次出现系统 VPN 配置授权时,按系统提示允许。

  5. 重建连接

    关闭此前的测试页面,再重新打开目标。必要时关闭后重新打开 Shadowrocket 连接,让新请求使用刚保存的规则;正在复用的旧连接不适合作为验证依据。

如果 Settings → On Demand(设置 → 按需连接)已启用,手动断开后可能因匹配连接条件而重新连接。测试期间先检查这些条件,必要时暂时停用 On Demand,并记住测试结束后恢复。On Demand 管理连接触发,不负责替代域名规则。

验证命中,再补齐页面依赖域名

验证至少分成两组:一组访问需要代理的目标,另一组访问未写入规则的目标。先在 Home 执行 Connectivity Test,确认默认服务器具备基本连通性,再发起新的网页请求。测试通过只说明测试目标的连通情况,不等于所有网站都能访问。

可按下面的结构加入第二个已确认的资源域名。这里的 static.example.net 仍是教学文本,应替换为请求记录里实际确认的主机名;若只需要这个主机,用 DOMAIN(精确域名匹配)即可,不必代理整个上级域名。

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

域名规则也依赖连接中可取得的域名信息。应用直接连接 IP 地址时,单纯的域名规则可能没有匹配对象。不要因此立即添加大段地址范围;先确认请求目标、DNS 解析情况,以及该连接是否确实属于要代理的网站。

GEOIP、IP-CIDR 与订阅更新的边界

GEOIP(按 IP 地理归属匹配)和 IP-CIDR(按 IPv4 地址段匹配)处理的是地址条件,不等同于网站清单。目标是“仅指定域名代理”时,最小片段不需要这两种规则。把广范围地址规则加入前面,会改变后续域名规则和兜底规则的覆盖范围。

关键字语法示例检查重点
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXY按主域名及子域名覆盖网站。
DOMAIN-KEYWORDDOMAIN-KEYWORD,media-example,PROXY按域名中的文本匹配,注意误覆盖。
GEOIPGEOIP,CN,DIRECT按地址归属数据判断,不代表网站所属地区。
IP-CIDRIP-CIDR,192.0.2.0/24,DIRECT,no-resolve示例为文档地址段;no-resolve 表示不为此规则主动解析域名。

表格用于辨认规则类型,不要求把所有行都加入配置。特别是共享服务器地址可能同时承载多个网站,按 IP 范围代理容易偏离“只选指定网站”的目标。域名本身已明确时,先保留域名方案,只有确认地址匹配需求后才增加地址规则。

常见问题:规则写了却没有按预期分流

为什么所有网站都走代理?

先到 Home → Global Routing 确认选择 Config,而不是 Proxy。再打开当前选中的配置,检查是否仍有 FINAL,PROXY 或覆盖范围过大的代理规则。把目标规则之外的去向核对清楚后,再以 FINAL,DIRECT 兜底。

为什么指定网站还是直连?

到 Config 确认正在使用刚编辑的文件。检查域名是否误带协议头或路径、FINAL 是否放在最前面,以及是否存在先命中的 DIRECT 规则。随后关闭旧页面,重新发起请求并查看实际主机名。

主页面能打开,登录和图片却失败?

在请求记录中找出失败资源的主机名,判断它是否位于主站域名之外。将确认需要代理的独立域名加入 FINAL 前,再重新打开页面。不要把一次页面加载失败直接当成整个服务器不可用。

切到 Proxy 能访问,Config 却不行?

先恢复 Home → Global Routing → Config,再查目标请求命中了哪条规则。如果命中 DIRECT,补正域名范围或顺序;如果已命中 PROXY,检查该策略实际选用的服务器是否与临时 Proxy 测试一致,并检查 DNS 与资源域名。

完成后保留可用副本,并记录自己新增了哪些域名。每次只改一项:先模式,再规则,再服务器。按这个顺序回查,可以把“配置未启用”“规则没命中”和“代理连接失败”分开处理,而不是反复替换整份配置。

App Store 正版核验