土法炼钢兴趣小组的算法知识备份

【网络工程】加密 DNS:DoH、DoT 与 DoQ 的工程部署

文章导航

分类入口
network
标签入口
#dns#doh#dot#doq#encryption#privacy#tls

目录

DNSSEC 解决了 DNS 应答的完整性问题——确保应答没有被篡改。但 DNSSEC 不加密 DNS 流量,查询和应答仍然以明文传输。这意味着:

加密 DNS 协议——DoH(DNS over HTTPS)、DoT(DNS over TLS)和 DoQ(DNS over QUIC)——在传输层加密 DNS 流量,保护查询隐私。但三种协议的设计哲学不同,适用场景也不同。

本文从工程部署角度对比三种加密 DNS 协议,帮你做出有依据的选型决策。

一、DNS 明文传输的安全风险

1.1 风险量化

传统 DNS 查询(UDP 端口 53)的可见性:

客户端 → 路由器 → ISP → 递归解析器 → 权威服务器
  │         │       │
  │         │       └─ ISP 可以:
  │         │            记录所有查询的域名
  │         │            基于域名做过滤/劫持
  │         │            注入广告(DNS 劫持)
  │         │
  │         └─ 本地网络管理员可以:
  │              监控所有设备的 DNS 查询
  │              做内容过滤(家长控制等)
  │
  └─ 同一网络的攻击者可以:
       ARP 欺骗后截获 DNS 查询
       伪造 DNS 应答(DNS 欺骗)

1.2 实际攻击案例

# 在公共 WiFi 上,任何人都可以用 tcpdump 看到 DNS 查询
tcpdump -i wlan0 -n port 53 -l 2>/dev/null | head -5

# 输出示例:
# 14:23:01 IP 192.168.1.100.45123 > 8.8.8.8.53: 12345+ A? www.bank.com. (30)
# 14:23:01 IP 8.8.8.8.53 > 192.168.1.100.45123: 12345 1/0/0 A 93.184.216.34 (46)
# 14:23:05 IP 192.168.1.100.45123 > 8.8.8.8.53: 12346+ A? mail.company.com. (34)

# 攻击者能清楚看到:
# - 谁(源 IP)在什么时间查询了什么域名
# - 甚至不需要解密 HTTPS 流量,DNS 就暴露了行为模式

二、DoT(DNS over TLS)

2.1 协议概述

DoT 是最直接的加密方案——在 DNS 和传输层之间插入一层 TLS:

传统 DNS:
  应用 → DNS 查询(明文)→ UDP/TCP 端口 53

DoT:
  应用 → DNS 查询 → TLS 加密 → TCP 端口 853

DoT 的特征:
  - 使用专用端口 853
  - 基于 TLS 1.2 或 1.3
  - 在 TLS 之上传输标准 DNS 消息
  - RFC 7858(2016 年)

2.2 DoT 的握手过程

客户端                         DoT 服务器 (853)
  │                                │
  ├────── TCP SYN ─────────────────→
  ├────── TCP SYN-ACK ←────────────┤
  ├────── TCP ACK ─────────────────→
  │                                │     TCP 握手: 1 RTT
  ├────── TLS ClientHello ─────────→
  ├────── TLS ServerHello ←────────┤
  ├────── TLS Finished ────────────→
  │                                │     TLS 1.3 握手: 1 RTT
  ├────── DNS Query(加密)─────────→
  ├────── DNS Response(加密)←─────┤     DNS 查询: 部分 RTT
  │                                │
  总延迟(首次查询): 2–3 RTT
  后续查询(复用连接): 部分 RTT

2.3 客户端配置

Android(9.0+)原生支持:

设置 → 网络和互联网 → 私人 DNS
选择"私人 DNS 提供商主机名"
输入: dns.google(Google)
      或 cloudflare-dns.com(Cloudflare)
      或 dns.quad9.net(Quad9)

Linux(systemd-resolved):

# /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google
DNSOverTLS=yes
# opportunistic: 尝试 DoT,失败回退明文
# yes: 强制 DoT,失败则不解析
# 重启服务
systemctl restart systemd-resolved

# 验证 DoT 工作
resolvectl status
# DNSOverTLS setting: yes
# Current DNS Server: 1.1.1.1

# 确认端口 853 有连接
ss -tnp | grep :853
# ESTAB  0  0  192.168.1.100:42356  1.1.1.1:853

使用 Stubby(独立 DoT 客户端):

# /etc/stubby/stubby.yml
resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
round_robin_upstreams: 1
idle_timeout: 10000

upstream_recursive_servers:
  - address_data: 1.1.1.1
    tls_auth_name: "cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: "GP8Knf7qBae+aIfythytMbYnL+yowaWVeD6MoLHkVRg="
  - address_data: 8.8.8.8
    tls_auth_name: "dns.google"

listen_addresses:
  - 127.0.0.1@53
  - 0::1@53

2.4 服务端部署

使用 Nginx 作为 DoT 前端:

# /etc/nginx/nginx.conf — DoT 反向代理
stream {
    upstream dns_backend {
        server 127.0.0.1:53;
    }

    server {
        listen 853 ssl;
        ssl_certificate     /etc/letsencrypt/live/dns.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/dns.example.com/privkey.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        proxy_pass dns_backend;
    }
}

三、DoH(DNS over HTTPS)

3.1 协议概述

DoH 将 DNS 查询封装在 HTTPS 请求中:

DoH 的两种查询方式:

GET 方式(适合缓存):
  GET /dns-query?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB
  Accept: application/dns-message
  → DNS 查询被 Base64url 编码放在 URL 参数中

POST 方式(适合大查询):
  POST /dns-query
  Content-Type: application/dns-message
  Body: <binary DNS message>
  → DNS 查询以二进制格式放在 HTTP Body 中

DoH 的特征:
  - 使用标准 HTTPS 端口 443
  - 基于 HTTP/2 或 HTTP/3
  - RFC 8484(2018 年)
  - 与普通 HTTPS 流量无法区分

3.2 DoH 与 DoT 的核心区别

DoT 使用专用端口 853:
  → 网络管理员/防火墙可以轻松识别并阻止 DoT
  → 只要封锁端口 853,DoT 就不可用

DoH 使用标准端口 443:
  → 与所有 HTTPS 流量混在一起
  → 如果封锁 443,整个 Web 都不可用
  → 网络管理员几乎无法阻止 DoH

这个区别导致了巨大的争议:
  隐私倡导者: DoH 好,用户隐私不可侵犯
  企业管理员: DoH 坏,绕过了企业安全策略
  ISP:        DoH 坏,破坏了内容过滤和家长控制

3.3 浏览器 DoH 配置

Chrome:
  设置 → 隐私和安全 → 安全 → 使用安全 DNS
  选择提供商: Google / Cloudflare / OpenDNS / Custom

Firefox:
  设置 → 常规 → 网络设置 → 启用基于 HTTPS 的 DNS
  选择提供商: Cloudflare / NextDNS / Custom
  注意: Firefox 的 DoH 默认绕过系统 DNS 设置

Edge:
  设置 → 隐私 → 安全 → 使用安全 DNS
  行为与 Chrome 类似

3.4 命令行 DoH 查询

# 使用 curl 发送 DoH GET 请求
# 先将 DNS 查询编码为 Base64url
QUERY=$(python3 -c "
import base64, struct
# 构建 DNS 查询: www.example.com A
query = struct.pack('!HHHHHH', 0, 0x0100, 1, 0, 0, 0)
# www
query += bytes([3]) + b'www'
# example
query += bytes([7]) + b'example'
# com
query += bytes([3]) + b'com'
query += bytes([0])  # root
query += struct.pack('!HH', 1, 1)  # Type A, Class IN
print(base64.urlsafe_b64encode(query).decode().rstrip('='))
")

curl -s -H "accept: application/dns-message" \
  "https://cloudflare-dns.com/dns-query?dns=$QUERY" | \
  python3 -c "import sys; data=sys.stdin.buffer.read(); print(f'Response: {len(data)} bytes')"

# 使用 kdig(knot-dns 工具)直接发送 DoH
kdig @1.1.1.1 www.example.com +https

# 使用 dog(现代 DNS 客户端)
dog www.example.com --https @https://cloudflare-dns.com/dns-query

3.5 DoH JSON API

一些 DoH 服务商还提供 JSON API(非标准但方便调试):

# Google 的 JSON API
curl -s "https://dns.google/resolve?name=example.com&type=A" | python3 -m json.tool
# {
#   "Status": 0,
#   "TC": false,
#   "RD": true,
#   "RA": true,
#   "AD": true,
#   "CD": false,
#   "Question": [{"name": "example.com.", "type": 1}],
#   "Answer": [
#     {"name": "example.com.", "type": 1, "TTL": 300,
#      "data": "93.184.216.34"}
#   ]
# }

# Cloudflare 的 JSON API
curl -s -H "accept: application/dns-json" \
  "https://cloudflare-dns.com/dns-query?name=example.com&type=A" | \
  python3 -m json.tool

3.6 服务端 DoH 部署

使用 Nginx + dnsdist 部署 DoH 服务:

# Nginx 配置 — DoH 前端
server {
    listen 443 ssl http2;
    server_name dns.example.com;

    ssl_certificate     /etc/letsencrypt/live/dns.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dns.example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;

    location /dns-query {
        # 转发到 dnsdist 的 DoH 后端
        proxy_pass https://127.0.0.1:8443/dns-query;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;

        # HTTP/2 push 优化
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}
-- dnsdist 配置 (/etc/dnsdist/dnsdist.conf)
-- 作为 DoH 服务器运行

-- 上游 DNS
newServer({address="8.8.8.8:53", name="google-dns"})
newServer({address="1.1.1.1:53", name="cloudflare-dns"})

-- DoH 监听
addDOHLocal(
  "127.0.0.1:8443",
  "/etc/letsencrypt/live/dns.example.com/fullchain.pem",
  "/etc/letsencrypt/live/dns.example.com/privkey.pem",
  { "/dns-query" },
  {
    reusePort = true,
    tcpFastOpenQueueSize = 64,
    minTLSVersion = "tls1.2",
  }
)

-- DoT 监听
addTLSLocal(
  "0.0.0.0:853",
  "/etc/letsencrypt/live/dns.example.com/fullchain.pem",
  "/etc/letsencrypt/live/dns.example.com/privkey.pem",
  {
    minTLSVersion = "tls1.2",
  }
)

-- 缓存
pc = newPacketCache(100000, {
  maxTTL = 3600,
  minTTL = 60,
  temporaryFailureTTL = 30,
  staleTTL = 60,
})
getPool(""):setCache(pc)

四、DoQ(DNS over QUIC)

4.1 协议概述

DoQ 基于 QUIC 协议传输 DNS 查询:

DoQ 的特征:
  - 基于 QUIC(UDP 端口 853 或 8853)
  - RFC 9250(2022 年)
  - 继承 QUIC 的所有优势:
    · 0-RTT 握手(连接恢复时)
    · 无队头阻塞
    · 连接迁移
  - 目前支持有限,仍在早期阶段

DoQ 与 DoT/DoH 的比较:
  DoT:  DNS → TLS → TCP
  DoH:  DNS → HTTP/2 → TLS → TCP
  DoQ:  DNS → QUIC(内置加密)→ UDP

4.2 DoQ 的延迟优势

首次查询延迟对比(到远程解析器,RTT = 30ms):

传统 DNS(UDP):
  DNS 查询                        30ms
  总计:                           30ms

DoT:
  TCP 握手          30ms
  TLS 1.3 握手      30ms
  DNS 查询           部分 RTT
  总计:              ~90ms(首次)

DoH(HTTP/2):
  TCP 握手          30ms
  TLS 1.3 握手      30ms
  HTTP/2 SETTINGS   交错
  DNS 查询           部分 RTT
  总计:              ~90ms(首次)

DoQ:
  QUIC 握手         30ms(包含加密)
  DNS 查询           与握手合并
  总计:              ~60ms(首次)

DoQ 0-RTT(连接恢复):
  DNS 查询           30ms(与握手合并)
  总计:              ~30ms(与明文 DNS 相当)

4.3 DoQ 客户端

# 使用 kdig(knot-dns 3.1+)发送 DoQ 查询
kdig @dns.adguard-dns.com www.example.com +quic

# 使用 q(DNS 查询工具)
q www.example.com @quic://dns.adguard-dns.com

# 支持 DoQ 的公共解析器(截至 2025 年):
# - AdGuard DNS: dns.adguard-dns.com:853
# - NextDNS:     有限支持
# - Cloudflare:  实验性支持
# 注意: 主流公共 DNS(Google、Cloudflare)的 DoQ 支持
#       仍在实验阶段或尚未正式推出

五、三种协议的工程对比

5.1 全维度对比

维度 DoT DoH DoQ
RFC 7858(2016) 8484(2018) 9250(2022)
端口 853(TCP) 443(TCP) 853(UDP)
传输层 TCP + TLS TCP + TLS + HTTP/2 QUIC(UDP)
首次延迟 2–3 RTT 2–3 RTT 1 RTT
恢复延迟 1 RTT(TLS 恢复) 1 RTT 0 RTT
队头阻塞 有(TCP) 有(TCP)
可封锁性 易(端口 853) 难(端口 443) 中等
流量伪装 与 HTTPS 混合
浏览器支持 全部主流浏览器
移动 OS 支持 Android 9+/iOS 14+ 通过浏览器
服务端成熟度
协议开销 中(HTTP 头)
连接迁移

5.2 选型决策

场景一: 个人隐私保护
  推荐: DoH(浏览器)+ DoT(系统级)
  理由: 浏览器原生支持 DoH,覆盖 Web 浏览
        系统级 DoT 覆盖所有应用
        DoH 难以被 ISP 封锁

场景二: 企业内部 DNS 加密
  推荐: DoT
  理由: 专用端口便于防火墙管理
        不会绕过企业安全策略
        比 DoH 协议开销低
        成熟度高

场景三: 移动设备
  推荐: DoT(Android)/ DoH(iOS 通过配置描述文件)
  理由: 操作系统原生支持
        DoQ 未来在移动场景有优势(连接迁移)
        但目前支持不足

场景四: 高性能 DNS 服务
  推荐: DoQ(如果可用)或 DoT
  理由: DoQ 延迟最低(0-RTT)
        无队头阻塞
        但目前生态不成熟

六、企业环境的加密 DNS 策略

6.1 企业面临的挑战

企业 DNS 的矛盾:

安全团队需要:
  ✓ 监控 DNS 查询(威胁检测、数据泄露防护)
  ✓ 过滤恶意域名(安全网关)
  ✓ 审计 DNS 记录(合规要求)

加密 DNS 导致:
  ✗ 传统 DNS 监控工具失效
  ✗ 安全网关无法检查 DNS 流量
  ✗ 浏览器 DoH 绕过企业 DNS 策略
  ✗ 员工可以绕过内容过滤

最棘手的问题:
  Firefox 默认启用 DoH + Cloudflare
  → 员工的 DNS 查询绕过企业 DNS 服务器
  → 安全团队看不到任何 DNS 日志

6.2 企业加密 DNS 架构

推荐架构: 企业内部 DoT/DoH + 出口加密

           ┌──────────────────────────────────┐
           │          企业内网                  │
           │                                    │
  终端设备 ──DoT──→ 企业 DNS 服务器 ──DoT/DoH──→ 上游 DNS
           │        (dnsdist/CoreDNS)           │
           │           │                        │
           │           ↓                        │
           │      安全日志/过滤                   │
           │      (DNS 审计/威胁检测)             │
           └──────────────────────────────────┘

关键点:
1. 终端到企业 DNS: 使用 DoT 加密(防内部窃听)
2. 企业 DNS 集中管理: 策略过滤、日志审计
3. 企业 DNS 到上游: 使用 DoH/DoT(防外部窃听)
4. 阻止终端直接使用外部 DoH/DoT

6.3 阻止浏览器 DoH 绕过

# 方法一: 使用 Canary Domain
# Firefox 和 Chrome 会查询特定域名来判断是否启用 DoH
# 如果企业 DNS 返回 NXDOMAIN,浏览器会禁用 DoH

# Firefox 查询: use-application-dns.net
# 如果返回 NXDOMAIN → Firefox 禁用 DoH

# 在 CoreDNS 中配置:
# template IN A use-application-dns.net {
#   rcode NXDOMAIN
# }

# 在 dnsmasq 中配置:
# address=/use-application-dns.net/

# 方法二: 防火墙阻止已知 DoH 服务器
# 阻止连接到 Cloudflare/Google/Quad9 的 DoH 端点
# 缺点: DoH 端点不断增加,难以完全封锁

# 方法三: 终端管理(MDM/GPO)
# Chrome 企业策略:
# {
#   "DnsOverHttpsMode": "off"
# }

# Firefox 企业策略:
# {
#   "DNSOverHTTPS": {
#     "Enabled": false,
#     "Locked": true
#   }
# }

6.4 企业 DNS 安全的完整方案

企业 DNS 安全层次:

第一层: 加密传输
  - 内网 DoT(终端 → 企业 DNS)
  - 出口 DoH/DoT(企业 DNS → 上游)

第二层: 策略控制
  - 阻止员工使用外部 DoH/DoT
  - 强制使用企业 DNS(DHCP + 防火墙规则)
  - 浏览器策略禁用内置 DoH

第三层: 安全过滤
  - DNS 防火墙(RPZ / Response Policy Zone)
  - 恶意域名黑名单(威胁情报 feed)
  - DGA 域名检测(机器学习)

第四层: 日志审计
  - 全量 DNS 查询日志
  - 异常查询检测(DNS 隧道、数据外泄)
  - 与 SIEM 集成

七、加密 DNS 的性能影响

7.1 延迟测量

# 测量不同加密 DNS 的延迟

# 传统 DNS(基准)
for i in $(seq 1 10); do
  dig @8.8.8.8 example.com +noall +stats 2>&1 | grep "Query time"
done

# DoT
kdig @8.8.8.8 example.com +tls
# ;; Query time: 65 msec (首次,含 TLS 握手)
# ;; Query time: 12 msec (后续,复用连接)

# DoH
kdig @8.8.8.8 example.com +https
# ;; Query time: 78 msec (首次,含 TLS + HTTP/2 握手)
# ;; Query time: 15 msec (后续,复用连接)

# DoQ
kdig @dns.adguard-dns.com example.com +quic
# ;; Query time: 45 msec (首次,含 QUIC 握手)
# ;; Query time: 8 msec  (后续,0-RTT)

7.2 性能优化

加密 DNS 的性能优化策略:

1. 连接复用(Connection Reuse)
   - 保持到 DNS 服务器的长连接
   - 避免每次查询都重新握手
   - DoT/DoH: TCP Keepalive
   - DoQ: QUIC 连接超时设置

2. 连接池(多连接并发)
   - 单连接的队头阻塞(DoT/DoH)限制并发
   - 使用多条连接并行查询
   - DoQ 天然支持多流,无需多连接

3. 本地缓存
   - 无论使用哪种加密 DNS,本地缓存都必须有
   - 大部分查询由缓存直接返回,不经过加密通道
   - dnsmasq / CoreDNS 作为本地缓存前端

4. 0-RTT 恢复
   - DoT: TLS 1.3 Session Resumption
   - DoH: TLS 1.3 Session Resumption
   - DoQ: QUIC 0-RTT(最优)

7.3 资源消耗对比

指标 传统 DNS DoT DoH DoQ
CPU 开销(服务端) 基准 1.5x 2x 1.3x
内存开销(服务端) 基准 2x 3x 1.5x
每查询带宽 ~100B ~150B ~200B ~130B
最大并发连接 无状态 受 TCP 连接限制 受 TCP 连接限制 受 QUIC 流限制
TLS 会话存储 需要 需要 需要

八、加密 DNS 的隐私分析

8.1 加密 DNS 不是银弹

加密 DNS 保护了什么:
  ✓ DNS 查询内容不被窃听
  ✓ DNS 应答不被篡改
  ✓ ISP 无法基于 DNS 做内容过滤

加密 DNS 仍然暴露的信息:
  ✗ TLS SNI(Server Name Indication)
    → 访问 HTTPS 网站时,SNI 明文发送目标域名
    → 即使 DNS 加密了,SNI 仍然暴露你访问的网站
    → 解决方案: ECH(Encrypted Client Hello)

  ✗ IP 地址
    → 连接目标服务器的 IP 地址可见
    → 通过反向 DNS 或 IP 归属可以推断访问的服务

  ✗ 流量模式
    → 即使内容加密,流量大小和时间模式可以泄露信息
    → DNS 查询填充(Query Padding)只部分缓解

  ✗ DoH 提供商看到所有查询
    → 信任从 ISP 转移到了 DoH 提供商
    → Cloudflare/Google 承诺不记录,但你需要信任他们

8.2 DNS 查询填充

DoT 和 DoH 支持查询填充来防止流量分析:

查询填充的作用:

没有填充:
  查询 "a.com"     → 25 字节(加密后)
  查询 "example.com" → 33 字节(加密后)
  → 通过包大小可以推断查询的域名长度

有填充(RFC 8467):
  查询 "a.com"     → 128 字节(填充到 128 的倍数)
  查询 "example.com" → 128 字节(同样填充到 128)
  → 包大小相同,无法推断域名长度

配置(Stubby):
  tls_query_padding_blocksize: 128
  # 将查询填充到 128 字节的倍数

九、部署实战:完整的加密 DNS 方案

9.1 个人用户方案

# 方案: 本地 CoreDNS + DoH 上游

# 1. 安装 CoreDNS
wget https://github.com/coredns/coredns/releases/latest/download/coredns_linux_amd64.tgz
tar -xzf coredns_linux_amd64.tgz
mv coredns /usr/local/bin/

# 2. 配置 Corefile
cat > /etc/coredns/Corefile << 'COREFILE'
.:53 {
    # 使用 DoH 转发到上游
    forward . tls://1.1.1.1 tls://8.8.8.8 {
        tls_servername cloudflare-dns.com
        health_check 30s
    }

    # 本地缓存
    cache {
        success 10000 300
        denial 5000 60
        prefetch 5 1h 20%
    }

    # 日志(调试用)
    # log

    errors
}
COREFILE

# 3. 创建 systemd 服务
cat > /etc/systemd/system/coredns.service << 'SERVICE'
[Unit]
Description=CoreDNS DNS server
After=network.target

[Service]
ExecStart=/usr/local/bin/coredns -conf /etc/coredns/Corefile
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
SERVICE

# 4. 启动
systemctl enable --now coredns

# 5. 将系统 DNS 指向本地 CoreDNS
cat > /etc/resolv.conf << 'EOF'
nameserver 127.0.0.1
EOF

# 6. 验证
dig @127.0.0.1 example.com
# 查询通过 DoT 到达 Cloudflare,结果缓存在本地

9.2 企业方案

企业加密 DNS 架构:

终端(DoT)                企业 DNS 集群              上游(DoH)
┌─────────┐               ┌──────────────────┐       ┌───────────┐
│ 员工设备 │──DoT(853)────→│  dnsdist         │──DoH──→│ Cloudflare│
│ (MDM配置)│               │  ├─ 策略过滤     │       │ Google DNS│
└─────────┘               │  ├─ 查询日志     │       └───────────┘
                           │  └─ 本地缓存     │
┌─────────┐               │                  │
│ 服务器   │──明文(53)────→│  CoreDNS 集群     │
│          │ (内网安全)     │  ├─ K8s DNS      │
└─────────┘               │  └─ 内部域名     │
                           └──────────────────┘
                                    │
                                    ↓
                           ┌──────────────────┐
                           │  安全平台         │
                           │  ├─ DNS 日志分析  │
                           │  ├─ 威胁检测     │
                           │  └─ SIEM 集成    │
                           └──────────────────┘

十、总结

加密 DNS 的选型不是一个纯技术问题,而是隐私、安全、可管理性和性能之间的权衡:

  1. DoT 适合受管环境。 专用端口 853 让网络管理员可以识别和管理 DoT 流量。企业内部 DNS 加密的首选——既保护了传输安全,又不破坏安全策略和审计能力。

  2. DoH 适合个人隐私保护。 混入 HTTPS 流量中难以封锁,浏览器原生支持,是对抗 ISP 窃听和 DNS 劫持最有效的方案。但它也带来了企业安全的挑战——绕过企业 DNS 策略需要额外的管理手段。

  3. DoQ 是技术上最优的方案,但生态尚未成熟。 0-RTT 握手让延迟逼近明文 DNS,无队头阻塞提高了并发性能,连接迁移适合移动场景。等生态成熟后,DoQ 可能成为企业 DNS 的下一代标准。

  4. 加密 DNS 不等于完整的隐私保护。 TLS SNI、IP 地址、流量模式仍然会泄露信息。加密 DNS 需要与 ECH、VPN、Tor 等技术配合才能提供更完整的隐私保护。

  5. 企业需要分层策略。 内部 DoT + 出口 DoH + 策略过滤 + 日志审计的组合方案,既满足传输安全需求,又保留了安全团队的可见性和控制力。禁止浏览器直接使用外部 DoH 是企业安全的基本要求。

下一篇我们进入 DNS 故障排查实战——从超时、NXDOMAIN 到 DNS 劫持,构建系统化的 DNS 排查方法论。


上一篇:DNSSEC 工程:签名、验证与信任链

下一篇:DNS 故障排查实战:从超时到劫持

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-22 · network

网络工程索引

汇总本站网络工程系列文章,覆盖分层模型、以太网、IP、TCP、DNS、TLS、HTTP/2/3、CDN、BGP 与故障诊断。


By .