适用条件:从目标地址开始规划的前提
Clash(mihomo)的 IP-CIDR 与 IP-CIDR6 用来匹配 IP 地址范围,二者效果一样,IP-CIDR6 只是别名。从目标地址开始规划,适用条件是:你已经能指出请求要到达的那一侧地址,并准备用网段而不是主机名来选择策略。官方示例写作 IP-CIDR,127.0.0.0/8,DIRECT,no-resolve 以及 IP-CIDR6,2620:0:2d0:200::7/32,auto。
若真正要匹配的是客户端来源地址,应改用 SRC-IP-CIDR、SRC-IP-SUFFIX、SRC-GEOIP、SRC-IP-ASN,或在目标 IP 规则上使用附加参数 src(将目标 IP 匹配转为来源 IP 匹配)。那些步骤不属于从目标地址规划。规则按从上到下的顺序匹配,列表顶部优先级更高;网段行若写在已被域名规则或 MATCH 吃掉的位置,规划内容不会被执行。MATCH 匹配所有请求且无需条件,目标网段必须写在它之前。
把目标地址落成一条网段规则的操作
先确认目标 IP 的地址族。IPv4 使用 IP-CIDR;IPv6 可使用 IP-CIDR 或别名 IP-CIDR6。将地址写成带前缀长度的 CIDR:只覆盖这一台时使用足够长的前缀,覆盖其所在块时缩短前缀。官方把 127.0.0.0/8 写成一整块范围,而不是把块内地址拆成大量单点。
第三个字段填写策略,示例中出现过 DIRECT、auto、PROXY。第四个位置可写附加参数。no-resolve 仅支持关于目标 IP 的规则:当域名开始匹配这类规则时,mihomo 将触发 DNS 解析,以检查该域名的目标 IP 是否落在网段内;选择 no-resolve 可跳过这次解析。若更早的匹配已经触发过 DNS,则即便本行带了 no-resolve,仍可能用已有解析结果继续匹配。规划时据此取舍:希望不为这条规则额外解析、只在已有 IP 时比较,就带上;希望域名也按解析出的目标 IP 进入该网段,就不要带。
规划时还要决定这条目标网段与域名规则的相对位置。官方优先级不因规则类型自动重排,IP-CIDR 不会压过写在它前面的 DOMAIN、GEOSITE 或 RULE-SET。不要把 IP-SUFFIX 当成 IP-CIDR 的另一种写法:前者官方定义是匹配 IP 后缀范围,示例为 IP-SUFFIX,8.8.8.8/24,PROXY。更宽的目标侧条件可改用 GEOIP 或 IP-ASN。需要同时限制传输层时,使用 AND / OR / NOT,形式为 LOGIC_TYPE,((payload1),(payload2)),Proxy,并注意括号。具体网段放在更宽的国家规则和 MATCH 之前。
规划是否成立的判断依据与失败时下一步
判断依据有三条。第一,只看该行应能回答匹配的是目标 IP 还是来源 IP、CIDR 是哪一段、会不会为匹配去解析域名、策略是什么。第二,从列表顶部向下,没有更早规则会先吃掉同一请求。第三,MATCH 仍在最后。
若目标地址没有走进这条网段,下一步先检查是否误加 src 或误写成 SRC-IP-CIDR。若访问用的是域名,对照本行是否带 no-resolve,以及上方是否已有域名类规则命中。若实际是 IPv6 目标却只写了 IPv4 网段,补写对应 IP-CIDR6 或等价的 IP-CIDR。网段过宽导致其它目标被误收时,加长前缀并把该行保持在更宽规则之上。仍无法判断时,把该行临时放到域名类规则之后、MATCH 之前做顺序对照,确认后按目标用途移回。