Shadowrocket REJECT 规则写法:按域名拦截请求的原理与能力边界

讲解 REJECT 策略在规则匹配中的位置、DOMAIN-SUFFIX 与 REJECT 的组合写法,以及哪些请求规则拦不住、为什么误拦会导致页面异常。

本文速览

本文适用于已经在 Shadowrocket(小火箭)中使用自己的配置、需要按域名拒绝特定连接的用户。先区分匹配条件与 REJECT 策略,再用保留域名示例说明顺序、例外与验证方法,最后排查拦截未生效和页面异常。示例不包含可用服务信息,也不应整体覆盖现有配置。

1. REJECT 是策略,不是识别内容的条件

一条规则通常先描述“匹配什么”,再指定“匹配后怎么处理”。DOMAIN-SUFFIX 是域名后缀匹配条件,REJECT 是拒绝连接的策略。把两者组合,表示目标域名符合条件时不继续按代理或直连策略建立该连接,而不是扫描页面并删除其中某个元素。

请求进入隧道 目标信息识别 规则顺序匹配 策略执行

验证本文规则时,在 Home → Global Routing → Config 使用配置分流,并确认当前启用的是刚修改的配置。Proxy、Direct 与 Scene 的路由行为不能直接等同于此处的 Config 测试条件。连接开关打开,也不等于指定的规则文件已经参与判定。

Settings → On Demand 处理系统按条件连接或断开 VPN 的行为;它不负责把某个域名改为 REJECT。排查时应分开确认“隧道是否连接”“配置是否启用”“请求命中哪条规则”,不要把自动连接设置当成域名拦截开关。

3 项
DOMAIN-SUFFIX 示例包含关键字、域名、策略
2 项
FINAL 示例包含关键字与兜底策略
1 条
普通顺序匹配以首先命中的规则决定策略

2. DOMAIN 与 DOMAIN-SUFFIX 的准确写法

下列示例使用保留的示例域名,仅用于解释语法。规则写在配置的 [Rule] 段中;如果当前文件已有该段,应在原段内编辑,不要为了增加一条规则重复创建段落。域名字段不带协议头、路径、端口或查询参数,分隔符使用英文逗号。

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

在这个最小示例中,account.example.com 先命中精确例外,走 DIRECT;example.com 与 img.example.com 命中后缀规则,走 REJECT。notexample.com 不属于该域名后缀,不能仅因字符串末尾相似就视为匹配。末行只说明兜底位置,不表示应把用户现有的 FINAL 策略改为 DIRECT。

精确域名规则

关键字
DOMAIN
目标
metrics.example.com
策略
REJECT
完整规则
DOMAIN,metrics.example.com,REJECT

仅匹配该域名,不自动包含它的子域名。

域名后缀规则

关键字
DOMAIN-SUFFIX
目标
metrics.example.com
策略
REJECT
完整规则
DOMAIN-SUFFIX,metrics.example.com,REJECT

匹配该域名及其下级域名,不包含同级域名。

如果只需拒绝 metrics.example.com,不应直接把范围扩大为整个 example.com。同一主域下可能同时承载登录、图片、支付回调与统计请求,后缀越宽,误拦范围越大。先用 DOMAIN 验证目标,再依据实际请求决定是否需要扩大到 DOMAIN-SUFFIX。

3. 规则顺序:具体例外在前,FINAL 在后

在普通顺序匹配中,先命中的规则决定处理策略。后面更具体的规则不会自动覆盖前面的宽泛规则。因此,添加 REJECT 并非只要“文件中存在这一行”就会生效,还要确认请求在到达这一行之前没有被别的条件接走。

位置或条件可能的判定检查动作
精确 DOMAIN 例外在后缀规则之前指定主机先走例外策略确认例外确有用途,且范围只到需要保留的主机
宽泛 DOMAIN-SUFFIX 在精确规则之前后面的精确规则无法接到已命中的请求调整先后顺序,不要仅重复添加同一规则
较早的 IP-CIDR 或 GEOIP 规则已命中请求可能先按 IP 条件处理结合记录检查实际目标信息及匹配项
FINAL 位于新增规则之前请求已被兜底,后续规则不能承担预期作用把需要参与判定的规则放在 FINAL 之前

结论:先找首次命中项,再调整拦截范围

若请求记录显示命中的是前面的 DIRECT 或 PROXY 规则,应先处理顺序;重复增加后缀规则不能改变已经完成的判定。

GEOIP 根据 IP 的地区信息匹配,IP-CIDR 根据地址网段匹配,它们都不是域名类别识别器。为修复一条域名规则而拦截整个共享 IP 网段,可能影响同一基础设施上的其他站点。除非已有明确的地址级需求,否则不要用扩大 IP 范围替代对域名与顺序的检查。

4. 添加规则与验证结果的编号步骤

一次只修改一个条件,才能把页面变化与规则关联起来。下列流程以用户已持有自己的配置为前提;如果已有代理连接需求,继续使用用户自己的服务配置即可,本文不涉及获取或推荐服务。

  1. 保留可恢复副本。在 Config 中确认当前使用的配置,先保存副本或记录原始内容,尤其保留原有的策略名称、DNS 设置与 FINAL。不要把本文的最小示例当作完整可用配置导入。
  2. 确认实际目标。在连接或请求记录中查看异常请求的目标域名。记录完整主机名,而不是从网页标题推测;页面地址与图片、接口实际请求的主机可能不同。
  3. 添加最小规则。在当前配置的 [Rule] 段加入一条 DOMAIN,metrics.example.com,REJECT 形式的规则,把示例域名换成已经确认的目标。放在相关宽泛匹配与 FINAL 之前。
  4. 确认测试姿态。保存配置,在 Home 核对当前配置与 Global Routing → Config,再确认连接状态。如果当前连接条件不稳定,先完成基础连接排查,再测试规则。
  5. 重新发起请求。重新打开页面或退出后重开目标应用,尽量产生新的连接。查看对应记录中的目标、匹配项与策略,不以页面上某一块是否消失作为唯一依据。
  6. 做单变量回退。只移除刚新增的一条规则,保存并再次发起相同操作。比较功能是否恢复;若变化无关,再检查其他请求,不要一次删除整组规则。

目标站使用 HTTPS 的常见端口是 443,但 DOMAIN,metrics.example.com,REJECT 并没有把条件限制为 443。该行表达的是域名条件,而非某个 URL、请求方法或端口条件。不要把带有 :443 的完整地址直接填入域名字段。

5. 哪些请求与页面内容不在能力范围内

域名规则作用于可匹配的连接目标,不等于对页面内容进行分类。同一个域名可以返回正文、图片、推荐内容和登录接口;同一条连接也可能承载多个请求。仅凭 DOMAIN-SUFFIX 无法判断其中哪一段内容应当保留。

DNS 解析记录也不等同于最终的连接处理记录。域名得到解析结果后,后续连接仍可能被 REJECT;反过来,解析失败也可能让连接根本没有进入预期的规则验证阶段。判断时应把解析、匹配与连接结果分开记录。

6. 页面异常与拦截未生效的常见问答

误拦常见表现包括登录反复跳转、图片空白、按钮一直等待或验证流程无法完成。这些现象只能提示某个依赖请求可能失败,不能单独证明该请求应当被放行。应对照新增规则与实际命中记录,逐条缩小范围。

加了 REJECT,页面为什么还是正常打开?

先确认目标是否真的请求了被拦域名,再核对 Home → Global Routing → Config 和当前配置。页面主体正常并不代表规则失败,目标请求可能只是附加资源;以新连接的匹配策略为准。

拦一个统计域名后,为什么登录也失败?

检查是否误用了主域级 DOMAIN-SUFFIX。先撤回刚加的规则并重新登录;若功能恢复,再改用已确认的精确 DOMAIN。确需保留的登录主机可以设置更靠前的明确例外,策略沿用原配置的正常访问路径。

记录已经显示 REJECT,为什么还看到 DNS 请求?

解析与连接是不同阶段,出现解析记录不等于应用已成功访问目标。继续查看对应连接是否被拒绝;不要为了消除一条 DNS 记录就扩大域名或 IP 拦截范围。

更新配置后,自己加的规则怎么不见了?

确认更新的是节点订阅还是整个配置文件,两者不是同一对象。远程配置更新可能替换本地编辑内容;对比更新前后的副本,检查当前启用文件,再恢复经过验证的必要规则。

如果删除单条规则后仍然异常,应继续核对网络、DNS 与服务端响应,不要把所有失败归因于 REJECT。基础连通性检查可参考排查手册;不熟悉 Config 与 Home 分工时,先按入门指南确认配置启用流程。

App Store 正版核验 →