小火箭分流规则写法:只让指定网站走代理的 DOMAIN-SUFFIX 配置

以 Global Routing 选 Config 为前提,讲解 DOMAIN-SUFFIX、DOMAIN-KEYWORD 与 FINAL,DIRECT 的组合,实现名单内网站走 PROXY、其余直连。

本文速览

本文适用于已经在 Shadowrocket(小火箭)中配置好可用代理连接、希望只代理指定网站的用户。先确认 Global Routing 使用 Config,再将域名名单放在规则前部,以 FINAL,DIRECT 收尾。下面给出可合并到配置中的规则片段、保存启用步骤与验证方法,并区分规则未命中和代理连接失败。

先确认 Config:名单规则生效的前提

“只让指定网站走代理”包含两个独立条件:指定域名匹配后使用 PROXY,其他请求默认使用 DIRECT。仅添加域名规则还不够;如果 Global Routing 当前为 Proxy,请求会按全局代理姿态处理,不能用它验证这份名单的分流结果。

在 Home 打开 Global Routing,选择 Config;随后在 Config 中确认正在使用的配置文件。Home 中选中的代理连接也必须可用。本文以用户已有自己的服务商与订阅或连接参数为前提,不涉及连接服务获取。

姿态处理方式本文使用方式
Config依据当前配置中的规则决定连接策略。名单分流的验证前提。
Proxy全局代理姿态,不按本文的域名名单决定分流。可用于对照代理是否可用,测试后切回 Config。
Direct全局直连姿态。用于直连对照,不能验证 PROXY 规则。
Scene根据已设置的场景条件应用相应路由设置。排查时先明确切到 Config,减少场景切换的干扰。

On Demand 负责按条件建立或恢复连接,并不代替域名规则。若测试期间连接自动变化,可在 Settings → On Demand 核对现有条件,记录原设置后暂时手动控制连接;不要同时修改按需连接、DNS 和规则,否则难以判断是哪项改动产生作用。

最小规则:DOMAIN-SUFFIX 配合 FINAL,DIRECT

下面是规则段示例,不是包含全部连接参数的完整配置。example.com 是示例域名,不代表实际需要代理的网站。使用时替换成你要分流的网站域名,合并到现有配置的 [Rule] 段,不要用这个片段覆盖整个文件。

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

DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 本身以及 www.example.com、api.example.com 等子域名。它按域名层级匹配,不会因为 notexample.com 末尾也包含相同字母,就把后者当成同一个域名后缀。

2 行
最小规则组合:一条域名匹配与一条最终策略
1 个后缀
example.com 同时覆盖主域名和它的子域名
末行
FINAL,DIRECT 放在所有待匹配规则之后

FINAL,DIRECT 表示前面的规则都未命中时使用直连。规则按顺序检查,先命中的规则决定策略。因此,名单上方若还有较宽泛的规则,或者提前出现了 FINAL,请求可能根本到不了你新增的那一行。

DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 的边界

名单精度取决于匹配关键字。网站主域名及其子域名都需要代理时,优先使用 DOMAIN-SUFFIX;只处理某一个主机名时,使用 DOMAIN。DOMAIN-KEYWORD 按域名中的字符串匹配,范围更宽,不适合默认当作域名后缀的替代写法。

规则写法匹配范围适合的目标
DOMAIN,api.example.com,PROXY仅匹配 api.example.com,不包含它的下级子域名。只代理一个明确的接口域名。
DOMAIN-SUFFIX,example.com,PROXY匹配 example.com 及其子域名。以网站域名为单位维护名单。
DOMAIN-KEYWORD,example,PROXY匹配域名中含 example 的请求,可能覆盖无关域名。确实需要关键词范围,并能检查误匹配时使用。

规则中的域名不要带 https://、端口、路径或查询参数。例如,只填 example.com,不要填 https://example.com/account。这类域名分流不能按 HTTPS 网页的路径区分同一主机上的不同页面。

若希望某个子域名直连、同一主域名下其他请求走代理,应把更精确的例外放在后缀规则前面。下面的顺序会让 status.example.com 直连,其余匹配该后缀的域名走代理。

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

保存与启用:每次只改一组规则

先保留原配置副本,再在本地配置中做最小改动。远程配置更新可能覆盖本地编辑;Home 中连接订阅的更新与 Config 中配置文件的更新也不是同一件事。排查时应分别记录当前连接和当前配置,避免误把连接列表变化当成规则已经加载。

  1. 备份配置

    进入 Config,确认当前配置并保留副本。先记录原有的 FINAL 策略和规则集引用,防止修改后无法恢复。

  2. 编辑规则

    在 Config 打开待使用的本地配置并进入编辑,将名单加入 [Rule] 段。该段只保留一个有效的最终兜底位置,将 FINAL,DIRECT 放在名单之后。

  3. 保存选中

    保存后回到 Config,确认选中的是刚修改的文件,而不是名称相似的其他配置。若出现解析错误,先检查英文逗号、关键字拼写与每行的字段数量。

  4. 切换姿态

    回到 Home → Global Routing → Config,并确认已选中可用的代理连接。必要时断开再重新连接,使测试使用当前设置。

  5. 重新测试

    关闭目标网页后重新打开,触发新的连接,再检查数据记录中的域名、命中规则和实际策略。不要只观察修改前已经建立的长连接。

从其他配置复制规则时,还要检查策略名称是否存在。自定义组名不是通用内置关键字,原文件中名为某个组的策略,在新文件中未必有对应定义。若目标只是本文的名单模式,先用 PROXY 与 DIRECT 验证,再考虑增加策略组。

验证分流:看命中规则,不只看网页能否打开

网页正常打开只能说明某条连接路径可用,不能单独证明使用了代理。应在 Shadowrocket 的数据记录中对照本次请求的域名、规则与出站策略;若记录未开启,先在 Settings 中检查数据记录设置,再重新发起请求。只保留必要记录,分享前移除域名以外的敏感信息。

发起新请求 识别目标域名 按序匹配 选择出站 核对记录

一个网页可能同时连接主站、登录接口、静态资源与媒体域名。主站命中 PROXY 而图片请求命中 DIRECT,并不矛盾。若出现页面文字正常、图片或登录失败,应先找出失败请求的真实域名,再决定是否补充名单;不要直接加入过短的 DOMAIN-KEYWORD 来扩大范围。

GEOIP 根据目标 IP 的地理信息匹配,IP-CIDR 根据 IP 网段匹配,二者都不是网站域名归属判断。一个网站可能使用多个地址,也可能与其他网站共享地址。严格名单模式下,不要为图省事添加宽泛的 IP 代理规则,否则名单外请求也可能被代理。直接访问 IP 的请求也不能保证命中域名规则。

连接失败:先区分规则问题与出站问题

如果记录已经显示命中 PROXY,但请求仍失败,继续调整 DOMAIN-SUFFIX 通常没有帮助。下面列出连接诊断中可能出现的底层错误片段;具体显示文字取决于协议与失败环节,不代表每次都会出现完全相同的完整提示。

报错:connection refused

原因与解法:连接被目标端或中间设备拒绝,不等于域名规则未生效。先确认记录中的实际出站,再核对已有连接的地址、端口及服务端监听状态;端口应以自己的配置为准,不要因为目标网页使用 HTTPS 就把代理端口改成 443。

报错:i/o timeout

原因与解法:某个网络读写阶段超过等待时间,单靠这段文字无法判断是本地网络还是代理路径。保持规则不变,在 Wi-Fi 与蜂窝网络下分别发起新请求,并对照同一代理连接的测试结果。

报错:certificate has expired

原因与解法:TLS 验证涉及的证书有效期异常,也可能与设备时间错误有关。先检查 iPhone 的设置 → 通用 → 日期与时间,再向自己的服务商核对证书;不要通过关闭证书验证掩盖问题。

如果记录显示 DIRECT,而你预期 PROXY,则回到规则层检查:当前文件是否正确、Global Routing 是否为 Config、实际请求是否使用了另一个域名,以及名单前是否存在更早的匹配项。按这些证据修正,比反复重写整份配置更容易定位原因。

常见问题:补充域名、更新与恢复

只想让一个网站走代理,要把每个子域名都写进去吗?

同一主域名下通常只需一条 DOMAIN-SUFFIX。先写主域名,再检查资源请求;如果网站使用不同主域名的登录或资源服务,应按实际记录分别补充,不要把整段 URL 写入规则。

加了规则却还是所有网站都走代理,怎么检查?

先到 Home → Global Routing 确认 Config,再在 Config 核对当前文件。随后检查是否仍有 FINAL,PROXY、其他宽泛的代理规则或代理规则集;严格名单模式应让名单外请求最终落到 FINAL,DIRECT。

更新自己的连接订阅后,名单需要重写吗?

只更新 Home 中的连接列表,通常不需要重写 Config 内的域名规则,但应重新确认所选连接。若更新的是远程配置文件,则本地编辑可能被替换;更新后打开当前配置检查 [Rule],再做一次名单内外对照测试。

修改后访问异常,怎样恢复原设置?

在 Config 重新选中之前保留的配置,回到 Home 确认原有 Global Routing 姿态,再重新连接。恢复正常后,在副本中一次只增加一条规则;不要同时恢复配置、换代理连接并修改 DNS,以免丢失问题线索。

完成后的核对标准只有三项:Config 正在生效,名单请求命中预期规则,其他请求落到 DIRECT。需要继续了解配置结构,可查阅本站技术参考;需要确认路由姿态差异,可查看代理模式说明。

App Store 下载先核对正版三要素