本页目录

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)
Do5353 UDPUDP0极低
DoT853TCP+TLS1-2 RTT高 (独立端口)部分 (TLS)
DoH443HTTP/2 or /31-2 RTT (h2), 0-1 RTT (h3)极低 (与 HTTPS 混)部分 (HTTPS)
DoQ853QUIC/UDP0-1 RTT部分 (QUIC)
ODoH443HTTP + HPKE2 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