本文适合已经在 Shadowrocket(小火箭)中配置好连接、准备修改 Config 的用户。先核对 Global Routing,再按“具体例外在前、一般规则在后、FINAL 放末尾”的顺序整理规则;通过域名与 IP 示例,区分匹配条件和处理策略,最后用新建连接验证实际结果。订阅从你的服务商处获取,连接服务与客户端购买分别管理。
先核对 Global Routing
自定义规则是否参与判断,首先取决于 Home → Global Routing 的当前选择。Config 按当前启用的配置处理连接;Proxy 与 Direct 用于不同的全局处理方式。不要在 Proxy 下测试规则顺序,也不要把 Direct 下可以访问某个目标,当作某条 DIRECT 规则已经命中的证据。
Config
推荐使用当前启用的 Config,按其中的规则决定连接策略。结果可能是 PROXY、DIRECT 或 REJECT,并不预设未匹配连接必须直连。
适合:编写、验证并日常使用自定义规则。
Proxy
用于全局代理处理,不按本文的普通规则顺序进行分流测试。可以辅助判断已配置的代理连接是否可用。
适合:短时隔离代理连接问题与规则问题。
Direct
用于全局直连处理。目标能够打开,只说明当前直连路径可用,不能证明 Config 中的某条规则生效。
适合:对照本地网络的直连表现。
Global Routing 中还可能使用 Scene。Scene 按所配置的场景条件工作;排查时先记录原设置,临时明确选择 Config,避免把场景切换产生的变化误认为规则变化。Settings → On Demand 管理连接触发条件,不负责调整 [Rule] 内的匹配顺序;测试期间尽量保持网络与触发条件不变。
结论:先固定测试条件
先确认 Global Routing 为 Config、目标配置已启用,再修改一条规则。否则,即使配置文本正确,也无法从访问结果判断这次修改是否生效。
规则语法与首个命中
常见规则写作“类型,匹配内容,策略”,使用英文逗号分隔;FINAL 不需要匹配内容,因此通常只有两个字段。规则关键字与策略保持英文原文,不在关键字中加入中文标点。下面是配置文本示意,不是应用界面,也不代表适用于所有网络的完整配置。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
假设待判断的域名是 login.example.com,第一条 DOMAIN 已经命中,因此采用 DIRECT,不再由下一条 DOMAIN-SUFFIX 改成 PROXY。若把这两行交换,较宽的后缀规则先命中,同一个域名就会采用 PROXY。“更精确”只有放在更前面才构成例外,不存在自动覆盖前面规则的优先级。
DOMAIN,example.com,DIRECT:精确匹配该域名,不自动包含它的子域名。DOMAIN-SUFFIX,example.com,PROXY:匹配example.com本身及其子域名;不是匹配任意包含这段文字的域名。FINAL,PROXY:前面的规则均未命中时使用 PROXY;它不是为每条规则附加的第二次判断。
PROXY、DIRECT 与 REJECT
匹配条件回答“这条规则管哪个目标”,策略回答“命中后怎样处理”。DOMAIN-SUFFIX 本身不表示代理,IP-CIDR 本身也不表示直连;同一种匹配类型可以搭配不同策略。修改时应分别核对条件和策略,不能只看行首关键字。
| 策略 | 处理方式 | 核对重点 |
|---|---|---|
PROXY | 交由代理路径处理。 | 核对当前代理选择、策略引用及连接可用性。 |
DIRECT | 直接连接目标。 | 核对本地网络是否能到达目标。 |
REJECT | 拒绝匹配的连接。 | 核对拒绝范围是否误包含必需域名。 |
PROXY 不会创建连接服务,也不能让不可用的连接自动恢复。如果配置中使用了自定义策略组名称,还需要核对该名称对应的定义与选择;不要把其他配置中的组名直接贴到规则尾部。本文示例只使用三种基础策略,便于观察规则顺序,而不是要求将现有策略组全部替换。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在这段示例中,blocked.example.com 会被第一条拒绝;login.example.com 采用 DIRECT;docs.example.com 采用 PROXY。其他未命中的目标由 FINAL 直连。这里的域名仅用于讲解语法,不要求用户访问,也不表示相关地址提供任何连接服务。
IP-CIDR 与 GEOIP 的边界
IP-CIDR 判断 IPv4 地址是否落在指定网段内,不是按网站名称分类。192.168.0.0/16 覆盖从 192.168.0.0 到 192.168.255.255 的地址,但不包括 10.0.0.0/8。需要让本地设备直连时,应核对实际地址与子网,而不是把一个网段当作全部本地网络。
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
- no-resolve:在相应 IP 规则上,避免仅为匹配该规则而触发域名解析;它不表示整份配置停止使用 DNS。已有可用目标 IP 时仍可参与相应地址判断。
- GEOIP:按目标 IP 的地理归属数据判断,不按网页语言、域名后缀或用户所在地判断。CDN 地址变化、解析结果与归属数据都可能影响结果。
- IPv6:IPv4 网段规则不会自动覆盖 IPv6 地址;涉及 IPv6 时需要单独审视地址规则与网络设置,不能仅凭上述三条判断覆盖完整。
若需求是“某个域名始终使用指定策略”,优先用明确的 DOMAIN 或 DOMAIN-SUFFIX 表达,并将它放在可能抢先命中的一般规则前面。不要为了修复一个域名的分流,就把所有 GEOIP 规则一起删除;先查明它实际命中了哪一条,再决定修改范围。
FINAL 兜底与安全修改步骤
FINAL 通常放在 [Rule] 的末尾。它前面没有命中的连接才会走到这里,因此 FINAL 后面继续添加普通规则,通常无法达到预期。选择 FINAL,PROXY 还是 FINAL,DIRECT,取决于希望如何处理未分类连接;两者都是明确策略,不存在适合所有用户的统一答案。
-
保留备份
进入 Config,确认当前启用的文件,先保留一份可恢复副本。记录原有 FINAL、策略组名称与规则顺序,避免覆盖远程配置时丢失自定义内容。
-
固定模式
在 Home → Global Routing 选择 Config。回到 Config 确认将要编辑与实际启用的是同一份文件,而不是仅名称相近的另一个副本。
-
插入例外
在该文件的 [Rule] 段中,将精确 DOMAIN 例外放到相应 DOMAIN-SUFFIX 之前。新增行必须位于 FINAL 前,保留英文逗号与原有段落边界。
-
检查兜底
检查 [Rule] 末尾的 FINAL 是否符合预期。不要为同一个目的连续添加多个 FINAL,也不要将 FINAL 写成带域名的三字段规则。
-
验证新连接
保存并确认配置启用后,让目标应用重新建立连接。核对连接记录中的目标域名或 IP、命中规则与采用策略;若结果不符,先恢复备份,再逐项修改。
规则修改主要影响后续连接的判断;已经建立的长连接可能继续沿用此前路径。测试时应结束旧会话,必要时在可中断任务的情况下重新连接,再打开同一目标。不要在文件传输或通话期间反复切换模式,以免把连接中断误认为规则语法错误。
规则未生效的常见核对
排查顺序应从“是否使用这份配置”开始,再检查“哪个目标被匹配”,最后检查“策略执行后能否连通”。网页打不开不等于 REJECT 命中;页面能打开,也不等于所有关联域名都走了同一条策略。登录、图片与视频请求可能使用不同域名,必须按实际连接分别判断。
明明写了 DIRECT,为什么还是走 PROXY?
先检查 Home → Global Routing 是否为 Config,再检查 DIRECT 行之前是否已有 DOMAIN-SUFFIX 等规则命中同一目标。把精确例外移到宽泛规则前,保存后重新建立连接,不要只反复切换列表中的代理选择。
把规则加到最后,为什么没有变化?
打开当前 Config 的 [Rule],找到 FINAL。若新规则在 FINAL 后,将它移到 FINAL 前;若前面另有更宽的匹配项,还要继续调整相对位置。一次只移动一条,便于确认是哪次更改影响了结果。
IP-CIDR 写了 no-resolve,为什么域名没命中?
检查当次判断是否已有可用目标 IP。no-resolve 不会为该规则主动补齐域名解析;若目的是固定某个域名的策略,改用明确的 DOMAIN 或 DOMAIN-SUFFIX,并把它放到一般 IP 规则前。
一条 REJECT 让整个页面异常,怎么恢复?
先从备份恢复该条修改,或仅移除刚添加的 REJECT 行,再重新建立连接验证。检查被拒绝的域名是否同时承载登录、脚本或资源;需要限制范围时,用精确 DOMAIN 替代过宽的后缀匹配。
更新后规则恢复原样,应该检查哪里?
到 Config 核对当前启用文件、远程来源与 [Rule] 内容,确认更新是否替换了本地修改。先恢复保留的副本,再决定如何维护自定义规则;不要把重复更新连接订阅当作恢复配置规则的方法。
完成排查后,保留能够解释结果的最小规则集合。每条例外都应有明确对象与用途,FINAL 则只承担未匹配连接的兜底。需要进一步区分界面词时可查阅术语表;连接路径仍不可用时,按疑难解答核对网络与代理连接,而不是继续堆叠规则。