Clash 的 GEOSITE 规则以分类名称作为进入 Geosite 的索引。名称不受当前数据支持时,这一行不会匹配,请求按从上到下的顺序继续寻找后续规则。官方示例写作 GEOSITE,youtube,PROXY,说明合法写法是「类型 + 分类名 + 出站」,但示例并不等于当前数据一定含有该名称,也不等于该名称永远可用。本文只说明怎样核对分类名称是否受当前数据支持,以及不支持时如何收束到可审查的规则。
适用条件与名称在规则中的位置
适用条件是配置准备使用或已经使用 GEOSITE。若只使用 DOMAIN、DOMAIN-SUFFIX 等字面规则,不存在「分类名称是否被数据支持」这一问题。RULE-SET 使用的是规则集合名,官方示例为 RULE-SET,providername,proxy,并且需配置 rule-providers;集合名是否可用,取决于提供者,而不是 Geosite 分类名。二者不要混核。
核对对象是 GEOSITE 行中的分类名字段,而不是出站名、代理组名或 MATCH 的兜底出站。官方还列出 GEOIP 使用国家代码、IP-ASN 使用 ASN、IN-NAME 使用入站名称、PROCESS-NAME 使用进程名等,这些字符串各有匹配对象。把国家代码写进 GEOSITE,或把分类名写进 GEOIP,都属于类型与名称空间不匹配,应判定为当前规则类型不支持该字符串,而不是「数据差一点就能命中」。
判断名称角色的依据始终是官方类型定义:GEOSITE 匹配 Geosite 内的域名,部分内容参考 v2fly/domain-list-community。因此只有 Geosite 中存在的分类名,才可能让该行成立。
核对步骤与可观察的判断依据
第一步,列出 rules 中全部 GEOSITE 行,抽出分类名,确认格式与官方示例一致,即类型为 GEOSITE,随后是分类名与出站。使用 AND、OR、NOT 时,分类名必须出现在带类型的 payload 里,例如与其他条件并列,并注意括号;括号错误时,名称即使被数据支持也不会按预期执行。
第二步,确认该行在列表中真正会被问到。规则将按照从上到下的顺序匹配。若更靠前的字面域名规则已经覆盖同一主机名,你无法从流量下落判断分类名是否被数据支持,因为 GEOSITE 根本未被询问。核对名称支持与否时,应选择不会被前方 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 等先行截获的目标,或者临时理解该行上方是否存在更宽的关键字规则。
第三步,用「该行不成立后的下落」作为判断依据。名称受支持且域名位于该分类中,匹配应停在这一行。名称不受当前数据支持时,GEOSITE 条件不成立,请求继续向下。若最终落到 MATCH——官方定义为匹配所有请求、无需条件——说明包括该分类行在内的前方规则都未命中。对专门用来探测名称的目标而言,这构成「名称或数据未支持该用法」的证据。注意:域名不在集合中、名称本身不存在、以及被前方规则截走,三者下落可能相似,必须结合列表顺序区分。
第四步,排除非域名条件造成的假阴性。NETWORK、DST-PORT、PROCESS-NAME、IN-TYPE 等与分类名无关。udp 在节点没有 udp 支持时会继续向下匹配,这也不能解释成分类名无效。涉及目标 IP 的后续规则还可能触发 dns 解析;no-resolve 仅支持关于目标 IP 的规则,且更早触发的解析仍可供带 no-resolve 的 IP 规则使用。这些机制会改变「名称不支持」之后的路径,但不改变 GEOSITE 名称是否存在于当前数据。
名称不受支持时的下一步
判断为不受支持后,不要靠更换相近分类名去猜测当前数据里有什么。下一步是停止把该名称当作唯一条件,改用官方允许直接写在配置里的域名类型:完整主机名用 DOMAIN,后缀用 DOMAIN-SUFFIX,以及 DOMAIN-KEYWORD、DOMAIN-WILDCARD、DOMAIN-REGEX。通配符仅支持 * 和 ?,官方并提醒它与配置文件其他地方的 Clash 格式通配符不相同。需要整组可更新列表时,先配置 rule-providers,再使用 RULE-SET,用集合名代替无效的 GEOSITE 分类名。
若只是个别站点必须保住,把字面规则放在原 GEOSITE 之前、MATCH 之前,避免无效分类名把流量交给兜底行。逻辑需求用 AND、OR、NOT 或 SUB-RULE 表达,payload 写明规则类型并核对括号。完成后再次检查列表顺序:无效分类名可以删除或留作非关键路径,但不能挡在更具体的字面规则前面干扰判断。仍无法确认名称空间时,只保留字面域名规则与官方已说明的其他类型,直到分类名能与当前 Geosite 数据对应为止。