Shadowrocket REJECT 规则怎么写:请求屏蔽的原理、写法与边界

讲解 REJECT 策略如何在匹配阶段拦截请求,DOMAIN-SUFFIX 与 IP-CIDR 写法示例,以及规则屏蔽无法处理的场景和误伤排查。

本文速览

Shadowrocket(小火箭)的 REJECT 是请求分流策略,不是网页元素过滤器。本文面向已经有可用配置、需要自行维护规则的用户:先确认 Global Routing 使用 Config,再用范围最小的规则拦截目标,结合连接记录核对命中结果,出现误伤时只撤回本次修改。示例中的域名与地址均用于说明语法,不是屏蔽名单。

一、REJECT 在规则匹配中做什么

结论是:当请求进入 Shadowrocket 的规则处理流程,并命中以 REJECT 为策略的规则时,该请求会被拒绝,而不是继续按代理或直连方式访问目标。应用端可能表现为资源加载失败、连接报错或持续重试,具体提示由发起请求的应用决定。不能仅凭页面空白就认定 REJECT 已经命中。

请求进入隧道 识别目标信息 按序匹配规则 命中拒绝策略 请求连接失败

规则通常按配置中的先后顺序匹配;一旦有适用规则决定策略,后面的规则就不会再为这次请求改变结果。因此,“写了规则”与“请求使用了这条规则”是两回事。上方宽泛的放行规则、实际生效的配置文件、当前分流模式,都会影响最终结果。

例如,同一域名下的正文、图片与统计请求可能共用连接目标。仅凭域名规则无法区分这些内容的业务用途。将整个域名设为 REJECT,可能同时阻断页面必需的资源。

二、先核对 Config 与 Global Routing

操作前先保留当前配置副本。在 Config(配置)中确认当前选中的文件,进入该文件的编辑入口,检查其中的规则段;编辑入口的具体呈现以当前应用显示为准。不要只修改一个未启用的文件,然后直接以网页表现判断规则是否正确。

界面项含义与默认状态本文测试建议
Home → Global Routing → Config按当前配置分流;默认选中项以当前应用显示为准。使用 Config,验证配置中的 REJECT 规则。
Global Routing → Proxy全局代理模式;不是本文规则测试的基线。测试前切回 Config,不以此模式判断规则段是否命中。
Global Routing → Direct全局直连模式;不是本文规则测试的基线。测试前切回 Config。
Global Routing → Scene按所设场景使用相应分流行为;有效结果取决于场景设置。先记录原状态,测试时使用 Config,完成后按需恢复。
Settings → On Demand按需连接设置;默认开关与条件以当前应用显示为准。测试期间保持连接状态可确认,避免自动连接条件干扰复现。
  1. 记录当前选用的配置、Global Routing 状态及目标应用的正常表现。
  2. 在 Config 中保留副本,再修改实际生效文件的规则段。
  3. 回到 Home,确认连接已开启,并将 Global Routing 设为 Config。
  4. 保存并确认修改已加载,再让目标应用发起一次新的请求。

Home 中已有的连接条目与 Config 中的规则文件不是同一层设置。更新连接订阅,也不等于你刚编辑的规则一定已被加载。若配置本身会从远程更新,还应核对更新后本地修改是否仍然保留。

三、DOMAIN-SUFFIX 与 IP-CIDR 的正确写法

文本规则采用英文逗号分隔字段,不使用中文逗号。下面给出四条独立语法示例,不是可整体替换的完整配置。域名使用保留示例域,192.0.2.0/24 是文档示例地址段;这些值不对应实际需要屏蔽的业务目标。

DOMAIN,metrics.example.com,REJECT
DOMAIN-SUFFIX,example.com,REJECT
IP-CIDR,192.0.2.18/32,REJECT,no-resolve
IP-CIDR,192.0.2.0/24,REJECT,no-resolve

域名规则字段

规则类型
DOMAIN 或 DOMAIN-SUFFIX
匹配值
metrics.example.com 或 example.com
目标策略
REJECT,拒绝匹配请求
默认值与建议
匹配值没有通用默认值;建议先用 DOMAIN 验证。

域名字段只填主机名,不填 https://、路径或端口。

地址规则字段

规则类型
IP-CIDR,匹配 IPv4 地址范围
匹配值
192.0.2.18/32,表示单个地址
目标策略
REJECT,拒绝匹配请求
可选参数
no-resolve,避免为匹配该 IP 规则主动进行域名解析
默认值与建议
地址范围没有通用默认值;建议先核对单个地址,再考虑网段。

no-resolve 不会关闭全局 DNS,也不是“拒绝所有解析”的开关。

DOMAIN-SUFFIX,example.com,REJECT 可匹配 example.com 以及 img.example.com 等子域名,不应理解成任意包含该字符串的域名。若只准备拦截 metrics.example.com,先用 DOMAIN,不必扩大到整个主域。

/32
IPv4 单地址匹配范围
/24
包含 256 个 IPv4 地址的匹配范围
3 字段
基本域名规则:类型、匹配值、策略

结论:从单域名、单地址开始

能够用 DOMAIN 或 /32 定位的目标,先不扩展成域名后缀或整段地址;只有连接记录证明目标范围确有必要时,才扩大匹配范围。

四、规则顺序、例外与 FINAL 兜底

需要保留某个子域名时,例外应放在宽泛的拒绝规则之前。下面仅演示顺序:允许 account.example.com 直连,拒绝其余 example.com 请求,最后将未匹配请求直连。DIRECT 在这里是明确的示例选择,不代表所有用户都应将兜底改成直连。

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

实际使用时应保留现有配置所需的策略。若该例外必须走代理,不要机械复制 DIRECT,应使用配置中已存在且正确的策略。也不要把第二个 [Rule] 段直接追加到文件末尾;应编辑原有规则段,并确认最终顺序。

GEOIP 按地址的地区归属参与匹配,不是“某个网站是否应被屏蔽”的业务分类。为了处理一个域名而调整大范围 GEOIP 策略,通常会引入不必要的影响。优先移动或收窄与目标直接相关的规则。

五、规则屏蔽无法处理哪些场景

REJECT 针对连接目标作出决定,并不解析页面布局。HTTPS 请求中的网页路径、参数和正文也不能直接当作 DOMAIN-SUFFIX 的匹配值。对于同域混合内容、缓存内容以及共享基础设施,应先明确边界,再决定是否使用拒绝策略。

场景可能出现的现象处理建议
同域名承载不同内容屏蔽一个目标时,正文、登录或图片也受影响。核对是否存在独立子域;无法区分时保留必要功能。
多个站点共用一个地址IP-CIDR 拒绝导致其他域名也无法连接。优先使用域名规则,避免直接屏蔽共享网段。
页面内容已缓存规则命中后仍能看到旧内容。发起新请求,并用连接记录验证,不能只看已有页面。
目标同时使用 IPv4 与 IPv6只设置 IPv4 规则,仍有其他地址连接成功。查看实际目标地址;IP-CIDR 不覆盖 IPv6,相关语法需另行核对。
应用自动重试或切换域名一个目标被拒绝后,新的目标继续出现。逐个核对请求用途,不要因重试就扩大为整段地址拒绝。

连接已经建立时,后续页面行为也不一定立即反映新规则。规则测试应以修改后产生的新连接为对象。关闭目标页面再重新打开,必要时结束目标应用后重试;同时留意复用连接,避免把旧连接上的传输误认为新规则失效。

六、按连接记录排查不生效与误伤

排查时一次只改一项。先复现失败请求,再查看应用内的连接记录与 Log(日志);相关入口及可显示字段以当前应用为准。重点记录目标域名或 IP、发起时间、最终策略,以及能够看到的命中规则。分享记录前应遮盖订阅地址、令牌和其他账户信息。

  1. 确认请求进入处理范围:检查 Home 的连接状态和 Global Routing。记录中没有新请求时,先排查连接状态、缓存与目标是否真正发起访问。
  2. 核对目标:页面显示的站点名不一定等于失败资源的域名。以对应时间的连接记录为线索,核对实际主机名与地址。
  3. 核对生效文件:回到 Config,确认编辑的是当前配置,并确认保存、加载后规则仍在。
  4. 核对顺序:从上向下检查可能提前匹配的放行规则,以及 FINAL 所在位置。
  5. 撤回本次修改:只移除新加的 REJECT,再复现同一操作。功能恢复说明本次规则值得重点检查,但仍需结合记录判断具体依赖。
  6. 缩小后再测试:将后缀规则改为单域名,或将网段改为单地址;分别测试登录、图片、搜索、播放等实际受影响功能。

规则已经保存,为什么目标还能打开?

先在 Home → Global Routing 选择 Config,再核对 Config 中当前文件。重新发起请求,检查目标是否与规则一致、规则是否位于 FINAL 之前;已有缓存页面不能作为命中证据。

加了 DOMAIN-SUFFIX 后登录失败,应该怎样改?

先撤回新增规则并复测登录。再从失败时的连接记录确认必要域名,将拒绝范围缩小到实际目标;确需保留例外时,把例外放在拒绝规则之前,并沿用该域名原本需要的路由策略。

加了 no-resolve,是否就不会有 DNS 请求?

不是。它限制的是为匹配该 IP 规则而触发的主动解析,并不禁用其他 DNS 行为。若要按域名拒绝,先用 DOMAIN 或 DOMAIN-SUFFIX,不要用此参数代替域名规则。

配置更新后屏蔽消失,是否需要重新导入订阅?

先查看 Config 中生效文件的规则段是否仍有本地修改。远程配置更新可能替换文件内容;保留副本,核对更新前后差异后再恢复必要规则。重新导入连接订阅不能替代这一步。

完成验证后,保留最小修改及其用途记录,不要把临时排查用的全局模式、整段地址拒绝或大范围后缀规则留作长期配置。下一次出现相同故障时,能准确撤回一条规则,比维护一份无法说明来源的大名单更容易定位问题。

App Store 下载先核对正版产品页