阅读 Clash(mihomo)里 IP 规则的 no-resolve,要把它当成「目标 IP 类规则」行末的附加参数,而不是整份配置的 DNS 总开关。官方把它写在「附加参数」下,并限定:仅支持关于目标 IP 的规则。读配置时应先认规则类型,再看策略名后面有没有该参数,最后才结合列表顺序理解它管哪一次解析。
适用条件
本读法适用于 rules 中匹配目标 IP 的条目。文档示例为 IP-CIDR,127.0.0.0/8,DIRECT,no-resolve。同页属于目标 IP 匹配的类型还有 IP-CIDR6(与 IP-CIDR 效果相同,只是别名)、IP-SUFFIX、IP-ASN、GEOIP。另一附加参数 src 同样仅支持关于目标 IP 的规则,作用是把目标 IP 匹配转为来源 IP 匹配,阅读时不得与 no-resolve 互相替换。DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOSITE、DST-PORT、PROCESS-NAME、MATCH 等不是关于目标 IP 的规则,本页未将 no-resolve 写在这些类型上。AND、OR、NOT 的 payload 若内含目标 IP 规则,仍按内层类型判断该参数是否在支持范围内;逻辑规则需注意括号。
按字段顺序阅读一行规则
规则形态是「类型,载荷,出站[,附加参数]」。见到 no-resolve 时按下面四步读:
- 类型是否为目标 IP 类。只有是,才具备文档给出的语义。
- 官方语义:域名开始匹配关于目标 IP 的规则时,mihomo 将触发 DNS 解析,以检查该域名的目标 IP 是否匹配这条规则;选择
no-resolve表示跳过这次 DNS 解析。 - 参数写在出站名称之后,与示例位置一致,约束的是“轮到本条时要不要为核对目标 IP 而去解析”,不是删除本条,也不是改载荷。
- 规则从上到下匹配,顶部优先。本条会不会被读到,取决于上方是否已经命中。
RULE-SET 只是引用规则集合,需要到集合内部看各条是否带该参数。SUB-RULE 进入子规则后,同样按类型阅读附加参数。
结合“更早的匹配”判断字面意思
文档写明:如在更早的匹配中触发了 DNS 解析,则依旧会匹配到添加了 no-resolve 选项的目标 IP 类规则。因此不能把该参数读成“本条永远不用 IP”。判断依据是:
- 轮到本条时还没有目标 IP:跳过解析,本条不会为核对 CIDR、后缀、ASN 或国家代码去查 DNS。
- 上方某条目标 IP 规则已经触发过解析:目标 IP 已存在,本条仍可按 IP 匹配。
读配置时要同时看本行和它上方第一条会触发解析的目标 IP 规则,而不是只盯参数本身。
读错时下一步
若分不清目标 IP 与来源 IP,先把 SRC-IP-CIDR、SRC-GEOIP、SRC-IP-ASN、SRC-IP-SUFFIX 排除出“为检查目标 IP 而解析域名”的语境;来源地址随连接存在,与文档所述的触发解析不是同一过程。若把 no-resolve 理解成整份规则不再解析,属于扩大语义,应回到附加参数原文,只作用于该条。逻辑规则括号或 payload 写乱导致看不出内层类型时,先按文档核对括号,再读附加参数。