Shadowrocket REJECT 策略原理:规则屏蔽能做到什么、做不到什么

REJECT 在连接建立前就拒绝匹配到的请求。本文讲清它基于域名和 IP 的工作方式、与其他规则的优先级关系,以及规则屏蔽无法覆盖的情况。

本文速览

Shadowrocket(小火箭)的 REJECT 是连接分流策略,不是网页内容过滤器。本文适合已经能够正常连接、准备编辑规则的用户:先确认 Global Routing 使用 Config,再按域名或 IP 添加最小范围的规则,通过请求记录验证命中结果,最后区分规则遗漏、缓存和同域名内容这几类限制。

REJECT 拒绝的是连接,不是页面中的某个元素

应用访问网络时,Shadowrocket 对进入其处理路径的连接执行规则匹配。命中 REJECT 后,不再按照 DIRECT 或 PROXY 为这条请求建立到目标的正常出站连接。这里的“连接建立前”指目标出站阶段,并不表示应用尚未发出请求,也不表示匹配前一定没有发生 DNS 查询。

应用请求 隧道接收 规则匹配 命中拒绝 应用报错

应用如何表现取决于自身的错误处理:图片可能加载失败,独立的统计请求可能结束,也可能出现重试或超时提示。REJECT 不会替应用生成一个正常页面,更不会自动把网页中的空白区域收起来。因此,“某个请求被拒绝”和“整个页面看起来没有变化”可以同时发生。

这些策略与所用代理协议不是同一个层级。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 描述代理传输或隧道方式;把代理协议换一种,并不会让 REJECT 获得识别 HTTPS 页面内部内容的能力。

域名与 IP 规则分别能识别什么

当匹配阶段能够取得目标域名时,可以使用 DOMAIN 或 DOMAIN-SUFFIX。前者匹配一个完整主机名,后者匹配指定域名及其子域名。若要拒绝的只是一个独立请求端点,应优先从完整主机名开始,而不是直接扩大到整个主域名。

域名匹配范围

DOMAIN
metrics.example.com,REJECT
DOMAIN-SUFFIX
example.com,REJECT
匹配依据
目标主机名,不是 URL 路径

example.com 及其子域名仅用于说明语法,不代表可直接使用的屏蔽清单。

IP 匹配范围

IP-CIDR
192.0.2.10/32,REJECT,no-resolve
GEOIP
CN,DIRECT
匹配依据
目标 IP、网段或 IP 地理归属库

192.0.2.10 是文档示例地址;GEOIP 示例说明直接放行姿态,并非屏蔽建议。

/32 表示一个 IPv4 地址,而不是一段模糊范围。no-resolve 用于避免仅为这条 IP 规则额外发起域名解析;不要把它理解为“所有请求都不再使用 DNS”。如果应用直接访问 IP,且没有可用的域名关联信息,单独一条域名规则未必能够命中。

IP 规则也有边界。多个域名可能共享同一个 CDN 地址,同一个域名也可能随地区、网络或时间返回不同地址。把某次解析得到的 IP 全部拒绝,既可能遗漏之后的新地址,也可能影响共用该地址的其他服务。GEOIP 依据地址归属库作判断,同样不等于识别网站的实际内容或经营主体。

范围扩大前先核对依赖。登录、验证码、图片和正文可能使用同一主域名的不同子域名。把一条 DOMAIN 直接改为 DOMAIN-SUFFIX,可能从阻止一个端点变成阻止整组必要请求。

规则按顺序匹配,REJECT 没有额外优先权

在 Config 分流下,规则按从上到下的顺序检查,命中后使用该条策略。REJECT 不会因为具有拒绝含义就自动压过前面的 DIRECT 或 PROXY。较具体的例外应放在较宽的规则之前,FINAL 则放在规则段最后,处理尚未命中的连接。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN,metrics.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY

在这段仅用于解释顺序的示例中,login.example.com 先命中 DIRECT,metrics.example.com 先命中 REJECT,其他属于 example.com 的请求再匹配 PROXY。若把 DOMAIN-SUFFIX 移到最上面,前两个主机名都会先被它接走,后面的细分规则就失去作用。

配置情况结果修正方法
宽泛放行在 REJECT 前目标先命中放行把精确 REJECT 放到相关宽泛规则之前
REJECT 放在 FINAL 后请求已由 FINAL 接管将 FINAL 保持在规则段末尾
同一主机名有多条策略先命中的规则生效检查完整规则顺序,而非只搜索 REJECT

判断:先找实际命中的规则,再扩大屏蔽范围

如果请求记录显示 DIRECT 或 PROXY,应先修正前置规则或当前分流姿态;继续增加相似的 REJECT 条目,无法解决同一个请求已经提前命中的问题。

确认 Config 生效,再做一次最小验证

规则文件存在于 Config 中,并不代表当前请求一定按该文件处理。先检查 Home 的 Global Routing。Proxy 和 Direct 是整体出站姿态;验证规则时应明确选择 Config。Scene 是场景化的路由姿态,不能仅凭看到 Scene 就认定它等同于当前配置的规则结果。

  1. 保存副本。在 Config 中确认当前使用的配置,编辑前保留可恢复副本。不要直接覆盖一套尚未理解的完整规则。
  2. 只加一条精确规则。使用请求记录中实际出现的主机名,按 DOMAIN,主机名,REJECT 的结构填写;这里的“主机名”说明字段位置,不是可直接粘贴的规则。
  3. 检查生效状态。保存修改并确认使用的是刚编辑的配置,在 Home 将 Global Routing 设为 Config,同时确认连接开关已开启。
  4. 触发新请求。退出目标页面后重新进入,必要时结束目标应用再打开。不要仅观察已经加载完毕的图片或旧标签页。
  5. 核对记录。在请求记录中查找目标主机名或 IP,检查实际命中的规则与策略。只有新请求显示 REJECT,才能证明这次测试确实进入拒绝分支。
  6. 恢复验证。暂时移除刚添加的规则,再以同样方式触发请求。比较移除前后的连接结果和功能变化,确认影响来自这条规则。

Settings → On Demand 用来控制按条件自动连接,不是 REJECT 的开关。若测试过程中隧道被断开,后续请求可能不再经过同一处理路径;应先确认连接状态,再解释“规则失效”。对于保活连接,修改规则也不应被视为已经断开所有既有会话,验证时需要产生新的连接。

记录的是验证条件,不是速度结论。建议保留目标主机名、Global Routing 姿态、命中策略、是否重新启动应用这四项。没有这些条件,仅凭“页面还能打开”不能判断 REJECT 是否生效。

HTTPS、缓存与同域名内容构成哪些限制

域名或 IP 规则处理的是连接目标。假设正常内容位于 https://example.com/article,另一类内容位于 https://example.com/promo,两者主机名相同。单靠 DOMAIN 或 DOMAIN-SUFFIX 无法按这两个路径区分;拒绝该主机名可能同时阻止正常文章。

443
HTTPS 常用默认端口,不是内容分类标记
53
传统 DNS 常用端口,不覆盖所有 DNS 传输方式
4 项
Global Routing:Proxy / Direct / Config / Scene

端口只能提供传输用途的线索。正常网页与其他 HTTPS 请求都可能使用 443,不能靠拒绝整个端口实现精细筛选。即使能够获得目标域名,也不等于能够读取加密连接中的 URL 路径、请求正文或返回内容;REJECT 本身不负责解密。

URL Rewrite 属于另一类请求改写机制,不应把其能力归给 REJECT。某项内容不能被连接规则单独分离时,应保留必要功能并缩小目标范围,而不是通过不断扩大网段来尝试删除页面元素。

常见现象与恢复步骤

加了 REJECT,页面为什么还在显示?

先在 Home 确认 Global Routing 为 Config,再重新触发请求并检查记录。若新请求已显示 REJECT,而旧图片仍在,检查应用缓存;若完全没有新记录,不能用现有页面判断规则结果。

为什么屏蔽后登录也失败了?

先撤销最近添加的 DOMAIN-SUFFIX 或 IP-CIDR 规则,重新打开应用验证登录。若恢复正常,找出登录与目标内容是否共用域名或地址;能区分时改用精确 DOMAIN,不能区分时保留登录所需连接。

更新订阅后,刚写的规则怎么没效果了?

回到 Config 核对当前启用的文件及 Rule 段是否仍有本地修改。更新服务器订阅与替换远程配置不是同一个操作;若更新过程替换了整份配置,本地规则可能被覆盖,应从副本恢复并重新检查顺序。

可以直接复制一大批 IP 来屏蔽吗?

先不要批量加入。记录一个实际目标,验证它是否共享 CDN 地址、是否还会返回其他地址,再决定是否使用 IP-CIDR。每次只改一组相关规则,保留恢复副本,避免无法定位是哪一条导致功能异常。

本文以用户已有自己的服务商与订阅为前提,订阅从你的服务商处获取。服务商提供的连接参数解决接入问题,REJECT 解决当前配置下的匹配与拒绝问题,两者不能相互替代。完成验证后,保留精确、可解释且可以回退的规则,比持续增加无法确认用途的条目更便于维护。

获取 Shadowrocket 与基础配置教程

iPhone / iPad 版在 App Store $2.99 一次性买断;Mac(Apple 芯片 / Intel)、Windows、安卓、Linux 版免费。iPhone / iPad 的系统要求以 App Store 页面标注为准。客户端买断 ≠ 线路套餐,获取客户端后仍需使用自己的连接配置。

Shadowrocket 全平台下载