这个网址用来检查dns是否泄露,一旦发现下面有任何的国内ip出现就意味着dns泄露了。
很多地方给出的典型配置可能是这样的,我由于tun需要经常开关所以不能用fake-ip,清缓存太麻烦了,而且fake-ip也只能保护敏感域名
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- +.stun.*.*
- +.stun.*.*.*
- +.stun.*.*.*.*
- +.stun.*.*.*.*.*
- "*.n.n.srv.nintendo.net"
- +.stun.playstation.net
- xbox.*.*.microsoft.com
- "*.*.xboxlive.com"
- "*.msftncsi.com"
- "*.msftconnecttest.com"
- WORKGROUP
- +.* #让所有解析都返回真实ip,因为我看更新日志中打算把redir-host完全删除,所以为了保证在将来可用只能用这种方法
nameserver:
- tls://223.5.5.5
- tls://223.6.6.6
fallback:
- tls://1.1.1.1
- tls://1.0.0.1
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
- 0.0.0.0/32YAML这个配置其实并没有什么问题,但这就是造成dns泄露的根源,因为clash的请求逻辑是
- 同时向nameserver和fallback中所有dns服务器发起请求,检查nameserver返回最快的值
- 符合geoip-code指定的国家:直接使用
- 不符合geoip-code指定的国家 或 符合ipcidr中的值视为被污染:取fallback返回最快的值
这个配置这能让国内访问速度很快,并且国外访问无dns污染,但是国内dns永远能知道所有的dns请求,所以我们应该修改一下,保证nameserver和fallback中不存在国内dns。
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- +.stun.*.*
- +.stun.*.*.*
- +.stun.*.*.*.*
- +.stun.*.*.*.*.*
- "*.n.n.srv.nintendo.net"
- +.stun.playstation.net
- xbox.*.*.microsoft.com
- "*.*.xboxlive.com"
- "*.msftncsi.com"
- "*.msftconnecttest.com"
- WORKGROUP
- +.*
nameserver:
- tls://1.1.1.1
- tls://1.0.0.1
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-queryYAML这时候肯定就会有一个问题,国内网站解析太慢,以及解析的地区不对访问太慢怎么办,为了dns不泄露,那只能辛苦一点,把平时常访问的国内域名单独加上
dns:
enable: true
ipv6: true
listen: :53
use-hosts: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- +.stun.*.*
- +.stun.*.*.*
- +.stun.*.*.*.*
- +.stun.*.*.*.*.*
- "*.n.n.srv.nintendo.net"
- +.stun.playstation.net
- xbox.*.*.microsoft.com
- "*.*.xboxlive.com"
- "*.msftncsi.com"
- "*.msftconnecttest.com"
- WORKGROUP
- +.*
default-nameserver:
- tls://223.5.5.5
- tls://223.6.6.6
nameserver:
- tls://1.1.1.1
- tls://1.0.0.1
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
nameserver-policy:
+.163yun.com: tls://223.5.5.5
+.163.com: tls://223.5.5.5
+.netease.com: tls://223.5.5.5
+.163jiasu.com: tls://223.5.5.5
+.miyoushe.com: tls://223.5.5.5
+.bilibili.*: tls://223.5.5.5
+.tencent.com: tls://223.5.5.5
+.qq.*: tls://223.5.5.5
+.baidu.*: tls://223.5.5.5
+.taobao.com: tls://223.5.5.5
+.apiintl.biliapi.net: tls://223.5.5.5
+.upos-hz-mirrorakam.akamaized.net: tls://223.5.5.5
+.acg.tv: tls://223.5.5.5
+.acgvideo.com: tls://223.5.5.5
+.b23.tv: tls://223.5.5.5
+.biliapi.*: tls://223.5.5.5
+.biligame.*: tls://223.5.5.5
+.bilivideo.*: tls://223.5.5.5
+.hdslb.com: tls://223.5.5.5
+.im9.com: tls://223.5.5.5
+.smtcdns.net: tls://223.5.5.5
+.360buy.*: tls://223.5.5.5
+.alicdn.*: tls://223.5.5.5
+.alimama.*: tls://223.5.5.5
+.alipay.*: tls://223.5.5.5
+.appzapp.*: tls://223.5.5.5
+.baidupcs.*: tls://223.5.5.5
+.ccgslb.*: tls://223.5.5.5
+.duobao.*: tls://223.5.5.5
+.jdpay.*: tls://223.5.5.5
+.moke.*: tls://223.5.5.5
+.qhimg.*: tls://223.5.5.5
+.vpimg.*: tls://223.5.5.5
+.xiami.*: tls://223.5.5.5
+.xiaomi.*: tls://223.5.5.5
+.cn: tls://223.5.5.5YAML至于自己平时还访问什么国内网站自己加就是了,我这是找了一些规则列表里的国内域名来写的。还有一些别的用途,比如公司内部的dns解析,公网dns解析不出来,可以单独设置公司的域名对应公司内部的网关/dns,这样就不用去设置host。
然而当你打开测试网站的时候会发现,为什么还是泄露了,因为你可能正在用windows,如果是安卓应该就没问题了,安卓会自带全局接管+代理,windows只开代理不能接管全部流量,需要开启tun。
然而可能还是泄露了,因为windows会向所有网卡的dns发起请求,如果不开代理就会由系统发起解析请求,这种情况下没有fake-ip就必须要请求到一个ip应用程序才会开始发起连接,这样dns就会有请求。
所以得tun和代理同时打开,这样能走代理的系统就不会自己解析,直接把域名交给代理来处理,而需要代理的遇到规则会直接不解析。
那就是不想同时打开呢,甚至都不想开呢,就把电脑本身的网卡dns设置为127.0.0.1,这么做的话clash必须开着(不需要tun或代理),并且配置中有listen: :53这行,缺点是clash必须开着,关掉就要把dns改成别的,这也算是好处,只要clash开着就行,不需要将流量路由到clash就能用clash的内置dns。
至于为啥不用fallback-filter.domain写国外域名,因为国内域名少好写,常用的服务就那几家公司那点域名,而且如果不是因为我不喜欢fake-ip其实遇到规则tun也不会解析。
如果想要绝对安全的方法,那就在防火墙里把53端口出站全禁了(本地别禁),或者在网关处设置规则,不过这样会连有些软件本身自带dns的请求也全部拦下来,有点副作用,但是肯定很安全。
亲测,可防止DNS泄漏(❤ ω ❤)