本页目录
DNS 隐私: DoH, DoT, DoQ, ODoH
DNS 原本是明文协议——ISP 和中间网络能看到查了什么域名。DoT/DoH/DoQ 把 DNS 查询放入加密通道,ODoH 进一步通过 proxy-resolver 分离实现"谁在查"和"查什么"的隐私隔离。四种协议在隐私强度、部署模式和中间件兼容性上各有取舍。
概述
DNS 最初是明文协议(UDP port 53),ISP 和中间网络可以看到你查询了哪些域名——即使网站内容本身通过 HTTPS 加密。DoT(DNS over TLS)和 DoH(DNS over HTTPS)将 DNS 查询放入加密通道,提供机密性。DoH 因与标准 HTTPS 流量不可区分而特别受隐私关注者欢迎。DoQ(DNS over QUIC)进一步减少握手延迟。ODoH(Oblivious DoH)通过 proxy-resolver 分离实现"谁在查"和"查什么"的隐私分离。
DoT: DNS over TLS (port 853)
DNS wire format 直接在 TLS 连接上传输。独立端口 (853) 使网络管理员容易识别和 QoS 分类,但也容易被封锁。
Client → server port 853:
TLS handshake (1-RTT with ECH if enabled + encrypted SNI)
→ 连接上: 2-byte length prefix + DNS message (RFC 1035 wire format)
length: big-endian, 不包括 prefix 自己 (最大 65535)
DoH: DNS over HTTPS (port 443)
DNS 混在标准 HTTPS 流量中——与网站流量不可区分。
Client → https://dns.example.com/dns-query:
POST: Content-Type: application/dns-message
Body: DNS wire format (同 RFC 1035)
GET: ?dns=<base64url(DNS wire format)>
HTTP/2: stream multiplexing → 多查询共享一个 TCP 连接
HTTP/3: QUIC → 0-RTT for cached DNS resolver
内容协商 (可选):
Accept: application/dns-message → IDNA wire format (二进制, 默认)
Accept: application/dns-json → JSON (Google/Cloudflare 特有)
DoQ: DNS over QUIC (port 853)
DoQ 使用 QUIC 代替 TCP+TLS,解决 DoT 的握手延迟和 TCP HOL blocking:
QUIC connection (UDP 853):
Stream 0: client-initiated, bidirectional → DNS messages
Stream 4: client-initiated, unidirectional → for server to send data
Stream 8: client-initiated, unidirectional → for client to send data
每 stream: STREAM frame 含 DNS message (no length prefix needed, QUIC stream 自带边界)
ODoH (Oblivious DNS over HTTPS, RFC 9230)
问题: DoH 仍然暴露"谁在查什么"。resolver 看到 client IP + DNS query。
ODoH 将 proxy 和 resolver 解耦:
Client → Proxy (Oblivious Proxy):
加密 POST https://proxy/dns-query
Body: encrypted DNS query (用 resolver 的 HPKE 公钥加密)
→ Proxy 知道 client IP 但看不到查询内容
Proxy → Target (Oblivious Target = DNS resolver):
加密 POST https://resolver/dns-query
Body: encrypted DNS query (same, proxy 无法解密)
→ Target/resolver 看到查询内容但不知道 client IP (只看得到 proxy IP)
Proxy 和 Target 不能勾结 (勾结 = 仍然可追踪)
四者对比
| 端口 | 传输 | 握手指令 | 可封锁性 | 隐私 (query) | 隐私 (client IP) | |
|---|---|---|---|---|---|---|
| Do53 | 53 UDP | UDP | 0 | 极低 | 无 | 无 |
| DoT | 853 | TCP+TLS | 1-2 RTT | 高 (独立端口) | 部分 (TLS) | 无 |
| DoH | 443 | HTTP/2 or /3 | 1-2 RTT (h2), 0-1 RTT (h3) | 极低 (与 HTTPS 混) | 部分 (HTTPS) | 无 |
| DoQ | 853 | QUIC/UDP | 0-1 RTT | 中 | 部分 (QUIC) | 无 |
| ODoH | 443 | HTTP + HPKE | 2 RTT (proxy then resolver) | 低 | 有 (双层) | 有 (resolver 看不到) |
参考
- RFC: 7858, 8484, 9250, 9230
- AdGuard: adguard-dns.io/encryption.html
Keywords: DoH, DoT, DoQ, ODoH, DNS privacy, encrypted DNS, HPKE, oblivious proxy