加密 DNS · RFC 7858 / RFC 8310

DNS over TLS(DoT)
协议详解

在 TLS 隧道中承载 DNS 报文的加密解析协议,专用 TCP 853 端口、强制证书校验,安卓私人 DNS 与路由器全局加密的事实标准。

853IANA 专用 TCP 端口
RFC 78582016 年定义协议本体
RFC 83102018 年补充使用配置
强制服务器证书与主机名校验
TL;DR · 核心结论

DoT(DNS over TLS)由 IETF RFC 7858(2016)定义、RFC 8310(2018)补充使用配置:它在一条普通的 TLS 连接上直接承载 DNS 报文,服务器监听 TCP 853 专用端口,客户端必须像访问 HTTPS 网站一样校验服务器证书与主机名。相比明文 DNS(UDP 53),DoT 把查询内容加密、防篡改;相比 DoH(443 端口封装进 HTTPS),DoT 协议开销更低、长连接更稳定,因此成为 Android「私人 DNS」、iOS 描述文件与 OpenWrt 路由器的系统级加密方案。

How It Works

DoT 一次查询的完整流程

从发起解析到拿到加密响应,中间发生了什么

传统明文 DNS 是一个「一问一答」的 UDP 报文:客户端把要查的域名以明文发往服务器 53 端口,任何人在链路上都能看到、甚至篡改这个报文。DoT 的思路非常直接——不改变 DNS 报文本身的格式,而是在它外面套一条 TLS 加密隧道,让中间节点只能看到「你正在和某个 DoT 服务器通信」,看不到具体查了什么域名。

第一步:建立 TCP 连接并完成 TLS 握手

客户端向 DoT 服务器的 853/TCP 端口发起 TCP 连接,随后进行标准 TLS 握手(ClientHello / ServerHello / 证书交换 / 密钥协商)。RFC 7858 要求服务器出示由客户端信任 CA 签发的证书,且证书上的主机名必须与用户配置的 DoT 主机名一致——这一步与浏览器访问 HTTPS 网站完全相同。

第二步:校验失败必须拒绝,不能降级

RFC 7858 第 6 节明确要求:证书校验失败时,客户端必须终止连接,而不是悄悄回退到明文 DNS。如果允许降级,攻击者只需在握手时返回一张假证书,就能让客户端「自愿」走明文,加密形同虚设。这也是为什么安卓私人 DNS 填错主机名会直接显示「无法连接」,而不是悄悄退回明文。

第三步:在 TLS 隧道里收发 DNS 报文

握手成功后,客户端把标准 DNS 查询报文直接写入这条 TLS 连接,服务器把 DNS 响应写回。为了在一条字节流上区分多个报文,DoT 采用 2 字节长度前缀Framing:先写 2 字节长度,再写对应长度的 DNS 报文。连接可以长期复用,后续查询不需要重新握手,这正是 DoT 延迟低、开销小的关键。

第四步:与明文 DNS 的本质差异

明文 DNS 的风险是三重的——窃听(运营商记录你访问了哪些域名)、篡改(中间人返回假 IP)、污染(针对特定域名注入伪造响应)。DoT 通过 TLS 同时解决了这三件事:内容加密防窃听、MAC 完整性校验防篡改、证书绑定服务器身份防冒充。

Key Parameters

DoT 关键参数一览

与明文 DNS、DoH 在同一张表里对照

维度明文 DNSDoT(RFC 7858)DoH(RFC 8484)
默认端口53/UDP 与 53/TCP853/TCP(IANA 专用)443/TCP(复用 HTTPS)
封装方式裸 DNS 报文TLS 隧道 + 2 字节长度前缀HTTP 请求体 / GET 参数
证书校验无强制校验证书与主机名强制校验 HTTPS 证书
流量可识别性一眼即知853 端口独立,易被针对与网页流量混在一起,最难区分
协议开销最小低(无 HTTP 头)略高(带 HTTP 请求头)
典型客户端全部设备安卓私人 DNS、iOS、OpenWrtChrome/Edge/Firefox、Windows 11

RFC 8310 进一步规定了 DoT 的「使用配置」:客户端应优先使用系统信任的 CA 证书库、不接受自签名证书,并定义了如何在与明文 DNS 并存时避免意外泄露。Cloudflare 在其 1.1.1.1 DoT 文档中也沿用了同一套端口与证书要求。

Setup

安卓私人 DNS 与路由器配置示例

DoT 最常见的两个落地场景,复制主机名即可

dns.23-4.cn
tls://dns.23-4.cn

Android 9+ 私人 DNS

  1. 打开「设置」→「网络和互联网」→「私人 DNS」(部分机型在「连接」或「更多连接方式」里)。
  2. 选择「指定私人 DNS 提供商主机名」,填入 dns.23-4.cn。
  3. 保存后系统自动在 853 端口完成 TLS 握手,Wi-Fi 与移动数据全局生效,无需任何 App。

OpenWrt / 梅林等路由器(dnsmasq + DoT 上游)

在路由器的 DHCP/DNS 设置里把上游服务器填成 tls://dns.23-4.cn,路由器会以 DoT 向该服务器发起加密解析,家里所有设备的 DNS 查询都先经过路由器再被加密转发,等于一次配置、全屋生效。这也是 DoT 相比 DoH 在家庭场景更受欢迎的原因——路由器固件原生支持 DoT 上游的比例更高。

自建 DoT 服务端要点

服务端需要在 853/TCP 监听,并配置一张受信任 CA 签发的证书(如 Let's Encrypt)。防火墙/安全组必须放行入方向 853/TCP,否则客户端连握手都建立不起来;具体端口放行清单可参考本站《DoH/DoT 端口与防火墙放行》一文。

FAQ

常见问题

DoT 使用哪个端口?为什么用专用端口?+
DoT 使用 IANA 分配的 TCP 853 专用端口。专用端口让运营商和防火墙可以明确识别并放行加密 DNS 流量,但代价是 853 端口也容易被单独封锁;这与 DoH 复用 443 端口、混入网页流量的思路正好相反。
DoT 和 DoH 到底有什么区别?+
两者安全性都基于 TLS,区别在封装层:DoT 直接在 TCP 之上跑 TLS 隧道、用 853 端口;DoH 把 DNS 报文封装进 HTTPS 请求、用 443 端口。DoT 协议开销低、连接稳定,适合安卓私人 DNS 与路由器;DoH 与网页流量混淆,适合浏览器与封锁规避。
安卓私人 DNS(Private DNS)走的是 DoT 吗?+
是。Android 9(API 28)起系统级「私人 DNS」采用 DoT 实现,只需填入服务商主机名,系统会自动到 853 端口完成 TLS 握手并校验证书,全系统 Wi-Fi 与移动数据均生效,无需安装 App。
DoT 为什么必须校验服务器证书?不校验会怎样?+
RFC 7858 第 6 节要求客户端校验服务器证书与主机名。若不校验,攻击者可在链路中间人位置冒充 DoT 服务器、返回伪造解析结果,加密便失去意义。校验失败必须拒绝连接,而不是降级回明文 DNS。
References

参考来源