
参考资料:
先贴我的的 dns 配置
dns: enable: true listen: 0.0.0.0:7874 ipv6: false enhanced-mode: redir-host respect-rules: true # 附加参数 #RULES 为遵守路由规则进行连接,等同于 respect-rules nameserver: # 指定使用 dns 路由规则进行连接 # nameserver-policy 未匹配的域名将使用以下 dns 解析 - tls://8.8.8.8#dns - tls://1.1.1.1#dns proxy-server-nameserver: - https://120.53.53.53/dns-query - https://223.5.5.5/dns-query nameserver-policy: # 白名单分组使用运营商 dns 解析 "geosite:private,onedrive,microsoft@cn,apple,apple-cn,category-games@cn,cn": - 运营商 dns # 自定义白名单分组同样使用 运营商 dns 解析 "rule-set:custom-direct": - 运营商 dns 解释一下我的场景,路由器上使用 mihomo 插件,白名单模式,未开启 ipv6 ,使用 geosite 规则,路由规则如下:
rules: - GEOIP,lan,DIRECT,no-resolve - GEOSITE,private,DIRECT # 高优先级标注需要代理的规则防止被后面的直连规则影响 - GEOSITE,google,其他 - GEOSITE,google-cn,其他 - RULE-SET,openai,OpenAI # 以下为直连 - GEOSITE,onedrive,DIRECT - GEOSITE,microsoft@cn,DIRECT - GEOSITE,apple,DIRECT - GEOSITE,apple-cn,DIRECT - GEOSITE,steam@cn,DIRECT - GEOSITE,category-games@cn,DIRECT - GEOSITE,cn,DIRECT - GEOIP,CN,DIRECT - RULE-SET,custom-direct,DIRECT # 剩余全代理 - MATCH,其他 配置思路如下:
根据网友对 no-resolve 的解释和我最近的实践,dns 和 rules 部分更新如下:
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 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,其他 |      1vvhy      2024-09-22 01:52:46 +08:00 geoip 没加 no-resolve 可以用 wireshark 抓包确认一下 | 
|  |      2tunetoystory OP @vvhy 查了下确实很多人都像你说的这样配置,但是不理解为什么已经匹配到 ip 规则,说明已经解析过了,还需要指定不解析呢 | 
|      3Rebron1900      2024-09-22 11:44:28 +08:00 大佬,openclash 的 meta 内核能用吗? | 
|  |      4tunetoystory OP @Rebron1900 能用,但是注意根据自己的实际情况调整 | 
|      5vvhy      2024-09-22 13:00:45 +08:00 via Android @Rabbit52 比如浏览器发出一个域名的请求,如果不加 no-resolve ,clash 就会先把域名解析成 ip ,再判断 ip 规则是否满足 | 
|  |      6tunetoystory OP @vvhy 文档的意思好像 no-resolve 的参数只适用于 ip 集,不是域名,我就没搞懂了 https://wiki.metacubex.one/config/rules/#no-resolve | 
|  |      8tunetoystory OP @JohnSmith 我的意思是 ip 集的规则它为什么需要 no-resolve 参数呢,本来就有 ip 了呀 | 
|      9remidre      2024-09-27 08:39:05 +08:00  1 @Rabbit52 解析是从上至下的,假如有个域名[www.google.com]要走你的规则,一上来碰到的是 ip 集,clash 会先把域名解析成 ip 去匹配你的 ip 集,如果命中了就走你的 ip 规则,没命中就走后面的域名规则,但它已经被解析成 ip 了,后续就不会走你的域名规则了。所以一般 ip 类规则的放后面,或者加 no-resolve ,强制不解析 | 
|  |      10tunetoystory OP @remidre 感谢 解释的很清楚,那看来 match 前加 no-resolve 的可能会代理上一些没在列表内的 cn ip ,不过这本来就是预期内的。 | 
|  |      111014982466      2024-09-29 12:28:54 +08:00 问一下大佬, listen: 0.0.0.0:7874 后面端口号是随便写?要不要写 DNS 的 53 端口?我看有的教程随便写,有的写 53 ,有的写 5353 | 
|  |      12tunetoystory OP @1014982466 随便写,只要不被占用就行,如果在路由器上运行 53 肯定已经被占用了,如果是提供 dns 服务可以用 53 | 
|  |      13wcnmm      2024-10-14 01:15:40 +08:00 via Android 有一点要指出,你用了 redir-host ,no-reslove 就没用了。no-reslove 是给 fake-ip 用的 | 
|  |      14tunetoystory OP @wcnmm 这个倒是没有查到文档诶,方便指一下路吗? | 
|  |      15wcnmm      2024-10-15 05:29:13 +08:00 @Rabbit52 官方文档以前有关于 redir-host 和 fake-ip 的解析流程。去年起好像就找不到了 https://wiki.metacubex.one/config/dns/diagram/ 而这个并不是讲 redirr-hsot / fake-ip 特性的 以下是回忆内容,会部分细节不准的地方,大致流程我确定是对的: redir-host 就是本地请求 ip ,返回的结果仅用于规则判断,再发起代理(同时发送域名给节点) fake-ip 就是返回假 ip 先用于规则判断,再连接。(直接就是本地请求,代理就是发送域名远程解析) 比较之下,就是 redir-host 一定会进行一次本地解析。你也可以直接打开面板看看 inner 类型,代表核心主动发出的请求,在代理环境且规则配置无误的情况下( fake-ip 给 ip 规则添加了 no-resolve 或者 ip 规则排靠后) fake-ip 是不会发起 dns 请求的,而 redir-host 就会有长连接 | 
|  |      16zhf883680      362 天前 respect-rules: true  开启了这个 还需要配置 nameserver-policy 吗 respect-rules 都规定 dns 连接遵守路由规则了 正好在疑问这个东西 | 
|  |      17tunetoystory OP @zhf883680 按照我对文档的理解这个选项和 tls://8.8.8.8#dns 后面这个 #dns 是一样的效果, 意思是连接 dns 服务时遵循代理规则, 也就是说 8.8.8.8 如果在代理规则里面代理, 那么 dns 查询就要代理, 或者指定 #dns 走 dns 分组规则. 和 nameserver-policy 应该没关系 | 
|  |      18Awes0me      351 天前 套用了你的模板挺多这种 warning 的,不知道怎么回事  [TCP] dial DIRECT (match GeoSite/cn) 127.0.0.1:50427 --> qny.smzdm.com:443 error: connect failed: dial tcp 154.85.73.15:443: i/o timeout dial tcp 154.85.73.17:443: i/o timeout dial tcp 154.85.73.16:443: i/o timeout | 
|  |      19tunetoystory OP @Awes0me 我也有很多这样的日志,不知道为何,但是用起来也没有什么问题 | 
|  |      21Awes0me      351 天前  1 @Rabbit52 改用 https://hk.v2ex.com/t/1015534 这个 L20 的,挺好 | 
|  |      22tunetoystory OP @Awes0me 你看内容, 其实差不多的 |