想上个网,咋就这么难?——DNS折腾血泪史

有些人上网,是直接点开网页;而我上网,是从调整DNS开始的。
为什么?因为我自己的网站被强制解析到了0.0.0.0。
作为一个普通用户,却因为网络问题折腾出了一肚子火,今天就来聊聊这段痛苦经历,顺便吐槽一下 DNS 那点破事。


第一步:自建 AdGuard Home

起初,我只是想解决日常浏览中的劫持问题,我也没有广告屏蔽的需求哈哈哈,于是决定自己动手丰衣足食,专门开了台阿里云服务器,部署了 AdGuard Home。搭建过程其实不复杂,按照官方文档跑一遍,基本上就能启动一个能屏蔽广告的 DNS 服务器。

但是,AdguardHome,虽然可以避免大部分劫持,但是没有解决根本问题。

并且由于我设备在重庆,而服务器在成都,导致我使用某些视频网站,cdn会在成都。所以,反而减速了我的观看体验。

于是我后来写了解析规则,视频网站cdn交给我本地运营商处理,但是规则太大,太多,我的路由器又太小,卡死不动,又让我放弃了。


第二步:怒测😡2K个DNS,终于找到了“好一点的将就”

为了找到一个“干净”又快速的 DNS,我亲自上阵,用工具测了 2000 多个公开 DNS 服务器(是的,两个小时盯着测速结果,感觉自己快成测试员了)。
测试完的结果让我几乎崩溃:

  1. 国内的 DNS:要么解析被劫持,要么返回假的 0.0.0.0,要么就是网友自建的无污染dns解析速度慢到让人绝望。这里表扬下https://doh.apad.pro/dns-query,适合做分流DNS使用,但是不适合做主DNS。
  2. 国外的 DNS:本以为能找到一片净土,结果不是被污染,就是延迟高,动不动 300ms 往上走。

尤其是一些公共 DNS,比如 Google 的 8.8.8.8,感觉像是被国内某个神秘的东西“掐住了脖子”,根本无法稳定使用。而阿里 DNS 虽然解析准确,但解析的CDN也不是最近的,Alidns解析出来的50ms,Dnspod却是10ms,简直让人抓狂!


第三步:本地刷 OpenWrt,路由器“开挂”

既然服务器的 DNS 环境不理想,我干脆决定从路由器入手,把家里的小米路由器刷成了 OpenWrt 系统。刷机过程虽然不算复杂,但也有点折腾:

  • 下载固件,准备 TFTP 工具,刷完还要手动调试网络配置。
  • 成功启动 OpenWrt 后,才发现路由器配置太低,运行 AdguardHome 卡得要死,于是不得不换成 SmartDNS。
  • 特别是规则多的时候,所以路由器这边就别想了。

终于,刷机完成并配置好 DNS,但问题并没有完全解决,国内解析污染和国外延迟依旧存在。


第四步:搭建 SmartDNS,本地分流解析

SmartDNS 是个好东西,它支持 DNS 请求分流,可以根据解析速度和区域选择最佳的服务器。于是,我在 OpenWrt 上装了 SmartDNS,开始了第二轮优化。

  1. 国内 DNS 优化:通过 SmartDNS,筛选了一些解析速度快的国内 DNS(比如阿里 DNS、Dnspod DNS),勉强解决了延迟问题,但污染问题依旧。
  2. 国外 DNS 分流:为了避免运营商劫持,我甚至为国外解析请求专门配置了代理。

最终解决方案:分流

在这场折腾之后,我终于找到了一套勉强能用的方案:

  1. 本地用 SmartDNS 分流,国内解析用运营商 DNS,但对国外网站加某些网站走分流,避免劫持。
  2. 国外解析走梯子,配合 Cloudflare 的 1.1.1.1 和 Google 的 8.8.8.8,确保结果干净。
  3. AdGuard Home 弃用。

虽然这套方案解决了一些问题,但仍然不是完美的。很多时候,我还是会想问:
“想上个网,咋就这么难?”


传统 DNS 的痛点

传统 DNS 基于 UDP 的 53 端口,这种明文协议非常容易被监控和劫持:

  1. DNS 劫持

    • 运营商对未加密的 DNS 请求进行中间人攻击,伪造响应,返回广告 IP 或假地址。
    • 比如访问不存在的域名,返回的不是 NXDOMAIN,而是XXX的推广页面。(虽然近几年没看到了,但是根据网上的贴子,不排除有这种情况,所以我一并写下来。)
  2. 解析污染

    • 访问境外域名时,返回错误的 IP 地址,或者直接封禁访问。(已过时)
    • 现在别人都不在DNS动手脚了,详情请看我其他文章。
  3. 封锁 DNS 服务

    • 国内对部分国外公共 DNS 服务,进行限速或封锁。

面对这些问题,传统的未加密 DNS 已经不堪一击,取而代之的是更安全的加密 DNS 协议。


DoH(DNS over HTTPS):DNS 的加密进化

DoH 的原理

DoH 使用 HTTPS 协议将 DNS 请求封装到加密的 HTTP/2 或 HTTP/3 中,从而防止运营商劫持和篡改请求。它的特点包括:

  • 加密传输:DNS 请求和响应通过 HTTPS 进行加密,防止中间人攻击。
  • 与常规流量混合:DoH 请求伪装成普通 HTTPS 流量,难以区分和封锁。

DoH 的优点

  • 抗劫持和污染:由于请求已加密,运营商无法直接篡改。
  • 隐私保护:加密内容不会被第三方窥探。
  • 易部署:多数现代浏览器(如 Chrome 和 Firefox)都支持内置的 DoH。

DoH 的缺点

  • 容易被封锁
    国内会通过深度包检测(DPI)识别并阻断到境外的 DoH 流量,最常见的就是Error404。 (福建地区常见)
  • 解析延迟
    DoH 依赖 HTTPS 的握手过程,相比传统的 DNS 要增加一定的延迟。

QUIC DNS:更快的加密 DNS

QUIC 的优势

QUIC 是 Google 开发的一种新型传输协议,基于 UDP,优化了连接建立和传输效率。QUIC DNS(DNS over QUIC, DoQ)则将 DNS 流量封装在 QUIC 中,具有以下特点:

  • 低延迟
    QUIC 不需要多次握手,仅一次往返即可建立连接,相比 DoH 更适合高频 DNS 请求。
  • 更抗封锁
    QUIC 的流量特征与普通 UDP 类似,国内运营商在检测和封锁时难度更大。
  • 抗丢包能力强
    QUIC 在弱网环境下性能稳定,DNS 解析成功率高。

国内的挑战

  • 流量特征识别
    随着 DPI 技术的升级,运营商可能会通过流量模式识别 QUIC 流量并封锁。

H3-Only DNS:基于 HTTP/3 的前沿技术

H3-Only 的特点

H3-Only 是完全基于 HTTP/3 的 DNS 解析协议,使用 QUIC 作为底层传输层,结合了 HTTP/3 和 QUIC 的优点:

  • 高速解析
    依赖 QUIC 的低延迟特性,H3-Only 在频繁的 DNS 查询中表现优异。
  • 强隐私保护
    HTTP/3 默认加密所有内容,难以被劫持或篡改。
  • 未来趋势
    随着 HTTP/3 的普及,H3-Only DNS 有望成为主流加密 DNS 技术。

还需解决的难题

  • H3-Only 使用 QUIC 传输,虽然抗封锁能力强,但仍可能受到 DPI 和流量分析的影响。
  • 国内运营商可能通过强制阻断 QUIC 流量,间接限制 H3-Only 的使用。

“骚操作”

  1. DoH 服务封锁

    • 部分 DoH 服务器,在国内直接被墙。
  2. QUIC 流量干扰

    • 国内对 UDP 流量的检测和限制使得 QUIC DNS 和 H3-Only 面临一定阻碍。
  3. DPI 技术升级

    • 深度包检测(DPI)技术可以识别 DoH 和 QUIC 的流量特征,并进行精准封锁。
  4. 运营商 DNS 劫持和污染

    • 未加密的 DNS 请求仍然是运营商的“重灾区”,用户无法轻松绕过。

希望我的折腾经验能给同样在网络问题中挣扎的朋友一点启发,也希望运营商和 DNS 服务商能少一点套路,多一点真诚。毕竟,上网本该是一件简单又快乐的事啊!

版权声明:本文由mxd's Blog发布,如需转载请注明出处。
如果文章中有风险行为,文章作者不负任何责任。
除非另有说明,否则本站内容依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接。

本文链接:https://blog.mxdyeah.top/mxdyeah_blog_post/dns_study.html
本文标题:想上个网,咋就这么难?——DNS折腾血泪史
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇