DNS 查询
当你浏览器输入域名访问网站,背后是dns系统在服务。这里简单说下dns查询。www.example.com.是完全限定域名(FQDN),
DNS系统可分为三部分
- 一个代理服务器(stub resolver)
- 一个递归解析服务器(recursive resolver)
- 多个权威服务器(authoritative name server)
- 浏览器访问
www.example.com发送到专门处理dns的地方(代理服务器)。代理服务器问解析服务器www.example.com的A记录,ipv4地址 - 递归解析服务器(运营商及第三方dns或者自建dns如adguardhome、smartdns)将查询原样发给根域名的服务器
- 根域名服务器只保存顶级域(TLD)信息(例如 com. 或 net.),不知道www.example.com的信息,返回com.域名的NS记录
- 递归服务器根据返回的NS记录,将查询请求转发给com.的域名服务器
- com.域名服务器同样只有example.com的NS服务器,所以返回NS记录
- 递归服务器把查询请求转发给example.com.的域名服务器
- example.com.的域名服务器保存了www.example.com.信息,所以返回对应 A 记录
- 递归解析服务器将信息传回给代理服务器,再响应浏览器。浏览器访问对应ip,看到对应网页
DNS查询可分为递归查询、迭代查询、非递归查询。大概讲就是DNS 服务器通常会缓存 DNS 记录,此时是非递归查询。将A记录看成钥匙,权威服务器看做房间。想象一下,李华在家丢了钥匙,正在寻找它们。递归是让李华一直寻找他的钥匙,直到找到它们为止。李华开始寻找,如果找不到他的钥匙,他将返回原来的指示继续寻找直到找到它们。迭代是让李华搜索一个房间五分钟,然后返回他的指令并搜索下一个房间五分钟,然后继续此循环,直到他找到自己的钥匙或遍历整个房间列表为止。
DNS 污染
dns污染是返回错误的记录。上面通过递归解析器解析dns,这时运营商dns根据黑名单返回错误ip。比如主站几天前无法访问,在线ping返回推、脸书等ip,已知正确ip有两个。
解决方法修改host跳过dns解析或者使用DoH/DoT协议。
使用CF自建 DOH 服务器直连 linux
推荐https://ping.pe/ 一些网站工具。部分网站修改host还是无法访问,可使用chrome、firefox等浏览器的dns功能。
DNS缓存将数据临时存储在某个位置,提高数据请求的性能和可靠性,有生存时间(TTL)。Chrome 浏览器可访问 chrome://net-internals/#dns 查看 DNS 缓存,可切换不同dns服务商查看对应ip。存在问题国外doh(DNS over HTTPS )无法直连,国内doh被污染返回错误ip,如图已使用阿里doh。
https网站sni明文,能知道你访问的域名,所以也有sni阻断。解决方法是ech,全称为 Encrypted Client Hello进行加密。 Firefox自119版本起,Chrome自117版本起已默认启用ECH,旧版chrome访问chrome://flags/#encrypted-client-hello 开启。
L站支持ECH,常用浏览器是新版的话,目前就只缺少直连DOH。
题外话 sm2.doh.pub 、dns.alidns.com 和 doh.360.cn 在非中国大陆环境 请求DoH时,会下发干净DNS解析服务,即正确ip。
- 自建 DOH
使用项目GitHub - cmliu/CF-Workers-DoH: CF-Workers-DoH 是一个基于 Cloudflare Workers 构建的 DNS over HTTPS (DoH) 解析服务。
Workers部署 复制 _worker.js 代码,保存并部署。
Pages 部署。
fork到自己账号,名字随便起。
登陆cloudflare,选择Workers & Pages,右上角创建应用。
选择对应仓库,点击begin setup.到下一步。
可以设置环境变量。默认直接点Deploy
TOKEN 设置请求DoH服务路径(默认:/dns-query)
URL 主页伪装(设为nginx则伪装为nginx,可填https://www.baidu.com/ )
DOH 设置上游DoH服务,可看介绍切换。
部署成功后会出现xx.pages.dev。 Custom domains绑定自己域名。自建doh地址为https://xx.pages.dev/dns-query。如果设置了token替换dns-query为相应值。page每天100,000请求,自己应该够用。
- 设置浏览器
Chrome
地址输入chrome://settings/security或者设置搜索DNS点击安全
Firefox
打开 Firefox 浏览器,点击右上角的「≡」按钮,选择「设置」>「隐私与安全」;或者直接在「地址栏」中输入about:preferences#privacy
基于 HTTPS 的 DNS选择增强保护,自定义填入自建doh
- 增强保护:(推荐选项)启用 DoH,安全 DNS 连不上时,就使用系统本地 DNS。
- 最大保护:启用 DoH,安全 DNS 不可用时,某些网站可能会无法加载。
其他浏览器搜索DNS设置,旧版自行开启ech。
逛了下L站win快捷方式里可添加参数–enable-features=EncryptedClientHello。
测试ECH是否成功
点击检查我的浏览器,显示安全 SNI打钩。
https://tls-ech.dev/ 显示You are using ECH.
CF网站的 /cdn-cgi/trace,如 https://idcflare.com/cdn-cgi/trace 显示 sni=encrypted
这时再用 chrome://net-internals/#dns 测试结果
![]()










glzjin's blog
文章评论