Mihomo(Clash.Meta) 匹配路由规则的 DNS 配置

参考资料:

先贴我的的 dns 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
dns:
enable: true
listen: 0.0.0.0:7874
ipv6: false
enhanced-mode: redir-host
respect-rules: true
# 和代理规则一致, 没有匹配 nameserver-policy 规则的统一走国外 dns
nameserver:
- tls://8.8.4.4
- tls://1.1.1.1
proxy-server-nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
nameserver-policy:
# google 优先使用国外 dns 和下面的代理规则一致,可以解决 play 无法下载问题, 否则会被下面的 cn list 匹配使用国内 dns 解析到错误 ip
"geosite:google":
- tls://8.8.4.4
- tls://1.1.1.1
"geosite:private,onedrive,microsoft@cn,apple,category-games@cn,cn":
- 119.29.29.29
- 223.5.5.5.5
# 自定义直连域名使用国内 dns
"rule-set:custom-direct-domain":
- 119.29.29.29
- 223.5.5.5.5

解释一下我的场景,路由器上使用 mihomo 插件,白名单模式,未开启 ipv6,使用 geosite 规则,路由规则如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rules:
# 禁用 quic 后部分国内服务访问缓慢只能关闭
#- AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOSITE,cn))),REJECT # quic
- GEOIP,lan,DIRECT,no-resolve
- GEOSITE,private,DIRECT
# 禁用 quic 后部分国内服务访问缓慢只能关闭
#- AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOIP,CN))),REJECT # quic

# 高优先级分组, 保证 Google 所有域名走代理
- GEOSITE,google,其他

- GEOSITE,onedrive,DIRECT
- GEOSITE,microsoft@cn,DIRECT
- GEOSITE,apple,DIRECT
- GEOSITE,steam@cn,DIRECT
- GEOSITE,category-games@cn,DIRECT
- GEOSITE,cn,DIRECT

- GEOIP,CN,DIRECT,no-resolve

# 自定义, 将 ipset 和 domain list 分开有匹配性能更好
- RULE-SET,custom-direct-domain,DIRECT
- RULE-SET,custom-direct-ip,DIRECT,no-resolve

- MATCH,其他

配置思路如下:

  1. 将我认为直连能获得更佳体验的分组打上 DIRECT 规则并且使用运营商 dns 进行解析,获得国内 CDN 加成,比如 apple, ms, dji, steam 等。
  2. 未使用 fallback 配置,避免直连解析耗时较长。
  3. 使用 rule-providers 自定义直连规则降低 nameserver-policy 配置复杂度。