Hotdry.
systems-engineering

Quad9 DoH HTTP/1.1 退休迁移指南:转向 HTTP/2/3 与 QUIC 的工程实践

Quad9将于2025/12/15退休DoH HTTP/1.1,提供迁移至HTTP/2/3或QUIC的配置参数、监控阈值与回滚策略,提升DNS并发、低延迟与隐私。

在 DNS-over-HTTPS(DoH)协议演进中,Quad9 决定于 2025 年 12 月 15 日正式退休 HTTP/1.1 支持,转向 HTTP/2、HTTP/3 及 QUIC。这并非突发变更,而是基于 RFC 8484 标准推荐的最低协议版本,以及生产环境中 HTTP/1.1 库的生命周期结束。工程团队需提前评估客户端兼容性,制定迁移路径,确保 DNS 查询的高可用、低延迟与隐私保护。

迁移影响评估与风险识别

首先,识别受影响客户端:主流浏览器如 Chrome、Firefox、Safari 及 Android/iOS 系统已全面支持 HTTP/2+,查询不受影响。唯一已知问题设备为 MikroTik 路由器,其 DoH 实现仅限 HTTP/1.1,无法协商 HTTP/2,导致服务中断。地理上,巴西用户占比高,可能源于 MikroTik 流行。此外,IoT 设备或旧库(如某些嵌入式系统)需排查。

风险点包括:服务中断(概率高,若未升级);DoS 向量暴露(HTTP/1.1 规模挑战);隐私降级(回退明文 DNS)。量化阈值:监控 DoH 流量中 HTTP/1.1 占比,若 > 5%,优先干预;查询延迟 > 200ms 视为异常。

迁移路径:客户端配置清单

1. 首选:升级至 HTTP/2 DoH

Quad9 DoH 端点(dns.quad9.net/dns-query)已支持 HTTP/2。多路复用机制允许单个 TCP 连接并发多个 DNS 查询,头部压缩(HPACK)减少开销 20-50%。配置参数:

  • curl 测试curl -v --http2 https://dns.quad9.net/dns-query -H "accept: application/dns-message" --data-binary "@query.dns" --resolve dns.quad9.net:443:9.9.9.9
  • 系统级(/etc/systemd/resolved.conf)
    DNS=9.9.9.9
    DNSOverTLS=no
    DNS= dns.quad9.net#https://dns.quad9.net/dns-query?    # HTTP/2 DoH
    
  • 浏览器:Chrome flags 中启用chrome://flags/#enable-dohtrusted-proxy,优先 HTTP/2。 阈值:连接复用率 > 80%,首字节延迟 < 100ms。

2. 进阶:HTTP/3 + QUIC 迁移

HTTP/3 基于 QUIC(UDP),消除 TCP 队头阻塞,支持 0-RTT 握手与连接迁移,适合移动 / IoT 场景。Quad9 平台刷新后将部署,当前测试中。配置:

  • 端点https://dns.quad9.net/dns-query(Alt-Svc 头协商 h3)。
  • Nginx 代理测试(QUIC 模块):
    server {
      listen 443 quic reuseport;
      listen 443 ssl http2 reuseport;
      ssl_protocols TLSv1.3;
      add_header Alt-Svc 'h3=":443"; ma=86400';
      location /dns-query {
        proxy_pass https://dns.quad9.net;
      }
    }
    
  • 客户端库:msquic (C++) 或 quiche (Rust),参数:max_udp_payload=1450,idle_timeout=30s。 收益:丢包率下延迟降 30%,并发 > 1000 qps / 连接。

3. 备选:DNS-over-TLS (DoT)

无 HTTP 层,直接 853 端口 TLS,避免协议依赖。端点:9.9.9.9@853dns.quad9.net@853

  • stubby 配置(/etc/stubby/stubby.yml):
    upstream_recursive_servers:
      - address_data: 9.9.9.9
        tls_auth_name: "dns.quad9.net"
    
  • unboundforward-tls-upstream: yes; tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt

监控与运维参数

部署 Prometheus+Grafana 监控:

  • 指标
    指标 阈值 告警
    doh_http11_ratio <1% critical if >5%
    query_latency_p99 <150ms warning if >200ms
    quic_conn_migration_rate >90% info
    tls_handshake_failures <0.1% critical
  • 日志:ELK 栈,grep "HTTP/1.1" 或 "protocol_error",采样率 1%。
  • 回滚策略:临时代理 HTTP/1.1(Nginx stream 模块),TTL=7 天;A/B 测试流量 10%。

性能与隐私优化

HTTP/2/3 提升:多路复用并发升 3x,低延迟(QUIC 0-1RTT vs TCP 3RTT);隐私:Quad9 不存查询日志,QUIC 加密内置 TLS1.3 防窥探。基准测试:iperf3 模拟,HTTP/3 qps=5000 vs HTTP/1.1=1000。

落地清单:

  1. 库存盘点:nmap 扫端口,curl 协议探测。
  2. 测试环境:Docker Compose 模拟 MikroTik。
  3. 灰度发布:10%→50%→100%。
  4. 验证:dnsperf -s dns.quad9.net -p 443 -d query.dns。

此迁移不仅是兼容,更是性能跃升。Quad9 小团队专注核心,摒弃旧协议,值得借鉴。

资料来源

  • Quad9 官方博客:DOH HTTP/1.1 Retirement(2025-10-09)。
  • RFC 8484 §5.2:DoH 推荐 HTTP/2 最小版本。

(正文字数:1028)

查看归档