·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

一个Clash的DNS泄露的bug

214 8
发表于 2024-6-8 15:52:58 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
理论上,在fakeip模式下,只要配置合理(在匹配到对应规则之前,前面的规则不会导致产生DNS解析请求),只有直连的请求才会在本地解析DNS,所有通过服务器的以及被拦截的请求不会在本地产生DNS解析请求记录。
clash在处理UDP请求时,会尝试寻找已经存在的socket进行复用,这个时候会对所有域名在本地查DNS缓存,缓存里没有的会进行DNS解析,导致了DNS泄露。
Chrome等浏览器,默认会尝试使用QUIC。第一次请求的时候本地的缓存里是查不到这个记录的,所以会在本地发起DNS解析的请求,导致浏览器查看的网址DNS泄露。


具体导致泄露的代码在tunnel.go里的handleUDPConn函数里的"local resolve UDP dns"部分,具体代码如下(已clash开源版代码为准):
  1. ```golang        // local resolve UDP dns        if !metadata.Resolved() {                ips, err := resolver.LookupIP(context.Background(), metadata.Host)                if err != nil {                        packet.Drop()                        return                } else if len(ips) == 0 {                        packet.Drop()                        return                }                metadata.DstIP = ips[0]        }```
复制代码
这段代码在最开始的地方,在分流代码之前,所以会对所有请求进行DNS解析(包括通过服务器连接的、被拦截的)。

检查了一下Clash.Meta的代码,相同的代码也存在,所以Clash.Meta也有相同的问题。根据作者的提交记录(见下面),代码是从premium版本同步过来的,所以盲猜premium版本也有此问题。
  1. ```git logcommit 3946d771e52fb72dfc91543dda8c785597622a9bAuthor: Dreamacro <[email protected]>Date:   Sat Aug 13 13:07:35 2022 +0800    Feature: sync missing resolver logic from premium, but still net.IP on opensourcediff --git a/tunnel/tunnel.go b/tunnel/tunnel.go--- a/tunnel/tunnel.go+++ b/tunnel/tunnel.go@@ -183,1 +183,1 @@-               ip, err := resolver.ResolveIP(metadata.Host)+               ips, err := resolver.LookupIP(context.Background(), metadata.Host)```
复制代码

解决方法(二选一):
第一种:在resolver种增加一个只查本地DNS缓存,不进行网络请求的查询函数来替换这里的resolver.LookupIP。由于clash已经删库了,所以只能自己进行。
第二种:没有能力自己改代码的mjj,可以在DNS的fallback-filter里指定敏感的网址只走国外的特定服务器(必须是加密的,不然也没用),这样就算本地多一次无用DNS查询,也不会导致DNS泄露给国内的DNS服务器。
第二种方法的缺点就是依然会多一次DNS请求,并且要持续维护这个列表。
我要说一句 收起回复
创宇盾启航版免费网站防御网站加速服务

评论8

婷姐Lv.8 发表于 2024-6-8 15:53:41 | 查看全部
感谢分享。

但六扇门要是根据DNS泄露来请喝茶,那他们整天啥事都不用做了,14亿人得有一半得去一趟。。。

BTW,真在意的话,直接把浏览器里的quic关掉更简单:chrome://flags/#enable-quic
我要说一句 收起回复
独家记忆Lv.8 发表于 2024-6-8 15:54:05 | 查看全部
好帖,这才是loc该有的样子
我要说一句 收起回复
IT618发布Lv.8 发表于 2024-6-8 15:54:12 | 查看全部
无所谓,只要油管保证十万以上,爱谁谁
我要说一句 收起回复
婷姐Lv.8 发表于 2024-6-8 15:54:39 | 查看全部
见到一千元的罚款单和保证书以后就有所谓了:lol
我要说一句 收起回复
IT618发布Lv.8 发表于 2024-6-8 15:55:30 | 查看全部
我是设置dns为adg,然后adg分流,只要国外的网站就走国外doh查询
我要说一句 收起回复
CrystαlLv.8 发表于 2024-6-8 15:55:59 | 查看全部
怎么操作?有教程吗
我要说一句 收起回复
IT618发布Lv.8 发表于 2024-6-8 15:56:21 | 查看全部
这个不错,之前没发现QUIC可以关掉{:2_28:}
我要说一句 收起回复
CrystαlLv.8 发表于 2024-6-8 15:56:51 | 查看全部
Clash的DNS泄露是指在使用Clash的情况下,部分DNS请求没有通过代理服务器进行解析,导致您的真实IP地址或DNS服务器信息可能被泄露。
解决Clash DNS泄露的一般方法如下:
* 使用加密DNS
   使用加密DNS可以防止您的DNS请求被监听和窃取。Clash支持多种加密DNS协议,例如DoH、DoT和DNSCrypt。您可以根据自己的需要选择合适的加密DNS协议和服务器。
* 使用no-resolve规则
   no-resolve规则可以阻止Clash解析特定域名的DNS请求。您可以将需要通过直连方式访问的域名添加到no-resolve规则中,以防止这些域名的DNS请求泄露。
* 使用fallback-filter规则
   fallback-filter规则可以指定Clash在无法通过代理服务器解析域名时使用的DNS服务器。您可以将您的本地DNS服务器或其他可信任的DNS服务器添加到fallback-filter规则中。
以下是一些具体的配置示例:
* 使用DoH加密DNS
rules:
  - DOMAIN-SUFFIX .example.com, .example.net DOH [email protected]

* 使用no-resolve规则
rules:
  - DOMAIN-KEYWORD google.com, FB.com no-resolve

* 使用fallback-filter规则
fallback-filter:
  geosite: !geosite
  name: local_dns
  server:
    - 192.168.1.1
    - 8.8.8.8

请注意,这些只是一些示例配置,您需要根据自己的实际情况进行调整。有关Clash DNS泄露的更多信息,请参阅Clash官方文档:https://github.com/vernesong/OpenClash/issues/1682
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.188.130.151,GMT+8, 2024-12-23 03:08 , Processed in 0.326892 second(s), 121 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表