关于防止dns查询泄露,dns加密,防止dns劫持(科学 冲浪)
背景
局域网坏境,如果只对传输的数据流量进行加密,虽然攻击者或者说管理者无法获取你的信息内容,但是还是能够通过你发出的dns请求,来判断你访问的域名,因为每次你访问前都需要做一个dns的查询,但是代理工具一般不经过设置只会代理tcp或者udp的流量,那么可以看到在代理dns查询之前,哪怕你的数据是https的加密,但是域名的dns解析还是明文的,如下图所示,所以如何让dns解析过程变成加密,就是今天要讨论的内容。

办法
我们只需要给yaml配置文件加上dns的伪装就可以,参考地址 https://www.xkww3n.cyou/2022/02/08/use-clash-dns-anti-dns-hijacking/
防止链接丢失,我也记录一下
给配置文件插入以下段配置
开启本地dns服务
dns:
enable: true
listen: 0.0.0.0:53
继续在后面添加,使用低延迟的国内优质dns,客户端会加密dns请求到以下目的dns服务器
default-nameserver:
- 119.29.29.29
- 223.5.5.5
接下来,指定解析国内域名时使用的加密 DNS 服务器地址:
#--omitted--
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
支持 DoH(https://domain.tld/dns-query 形式) 和 DoT(tls://domain.tld 形式)两种加密 DNS 协议,不支持 DoQ.(当然也支持在此指定备用的明文 DNS)
然后,指定解析国外域名时使用的加密 DNS 服务器地址,并设置分流规则:
#--omitted--
fallback:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
“fallback” 字段指定的 DNS 服务器将被用于解析非国外域名,而 “fallback-filter” 字段则实现我们想要的分流规则——当请求解析的域名在 GeoIP 数据库内的国家代码不是 CN 时,或是域名在前文设置的 DNS 服务器内的解析结果位于 240.0.0.0/4 这一 IP 段内时(被屏蔽的域名解析常常会被污染到这一段),使用 “fallback” 字段指定的 DNS 服务器解析域名。
最重要的一步
最后,修改系统 DNS 服务器为 127.0.0.1 即可。

验证
再看以下dns抓包,看不到我的任何目标网站除了代理站点

完整配置
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
default-nameserver:
- 119.29.29.29
- 223.6.6.6
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
- 'localhost.ptlogin2.qq.com'
- 'dns.msftncsi.com'
- 'www.msftncsi.com'
- 'www.msftconnecttest.com'

浙公网安备 33010602011771号