DNS over HTTPS (DoH) 与传统 DNS 的核心区别在于传输层的加密机制。传统 DNS 基于 UDP 53 端口明文传输,易受窃听和劫持;DoH 将查询封装在 HTTPS 协议中,通过 443 端口加密传输,有效防止中间人攻击,但需权衡内网解析兼容性。
先说结论:DoH 通过加密解决了传统 DNS 的隐私泄露和劫持风险,但部署时需确认本地网络环境是否支持。
- 适合:公共 Wi-Fi、对隐私敏感、需要绕过运营商 DNS 劫持的场景
- 重点看:加密协议(HTTPS)与端口(443)的区别,注意与 DoT(853) 区分
- 别忽略:开启后可能导致局域网域名无法解析或企业网络策略冲突
核心安全机制对比
传统 DNS 协议设计较早,查询和响应默认通过 UDP 53 端口明文传输。这意味着网络路径上的任何节点(如运营商网关、公共 Wi-Fi 路由器)都能看到你查询了哪些域名,甚至返回错误的 IP 地址进行劫持。
DoH 将 DNS 查询封装在 HTTPS 请求中,通过 443 端口加密传输。第三方只能看到你连接了某个 DoH 服务器,但无法得知具体查询的域名内容,也无法篡改返回结果。这种机制从根本上阻断了 DNS 劫持和监听。
潜在风险点:虽然 payload 加密,但传统 TLS 握手时的 SNI(服务器名称指示)可能暴露目标域名,除非使用 ESNI(加密 SNI)。
流量抓包验证
通过抓包工具可以直观验证传统 DNS 与 DoH 的流量差异。以下是使用 tcpdump 进行对比的方法:
1. 捕获传统 DNS 流量
sudo tcpdump -i any -n port 53执行后访问任意网站,终端会直接显示查询的域名明文,例如:query: A example.com。
2. 捕获 DoH 流量
sudo tcpdump -i any -n port 443开启 DoH 后访问相同网站,只能看到加密的 TLS 握手流量和目标 IP,无法直接看到 DNS 查询内容。Wireshark 中也无法像 UDP 53 那样直接过滤 dns 字段看到明文域名。
DoH 与 DoT 的关键区别
配置时需注意 DoH 与 DoT(DNS over TLS)的区别,两者均加密但实现不同:
- DoH (DNS over HTTPS):使用 HTTPS 协议,端口 443。流量与普通 Web 流量混合,更难被防火墙单独阻断,浏览器支持度高。
- DoT (DNS over TLS):使用 TLS 协议,端口 853。流量特征明显,容易被网络设备识别和管控,常用于系统级配置。
本文主要讨论 DoH,配置时请勿混淆端口。
启用配置与兼容性
普通用户无需搭建服务器,直接在浏览器或操作系统设置中启用即可。以下是主流浏览器的开启路径:
Firefox: 设置 -> 隐私与安全 -> 底部 DNS over HTTPS
Chrome: 设置 -> 隐私和安全 -> 安全 -> 使用安全 DNS
Edge: 设置 -> 隐私、搜索和服务 -> 安全 -> 使用安全 DNS若需系统级生效,Windows 10/11 可在网络设置中配置 DNS 地址,但原生 DoH 支持依赖具体版本和运营商配合,浏览器级设置更为通用。
常见风险与排查
- 内网解析失效:开启 DoH 后,本地局域网域名(如 company.local)可能无法解析,因为请求被发往了公共 DoH 服务器。建议配置分流规则或在内网禁用 DoH。
- 企业网络冲突:部分公司网络策略禁止外部 DNS 解析,开启后可能导致无法上网。遇到无法访问内部系统时,尝试关闭 DoH 排查。
- 性能波动:加密握手需要额外开销,虽然主流测试显示延迟增加不明显,但在网络状况较差时可能感知到解析变慢。