有些人上网,是直接点开网页;而我上网,是从调整DNS开始的。
为什么?因为我自己的网站被强制解析到了0.0.0.0。
作为一个普通用户,却因为网络问题折腾出了一肚子火,今天就来聊聊这段痛苦经历,顺便吐槽一下 DNS 那点破事。
第一步:自建 AdGuard Home
起初,我只是想解决日常浏览中的劫持问题,我也没有广告屏蔽的需求哈哈哈,于是决定自己动手丰衣足食,专门开了台阿里云服务器,部署了 AdGuard Home。搭建过程其实不复杂,按照官方文档跑一遍,基本上就能启动一个能屏蔽广告的 DNS 服务器。
但是,AdguardHome,虽然可以避免大部分劫持,但是没有解决根本问题。
并且由于我设备在重庆,而服务器在成都,导致我使用某些视频网站,cdn会在成都。所以,反而减速了我的观看体验。
于是我后来写了解析规则,视频网站cdn交给我本地运营商处理,但是规则太大,太多,我的路由器又太小,卡死不动,又让我放弃了。
第二步:怒测😡2K个DNS,终于找到了“好一点的将就”
为了找到一个“干净”又快速的 DNS,我亲自上阵,用工具测了 2000 多个公开 DNS 服务器(是的,两个小时盯着测速结果,感觉自己快成测试员了)。
测试完的结果让我几乎崩溃:
- 国内的 DNS:要么解析被劫持,要么返回假的 0.0.0.0,要么就是网友自建的无污染dns解析速度慢到让人绝望。这里表扬下
https://doh.apad.pro/dns-query
,适合做分流DNS使用,但是不适合做主DNS。 - 国外的 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,开始了第二轮优化。
- 国内 DNS 优化:通过 SmartDNS,筛选了一些解析速度快的国内 DNS(比如阿里 DNS、Dnspod DNS),勉强解决了延迟问题,但污染问题依旧。
- 国外 DNS 分流:为了避免运营商劫持,我甚至为国外解析请求专门配置了代理。
最终解决方案:分流
在这场折腾之后,我终于找到了一套勉强能用的方案:
- 本地用 SmartDNS 分流,国内解析用运营商 DNS,但对国外网站加某些网站走分流,避免劫持。
- 国外解析走梯子,配合 Cloudflare 的 1.1.1.1 和 Google 的 8.8.8.8,确保结果干净。
- AdGuard Home 弃用。
虽然这套方案解决了一些问题,但仍然不是完美的。很多时候,我还是会想问:
“想上个网,咋就这么难?”
传统 DNS 的痛点
传统 DNS 基于 UDP 的 53 端口,这种明文协议非常容易被监控和劫持:
-
DNS 劫持:
- 运营商对未加密的 DNS 请求进行中间人攻击,伪造响应,返回广告 IP 或假地址。
- 比如访问不存在的域名,返回的不是 NXDOMAIN,而是XXX的推广页面。(虽然近几年没看到了,但是根据网上的贴子,不排除有这种情况,所以我一并写下来。)
-
解析污染:
- 访问境外域名时,返回错误的 IP 地址,或者直接封禁访问。(已过时)
- 现在别人都不在DNS动手脚了,详情请看我其他文章。
-
封锁 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 的使用。
“骚操作”
-
DoH 服务封锁:
- 部分 DoH 服务器,在国内直接被墙。
-
QUIC 流量干扰:
- 国内对 UDP 流量的检测和限制使得 QUIC DNS 和 H3-Only 面临一定阻碍。
-
DPI 技术升级:
- 深度包检测(DPI)技术可以识别 DoH 和 QUIC 的流量特征,并进行精准封锁。
-
运营商 DNS 劫持和污染:
- 未加密的 DNS 请求仍然是运营商的“重灾区”,用户无法轻松绕过。
希望我的折腾经验能给同样在网络问题中挣扎的朋友一点启发,也希望运营商和 DNS 服务商能少一点套路,多一点真诚。毕竟,上网本该是一件简单又快乐的事啊!