关于防止dns查询泄露,dns加密,防止dns劫持(科学 冲浪)

背景

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

办法

我们只需要给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 即可。
image

验证

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

完整配置

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'
posted @ 2025-04-03 17:00  学不会xuebuhui  阅读(781)  评论(0)    收藏  举报
Language: javascript //图片预览