技术实践
日常思考

DNSPod Public DNS 的 DoH / DoT 加密 DNS 配置方法

DNSPod 的 Public DNS 支持 DoH 和 DoT 两种加密 DNS 协议,可以把原本明文传输的 DNS 查询加密,减少中间网络直接查看或者篡改 DNS 请求的机会。

如果平时已经在用 DNSPod 公共 DNS,又希望把 DNS 查询改成加密方式,可以直接使用官方提供的 DoH 或 DoT 地址。

DNSPod DoH / DoT 地址

目前免费 Public DNS 推荐使用域名接入。

DoH:

https://doh.pub/dns-query

DoT:

dot.pub

这里不要再使用以前网上流传的一些测试 IP 或固定 IP 地址。

DNSPod 后续已经明确建议免费版 DoH / DoT 使用域名接入,这样服务端可以根据实际情况调整节点,也避免固定 IP 调整后导致配置失效。

DoH 是什么

DoH 全称:

DNS over HTTPS

它把 DNS 查询放到 HTTPS 连接中传输,默认使用:

TCP 443

从网络层看和普通 HTTPS 流量比较接近。

传统 DNS 一般使用 UDP 53,查询内容本身没有加密,中间网络设备理论上可以直接看到查询的域名,也可能对 DNS 响应进行干扰。

使用 DoH 后,DNS 请求会经过 HTTPS 加密传输。

它主要解决的是:

  • DNS 查询被明文读取
  • 部分中间网络对 DNS 响应进行篡改
  • 公共 Wi-Fi 等不可信网络中的 DNS 安全问题

DoH 对应的标准是 RFC 8484。

DoT 是什么

DoT 全称:

DNS over TLS

原理和 DoH 类似,同样是给 DNS 查询增加 TLS 加密。

DoT 默认使用:

TCP 853

和 DoH 最大的区别主要是传输方式不同。

DoH 把 DNS 放进 HTTPS,使用 443 端口;DoT 则使用专门的 853 端口。

从普通用户实际使用角度看,两者目的基本一样:

把 DNS 查询从明文变成加密传输

DoT 主要对应 RFC 7858 和 RFC 8310。

DoH 和 DoT 怎么选

如果设备本身支持,两种都可以。

简单来说:

DoH
使用 HTTPS / 443
兼容性通常更好
浏览器支持比较多

DoT
使用 TLS / 853
协议用途更明确
Android 原生支持比较方便

我个人觉得没必要纠结哪一个一定更好,主要看系统或者路由器原生支持哪一种。

例如浏览器里配置加密 DNS,DoH 比较常见;Android 的“私人 DNS”则直接使用 DoT。

Android 设置 DNSPod DoT

Android 从较早版本开始就支持“私人 DNS”,实际使用的就是 DoT。

不同品牌手机菜单名字可能稍有区别,一般在:

设置
→ 网络和互联网
→ 私人 DNS

选择:

私人 DNS 提供商主机名

填写:

dot.pub

保存以后,系统支持的 DNS 查询就会通过 DoT 发送到 DNSPod。

这里必须填写主机名,不能填写:

https://doh.pub/dns-query

因为 Android 的“私人 DNS”使用的是 DoT,不是 DoH。

浏览器使用 DNSPod DoH

Chrome、Edge、Firefox 等浏览器都已经支持安全 DNS / DoH。

如果浏览器允许填写自定义 DoH 地址,可以使用:

https://doh.pub/dns-query

不同版本浏览器的设置入口会变化,一般可以在:

隐私和安全
→ 安全 DNS
→ 自定义 DNS 提供商

找到对应选项。

配置以后,浏览器自己的 DNS 查询可以通过 DNSPod DoH 发送。

Windows 使用 DoH

新版 Windows 已经原生支持 DoH。

如果系统网络设置支持加密 DNS,可以在网卡 DNS 设置中启用。

需要注意的是,Windows 对自定义 DoH 模板的支持方式会随着系统版本变化,所以具体配置建议以当前 Windows 网络设置页面为准。

如果系统只允许选择已识别的 DNS 服务,也没必要为了使用 DoH 去修改一堆系统注册表。

浏览器单独使用 DoH 已经能够覆盖大部分网页访问场景。

怎么测试 DoH 是否正常

Linux 或 macOS 有 curl 的话,可以直接测试:

curl -H 'accept: application/dns-json' \
'https://doh.pub/dns-query?name=example.com&type=A'

如果正常返回 DNS 查询结果,说明 DoH 服务基本可以访问。

也可以简单检查 HTTPS 是否能连接:

curl -I https://doh.pub/dns-query

这里返回 HTTP 状态码并不能完全代表 DNS 查询一定成功,但至少可以判断 TLS 和 HTTPS 连接是否正常。

DoT 怎么测试

如果系统安装了 OpenSSL,可以先测试 853 端口和 TLS 握手:

openssl s_client -connect dot.pub:853 -servername dot.pub

正常情况下可以看到 TLS 证书和握手信息。

这只能说明 DoT 服务端口可以连接,不等于完整 DNS 查询测试,但用于排查网络有没有阻断 853 端口已经比较方便。

为什么不建议写死 IP

DNS 服务的后端节点并不是永久固定的。

如果直接把:

doh.pub
dot.pub

手动绑定到某一个旧 IP,以后 DNSPod 调整节点以后,可能出现:

  • 连接超时
  • TLS 证书异常
  • 节点已经停止服务
  • 无法自动切换新的服务节点

DNSPod 目前也明确建议使用:

DoH:https://doh.pub/dns-query
DoT:dot.pub

通过域名接入,不需要自己维护服务器 IP。

加密 DNS 能解决什么

DoH 和 DoT 最主要解决的是 DNS 查询传输过程中的隐私和完整性问题。

它并不等于:

匿名上网
隐藏真实 IP
VPN
代理

即使使用加密 DNS,你连接的网站服务器仍然可以看到正常的网络连接来源,运营商也仍然能够看到你与哪些 IP 地址建立了连接。

所以 DoH / DoT 更准确的理解应该是:

加密 DNS 查询

而不是“加密所有上网流量”。

DoH / DoT 也不一定永远更快

使用加密 DNS 后,多了一层 TLS 或 HTTPS 连接,所以理论上会增加一点协议开销。

不过实际体验更多取决于:

  • DNS 节点距离
  • 运营商线路
  • 缓存命中情况
  • 客户端连接复用
  • 当前网络质量

所以普通 DNS 延迟低,并不代表 DoH 一定慢;反过来也一样。

我更看重的是稳定性和解析结果是否正常,而不是单纯比较几毫秒 DNS 延迟。

遇到解析异常怎么办

如果配置以后网页打不开,可以先恢复系统默认 DNS,确认到底是不是加密 DNS 引起的。

然后检查:

DoH:https://doh.pub/dns-query
DoT:dot.pub

有没有填写错误。

另外部分公司、校园网、公共 Wi-Fi 或特殊网络环境可能会限制 TCP 853,这种情况下 DoT 可能无法连接,而基于 443 的 DoH 通常更容易正常使用。

最后

DNSPod 的 DoH 和 DoT 配置其实比较简单。

现在直接记住两个地址就够了:

DoH
https://doh.pub/dns-query

DoT
dot.pub

浏览器更适合使用 DoH,Android 的私人 DNS 可以直接填写 dot.pub

如果以前配置过固定测试 IP 或者手动修改 hosts 指向旧节点,建议恢复成官方域名方式,后续节点调整也不需要自己重新修改。

参考资料

赞(1) 打赏
未经允许不得转载:Kelro Blog » DNSPod Public DNS 的 DoH / DoT 加密 DNS 配置方法

评论 抢沙发