本文面向已经在 Shadowrocket(小火箭)中使用自己已有配置、希望添加少量屏蔽规则的用户。先区分规则条件与 REJECT 策略,再按“备份配置、添加精确规则、检查顺序、验证新请求”的步骤操作。示例使用保留域名与文档地址,重点是说明语法,不是一份可以直接替换现有配置的屏蔽清单。
一、REJECT 是策略,不是域名匹配条件
一条规则通常由匹配类型、匹配内容和处理策略组成。例如 DOMAIN-SUFFIX,ads.example.com,REJECT 中,DOMAIN-SUFFIX 决定如何匹配,ads.example.com 是待匹配的域名后缀,REJECT 才是命中后的处理策略。仅写一个 REJECT,并不能表达要拦截哪个域名。
当请求进入 Shadowrocket 的处理范围,并按当前配置进行规则匹配时,命中 REJECT 的连接会被拒绝,而不是继续按该请求原本可能采用的 DIRECT 或代理策略转发。它不等于删除网页元素,也不负责把页面中的空白区域重新排版;应用可能显示加载失败、占位区域或重试提示。
规则匹配发生在连接处理过程中,但不要据此推断“命中 REJECT 就绝不产生 DNS 查询”。域名解析、缓存以及为 IP 类规则取得地址的过程会影响实际行为。REJECT 的作用是拒绝匹配连接,不是一个独立的 DNS 隐私开关。
二、常见写法:精确域名、后缀与 IP 网段
先从精确域名开始,只有确认整个子域树都应拒绝时,再扩大到 DOMAIN-SUFFIX。规则中的域名不要带 https://、路径、查询参数或末尾的斜杠。下面几行用于分别解释语法,不要求全部加入同一份配置。
[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,metrics.example.com,REJECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
IP-CIDR6,2001:db8::/32,REJECT,no-resolve
| 规则类型 | 匹配范围 | 使用注意 |
|---|---|---|
DOMAIN | 指定的完整域名。 | 适合只拒绝一个已确认的主机名。 |
DOMAIN-SUFFIX | 指定域名及其子域名。 | metrics.example.com 也覆盖 a.metrics.example.com,不覆盖 othermetrics.example.com。 |
IP-CIDR | IPv4 地址网段。 | 共享地址可能同时承载正常业务,不能把一个域名解析出的地址直接视为专用地址。 |
IP-CIDR6 | IPv6 地址网段。 | 只写 IPv4 规则不能覆盖 IPv6 目标地址。 |
no-resolve 用于避免为了这条 IP 类规则主动把域名解析成 IP;它不表示关闭所有 DNS 解析,也不阻止已经以 IP 为目标的请求参与匹配。示例中的 192.0.2.0/24 与 2001:db8::/32 是文档地址,不能据此期待某个真实服务被屏蔽。
判断:先缩小匹配范围,再扩大屏蔽范围
只观察到一个主机名发起不需要的请求时,先添加 DOMAIN 规则;只有逐项确认其子域名用途后,才改为 DOMAIN-SUFFIX,不要先封整个共享网段。
三、规则顺序:例外在前,FINAL 在后
在常规规则列表中,请求按顺序匹配,先命中的规则决定处理策略。把 REJECT 放在列表末尾,并不意味着它会覆盖前面的放行规则;同样,前面已经命中的宽泛屏蔽规则,也不会再由后面的例外规则撤销。
[Rule]
DOMAIN,assets.ads.example.com,DIRECT
DOMAIN-SUFFIX,ads.example.com,REJECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
这段示例中,assets.ads.example.com 先命中精确例外;video.ads.example.com 则命中下一条后缀屏蔽。GEOIP 按目标 IP 的地理归属参与匹配,并不识别内容用途;若把它放在屏蔽规则前,符合其条件的请求可能提前走 DIRECT。FINAL 是前序规则都未命中时的兜底项,应放在规则列表末尾。
精确例外
- 类型
DOMAIN- 目标
assets.ads.example.com- 策略
DIRECT- 位置
- 放在覆盖它的后缀屏蔽规则之前。
DIRECT 仅表示直连;真实例外应沿用该业务需要的可用策略。
后缀屏蔽
- 类型
DOMAIN-SUFFIX- 目标
ads.example.com- 策略
REJECT- 位置
- 位于精确例外之后、宽泛放行与 FINAL 之前。
本文 FINAL,DIRECT 仅用于解释兜底,不代表应替换原有分流策略。
合并规则时应在现有 [Rule] 分节中插入对应行,不要重复粘贴整个分节,也不要直接删除原有代理策略、规则引用或兜底设置。配置中若还有外部规则引用,应结合引用所在位置检查整体顺序,不能只看刚添加的几行。
四、在 Config 中修改并验证生效
规则保存在配置中,已有节点订阅主要提供连接信息;更新订阅不能代替编辑规则。操作前先保留一份当前可用配置,再进入 Config,确认正在编辑和正在使用的是同一份配置。远程配置更新可能替换本地改动,应保留自定义规则副本。
- 记录原状态。记下 Home → Global Routing 当前选项以及 Config 中启用的配置,保留原文件,便于恢复。
- 只增加一条测试规则。在 Config 中打开目标配置的编辑入口,在
[Rule]内添加已确认目标的 DOMAIN 规则,放在可能提前命中的宽泛规则之前,保存并启用该配置。 - 使用规则模式。在 Home → Global Routing 选择 Config。Proxy 与 Direct 是不同的全局处理姿态,不能用来验证同一份 Config 规则是否正常命中;若使用 Scene,应先确认场景实际选用的配置和路由状态。
- 重新发起请求。确认连接开关已开启,关闭目标页面后重新打开。必要时断开再连接以建立新连接;仅刷新已有长连接中的界面,可能看不到规则变化。
- 核对记录。查看连接或日志记录中的目标域名、目标地址、匹配规则与处理策略。以新请求命中 REJECT 为证据,不以页面某个区域暂时消失作为唯一判断。
五、按域名屏蔽的边界与误伤来源
DOMAIN 与 DOMAIN-SUFFIX 处理的是主机名,不是页面内的某一段内容。HTTPS 请求中同一主机的不同路径,例如 https://example.com/news 与 https://example.com/promo,不能仅靠这两种域名规则区分;直接拒绝 example.com 会同时影响这两个路径对应的连接。
- 正常内容与待屏蔽内容共用域名。图片、登录、支付验证和统计请求可能共用基础设施。出现登录失败或图片缺失时,先回退最近新增的规则,再逐个核对主机名。
- 请求只有 IP 目标。如果规则引擎没有可用的关联域名,单条 DOMAIN-SUFFIX 无法仅凭 IP 判断它属于哪个域名。不要把所有未命中都归因于规则顺序。
- 内容来自缓存或已有连接。离线数据、本地缓存与复用中的连接,都可能让修改后页面看起来没有变化。应检查规则启用后的新请求,而不是只观察旧页面。
- 主机名与网络地址变化。域名可能切换备用主机,地址也可能变化。对一个临时解析结果写 IP-CIDR,既可能很快失效,也可能误伤共享该地址的其他站点。
- 请求未按目标配置处理。连接未启用、选中了其他配置或 Global Routing 状态不符,都会使验证结论失真。先确认处理路径,再扩大屏蔽范围。
按域名拒绝通常不需要为此开启 HTTPS 解密。增加证书或修改其他无关设置,不能解决“同一域名承载多种内容”的匹配粒度问题。对无法独立区分的资源,应保留功能边界,不承诺通过一条 REJECT 规则完整移除某类页面内容。
六、常见问题:未命中、误伤与更新回退
加了 REJECT,页面怎么还是能打开?
先确认目标是整个页面主机还是页面中的一个资源主机。回到 Home → Global Routing 检查 Config,再到 Config 核对启用文件。重新发起请求后查看记录;如果实际请求使用了另一个主机名,应根据记录添加精确规则,而不是反复重复同一行。
规则命中后,正常图片也不见了怎么办?
先恢复备份或移除最近添加的屏蔽行,确认图片恢复。随后把 DOMAIN-SUFFIX 缩小为已确认的 DOMAIN;确有独立正常主机时,把它的精确例外放到屏蔽行之前。若图片和待拒绝内容共用同一主机,单靠域名规则不能分开。
更新已有订阅后,为什么规则没有变化?
先区分更新的是 Home 中的节点订阅,还是 Config 中的远程配置。前者并不等同于更新规则;后者则可能覆盖本地编辑。回到 Config 检查实际文件中的 [Rule] 内容,把自行维护的规则与原始配置分别备份,更新后逐项核对。
把 FINAL 改成 REJECT,能省去逐条屏蔽吗?
FINAL,REJECT 会拒绝所有没有被前序规则匹配的连接,作用远大于屏蔽一个域名。除非正在维护明确的允许列表,否则不要这样替代定向规则。先恢复原来的 FINAL 策略,再添加范围明确的 DOMAIN 或 DOMAIN-SUFFIX。
七、保存前的最小检查清单
一份可维护的 REJECT 配置,应能回答“拒绝哪个目标、为何使用这种匹配、例外在哪里、如何恢复”四个问题。每次只改变一个匹配条件,并保留修改前后记录,比一次导入大量未经确认的规则更容易定位故障。
- 规则位于实际启用配置的
[Rule]内,域名字段没有协议头或路径。 - 精确例外在对应屏蔽规则之前,屏蔽规则在可能提前命中的宽泛规则之前。
- FINAL 保持原有兜底用途,不因添加屏蔽规则而随意改动。
- Home → Global Routing 使用 Config,并已用新的连接记录核对实际命中结果。
- 已验证登录、图片和其他必要功能,且保存了可恢复的原配置。