Shadowrocket(小火箭)的 REJECT 是请求分流策略,不是网页元素过滤器。本文面向已经有可用配置、需要自行维护规则的用户:先确认 Global Routing 使用 Config,再用范围最小的规则拦截目标,结合连接记录核对命中结果,出现误伤时只撤回本次修改。示例中的域名与地址均用于说明语法,不是屏蔽名单。
一、REJECT 在规则匹配中做什么
结论是:当请求进入 Shadowrocket 的规则处理流程,并命中以 REJECT 为策略的规则时,该请求会被拒绝,而不是继续按代理或直连方式访问目标。应用端可能表现为资源加载失败、连接报错或持续重试,具体提示由发起请求的应用决定。不能仅凭页面空白就认定 REJECT 已经命中。
规则通常按配置中的先后顺序匹配;一旦有适用规则决定策略,后面的规则就不会再为这次请求改变结果。因此,“写了规则”与“请求使用了这条规则”是两回事。上方宽泛的放行规则、实际生效的配置文件、当前分流模式,都会影响最终结果。
- DOMAIN:匹配指定的完整域名,适合先做最小范围验证。
- DOMAIN-SUFFIX:匹配指定域名及其子域名,范围比单个完整域名更大。
- IP-CIDR:按 IPv4 地址或网段匹配,不表达网页路径或页面元素。
- FINAL:作为最终兜底,放在规则末尾;其策略应沿用现有配置的设计。
例如,同一域名下的正文、图片与统计请求可能共用连接目标。仅凭域名规则无法区分这些内容的业务用途。将整个域名设为 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 | 按需连接设置;默认开关与条件以当前应用显示为准。 | 测试期间保持连接状态可确认,避免自动连接条件干扰复现。 |
- 记录当前选用的配置、Global Routing 状态及目标应用的正常表现。
- 在 Config 中保留副本,再修改实际生效文件的规则段。
- 回到 Home,确认连接已开启,并将 Global Routing 设为 Config。
- 保存并确认修改已加载,再让目标应用发起一次新的请求。
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,不必扩大到整个主域。
结论:从单域名、单地址开始
能够用 DOMAIN 或 /32 定位的目标,先不扩展成域名后缀或整段地址;只有连接记录证明目标范围确有必要时,才扩大匹配范围。
四、规则顺序、例外与 FINAL 兜底
需要保留某个子域名时,例外应放在宽泛的拒绝规则之前。下面仅演示顺序:允许 account.example.com 直连,拒绝其余 example.com 请求,最后将未匹配请求直连。DIRECT 在这里是明确的示例选择,不代表所有用户都应将兜底改成直连。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,REJECT
FINAL,DIRECT
实际使用时应保留现有配置所需的策略。若该例外必须走代理,不要机械复制 DIRECT,应使用配置中已存在且正确的策略。也不要把第二个 [Rule] 段直接追加到文件末尾;应编辑原有规则段,并确认最终顺序。
- 拒绝规则放在 FINAL 后面:前面的兜底已经处理请求,后面的拒绝规则无法按预期生效。
- 宽泛放行在前:如果目标先命中其他 DOMAIN-SUFFIX、IP-CIDR 或 GEOIP 规则,就不会再使用后面的 REJECT。
- 例外放在拒绝后面:目标已被拒绝,后置的放行例外不能补救。
- 将 FINAL 设为 REJECT:所有未匹配请求都会被拒绝;这属于默认拒绝配置,不是局部屏蔽的常规做法。
GEOIP 按地址的地区归属参与匹配,不是“某个网站是否应被屏蔽”的业务分类。为了处理一个域名而调整大范围 GEOIP 策略,通常会引入不必要的影响。优先移动或收窄与目标直接相关的规则。
五、规则屏蔽无法处理哪些场景
REJECT 针对连接目标作出决定,并不解析页面布局。HTTPS 请求中的网页路径、参数和正文也不能直接当作 DOMAIN-SUFFIX 的匹配值。对于同域混合内容、缓存内容以及共享基础设施,应先明确边界,再决定是否使用拒绝策略。
| 场景 | 可能出现的现象 | 处理建议 |
|---|---|---|
| 同域名承载不同内容 | 屏蔽一个目标时,正文、登录或图片也受影响。 | 核对是否存在独立子域;无法区分时保留必要功能。 |
| 多个站点共用一个地址 | IP-CIDR 拒绝导致其他域名也无法连接。 | 优先使用域名规则,避免直接屏蔽共享网段。 |
| 页面内容已缓存 | 规则命中后仍能看到旧内容。 | 发起新请求,并用连接记录验证,不能只看已有页面。 |
| 目标同时使用 IPv4 与 IPv6 | 只设置 IPv4 规则,仍有其他地址连接成功。 | 查看实际目标地址;IP-CIDR 不覆盖 IPv6,相关语法需另行核对。 |
| 应用自动重试或切换域名 | 一个目标被拒绝后,新的目标继续出现。 | 逐个核对请求用途,不要因重试就扩大为整段地址拒绝。 |
连接已经建立时,后续页面行为也不一定立即反映新规则。规则测试应以修改后产生的新连接为对象。关闭目标页面再重新打开,必要时结束目标应用后重试;同时留意复用连接,避免把旧连接上的传输误认为新规则失效。
六、按连接记录排查不生效与误伤
排查时一次只改一项。先复现失败请求,再查看应用内的连接记录与 Log(日志);相关入口及可显示字段以当前应用为准。重点记录目标域名或 IP、发起时间、最终策略,以及能够看到的命中规则。分享记录前应遮盖订阅地址、令牌和其他账户信息。
- 确认请求进入处理范围:检查 Home 的连接状态和 Global Routing。记录中没有新请求时,先排查连接状态、缓存与目标是否真正发起访问。
- 核对目标:页面显示的站点名不一定等于失败资源的域名。以对应时间的连接记录为线索,核对实际主机名与地址。
- 核对生效文件:回到 Config,确认编辑的是当前配置,并确认保存、加载后规则仍在。
- 核对顺序:从上向下检查可能提前匹配的放行规则,以及 FINAL 所在位置。
- 撤回本次修改:只移除新加的 REJECT,再复现同一操作。功能恢复说明本次规则值得重点检查,但仍需结合记录判断具体依赖。
- 缩小后再测试:将后缀规则改为单域名,或将网段改为单地址;分别测试登录、图片、搜索、播放等实际受影响功能。
规则已经保存,为什么目标还能打开?
先在 Home → Global Routing 选择 Config,再核对 Config 中当前文件。重新发起请求,检查目标是否与规则一致、规则是否位于 FINAL 之前;已有缓存页面不能作为命中证据。
加了 DOMAIN-SUFFIX 后登录失败,应该怎样改?
先撤回新增规则并复测登录。再从失败时的连接记录确认必要域名,将拒绝范围缩小到实际目标;确需保留例外时,把例外放在拒绝规则之前,并沿用该域名原本需要的路由策略。
加了 no-resolve,是否就不会有 DNS 请求?
不是。它限制的是为匹配该 IP 规则而触发的主动解析,并不禁用其他 DNS 行为。若要按域名拒绝,先用 DOMAIN 或 DOMAIN-SUFFIX,不要用此参数代替域名规则。
配置更新后屏蔽消失,是否需要重新导入订阅?
先查看 Config 中生效文件的规则段是否仍有本地修改。远程配置更新可能替换文件内容;保留副本,核对更新前后差异后再恢复必要规则。重新导入连接订阅不能替代这一步。
完成验证后,保留最小修改及其用途记录,不要把临时排查用的全局模式、整段地址拒绝或大范围后缀规则留作长期配置。下一次出现相同故障时,能准确撤回一条规则,比维护一份无法说明来源的大名单更容易定位问题。