要验证 DOMAIN 与 DOMAIN-SUFFIX 是否按手册工作,应当用同一主域名再配一组子域名,观察哪一类主机命中哪一条规则。验证的目的不是比较速度或观感,而是核对:完整域名是否只等于载荷本身,域名后缀是否包含后缀自身与点分子域,并排除非后缀的相似名。
适用条件:什么情况下值得做这组对照
在下列条件下做主域名加子域名对照最有意义:
- 配置里同时存在(或即将存在)
DOMAIN与DOMAIN-SUFFIX,载荷为主域名,例如手册中的google.com。 - 实际流量里既有裸主域名,也有
www、mail这类子域名,需要确认会不会只命中其中一种类型。 - 担心把
content-google.com这类“名字里有主域名片段、但不是点分后缀”的主机误收进来。 - 列表中还有
DOMAIN-KEYWORD、DOMAIN-WILDCARD、DOMAIN-REGEX、GEOSITE、RULE-SET或AND/OR/NOT,可能抢先匹配,需要用对照请求确认真正命中的是哪一条。
不适用的情况是:请求已经变成纯 IP、或只走 IP-CIDR/GEOIP 等目标 IP 规则。手册说明,域名开始匹配目标 IP 类规则时可能触发 DNS 解析;那会验证 IP 规则,而不是验证两种域名规则的范围差。对照时应尽量让请求在域名阶段就能被前排规则决定。
具体操作:用主域名和子域名做对照
准备四类主机,载荷统一用手册示例中的 google.com(你的环境可换成自己的主域名,但判断依据不变):
- A:主域名
google.com - B:子域名
www.google.com - C:另一子域名
mail.google.com - D:非后缀相似名
content-google.com
建议在 rules 里用可区分的策略名写成相邻两条(策略名仅用于区分命中条目,不要理解成效果承诺),并保证它们上方没有会提前吃掉这些主机的宽规则:
rules:
- DOMAIN,google.com,REJECT
- DOMAIN-SUFFIX,google.com,auto
- MATCH,auto
然后按请求主机逐项判断:
- 发起主机为 A 的请求。判断依据:
DOMAIN匹配完整域名,A 与载荷相等,应命中第一条。若 A 落到第二条或MATCH,说明第一条未参与匹配,应检查类型拼写、列表是否被其他配置覆盖、以及逻辑规则括号是否把该条排除。 - 发起主机为 B 的请求。判断依据:完整域名不相等,第一条不应命中;手册写明
DOMAIN-SUFFIX的google.com匹配www.google.com,第二条应命中。若 B 命中第一条,说明类型被写成了后缀或关键字,而不是完整匹配。若 B 直接到MATCH,说明第二条未生效或顺序被改乱。 - 发起主机为 C 的请求。判断依据与 B 相同,手册把
mail.google.com与www.google.com并列。B 能过而 C 不能过时,不是后缀定义变了,而是中间插入了只覆盖某一级主机的其他规则,需要把插入条目一并列入对照。 - 发起主机为 D 的请求。判断依据:手册明确不匹配
content-google.com。A、B、C 的结论都成立时,D 仍应继续向下,直到其他规则或MATCH。若 D 命中了第二条,说明实际生效的不是后缀匹配,而可能是关键字、过宽通配或正则。 - 需要验证通配符时,可临时增加
DOMAIN-WILDCARD,*.google.com,auto。手册指出此处仅支持*和?,且与配置文件其他地方的 Clash 格式通配符不相同。对照时分别看 A 与 B:通配符是否包含主域名本身,不能用DOMAIN-SUFFIX的结论代替,必须以该条是否命中为准。 - 若使用逻辑规则做组合验证,必须保持手册中的括号形式,例如
OR,((NETWORK,UDP),(DOMAIN,baidu.com)),REJECT。漏括号时,对照请求的命中项会整条错位,不能用来给两种域名类型下结论。
记录时只记四件事:请求主机、命中的规则类型、载荷、该条在列表中的位置。这四项足够用手册定义复核,不必引入未在文档出现的界面名称。
失败时下一步
对照结果与手册不一致时,按下面顺序缩小范围:
- A 不中
DOMAIN:检查载荷是否多写了空格、是否写成了带www的完整主机、以及是否被更靠前的DOMAIN-KEYWORD或GEOSITE先匹配。 - B、C 不中
DOMAIN-SUFFIX却中了DOMAIN:类型写反或复制时把两条写成了同一种。改回“完整一条、后缀一条”后再跑同一组主机。 - B、C 中了后缀,D 也中了后缀:停止用这两条做结论,先查找关键字、通配符、正则或规则集合是否把 D 收进去。手册反例是判断后缀边界的标准。
- 所有域名都落到
MATCH:说明域名规则整段未参与。核对rules是否被加载、RULE-SET名称是否存在、SUB-RULE括号是否把流量引进子规则。 - 同一主机有时像域名命中、有时像 IP 命中:查看该条是否已进入目标 IP 规则并触发解析;需要纯域名对照时,把 IP 类规则移到两种域名规则之后,或对 IP 规则使用手册所述仅适用于目标 IP 规则的
no-resolve,避免解析结果打断对照。 - 通配符条目行为与后缀条目不同:这是预期差异,回到
*、?的定义重新设计对照主机,不要把两种类型的验证混成一次请求。
完成一组 A/B/C/D 对照后,才能说清主域名规则与子域名请求的关系。验证标准始终是手册中的完整域名、域名后缀以及 google.com 的正反例,而不是列表看起来“已经写了主域名”。