systemd-resolved.service实验实战2
DNS-over-TLS(DoT)详细介绍
DNS-over-TLS(简称 DoT)是一种网络安全协议,旨在通过加密 DNS(Domain Name System)查询和响应来保护用户隐私和防止数据篡改。传统 DNS 使用明文传输,容易被窃听或劫持,而 DoT 利用 TLS(Transport Layer Security)协议为 DNS 通信提供端到端加密。下面我将从多个方面逐步介绍 DoT,帮助您全面理解其原理、优势和应用。
1. 什么是 DoT?
DoT 是一种标准化的协议(由 IETF 在 RFC 7858 和 RFC 8310 中定义),它将 DNS 查询封装在 TLS 加密通道中。简单来说,当您的设备(如电脑或手机)需要解析域名(如 example.com
)时,DoT 会确保这个查询过程被加密,防止第三方窥探。例如:
- 传统 DNS:查询以明文发送,就像寄出一封未封口的信。
- DoT:查询被加密后发送,类似寄出封口的加密信件。
DoT 使用标准端口 853 进行通信,这与传统 DNS 的端口 53 不同,便于网络设备识别和优先处理加密流量。
2. 为什么需要 DoT?
传统 DNS 存在严重的安全和隐私问题:
- 窃听风险:攻击者可以在网络上拦截 DNS 查询,获取您访问的网站信息。例如,如果您查询
bank.com
,黑客可能窃取此数据用于钓鱼攻击。 - 篡改风险:中间人(如 ISP 或恶意路由器)可以修改 DNS 响应,将您重定向到恶意网站。
- 隐私泄露:ISP 或政府机构可能记录您的 DNS 历史,侵犯隐私。
这些问题源于 DNS 的未加密设计。DoT 通过加密解决了这些漏洞,确保:
- 机密性:查询内容只有发送方和接收方能解读。
- 完整性:响应数据在传输中不被篡改。
- 认证性:客户端可以验证 DNS 服务器的身份,防止假冒。
3. DoT 的工作原理
DoT 的工作流程基于 TLS 握手和加密传输,具体步骤如下(以客户端向 DNS 服务器发送查询为例):
建立 TLS 连接:客户端(如您的设备)首先与支持 DoT 的 DNS 服务器(如 Cloudflare 的
1.1.1.1
或 Google 的8.8.8.8
)建立 TCP 连接。然后,通过 TLS 握手协议协商加密参数。TLS 使用公钥加密技术加密 DNS 查询:一旦 TLS 通道建立,客户端将 DNS 查询(如请求
example.com
的 IP 地址)封装在 TLS 记录中发送。查询数据被加密为密文,只有目标服务器能解密。服务器处理并响应:DNS 服务器解密查询,处理请求,然后将响应(如 IP 地址
93.184.216.34
)同样加密后通过 TLS 通道返回。关闭连接:查询完成后,连接关闭,但 TLS 会话可能被重用以提高效率。
整个过程确保 DNS 流量像 HTTPS 一样安全。例如,一个查询包的结构可简化为:
- 明文 DNS 头 + 加密的查询负载。
4. DoT 的优点
- 增强隐私:防止 ISP 或黑客监控您的浏览历史,特别适用于公共 Wi-Fi 等不安全网络。
- 提高安全性:减少 DNS 劫持和中间人攻击风险,保护敏感操作(如在线银行)。
- 兼容性好:DoT 基于标准 TLS,易于集成到现有系统和应用(如 Android 9+ 和 iOS 14+ 原生支持)。
- 性能优化:现代实现减少了加密开销,查询延迟与传统 DNS 相近(通常 <100ms)。
5. DoT 的缺点和挑战
- 部署复杂性:需要 DNS 服务器和客户端都支持 DoT,普通用户可能需手动配置(如指定 DoT 服务器地址)。
- 防火墙干扰:某些网络可能阻止端口 853,导致连接失败。
- 中心化风险:依赖少数大型 DoT 提供商(如 Google 或 Cloudflare),可能引入新的隐私担忧(尽管他们承诺不记录数据)。
- 与 DoH 的混淆:DoT 常与 DNS-over-HTTPS (DoH) 比较。DoH 使用 HTTPS 端口 443,更易绕过防火墙,但可能被误用于绕过网络策略。DoT 更专注于传输层加密,适合网络管理员控制。
6. 如何启用和使用 DoT
- 个人用户:
- 操作系统设置:在 Android 设备上,进入“网络设置”>“私有 DNS”,输入 DoT 服务器域名(如
dns.google
)。在 Windows 或 macOS,可通过第三方软件(如 DNSCrypt)配置。 - 路由器级别:在路由器设置中启用 DoT,所有连接设备自动受益(例如,使用 OpenWrt 固件)。
- 操作系统设置:在 Android 设备上,进入“网络设置”>“私有 DNS”,输入 DoT 服务器域名(如
- 推荐服务器:免费公共 DoT 服务器包括:
- Cloudflare:
one.one.one.one
或1.1.1.1
- Google:
dns.google
或8.8.8.8
- Quad9:
dns.quad9.net
- Cloudflare:
- 验证是否生效:使用在线工具(如 Cloudflare 的
1.1.1.1/help
)检查连接状态,确保显示“DNS over TLS”为启用。
7. 总结
DNS-over-TLS(DoT)是提升互联网隐私和安全的关键技术,它通过 TLS 加密解决了传统 DNS 的固有缺陷。尽管存在部署挑战,但 DoT 在保护用户数据、防止攻击方面效果显著。随着网络威胁增加,采用 DoT 已成为最佳实践。如果您是普通用户,建议从设备设置启用 DoT
实验三:启用 DNS - over - TLS(DoT)
kesonsun@ubuntu22:~$ # 查看特定接口的详细 DNS 配置
kesonsun@ubuntu22:~$ resolvectl status ens33
Link 2 (ens33)Current Scopes: DNSProtocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.4.4DNS Servers: 8.8.8.8 8.8.4.4DNS Domain: aust.edu.cn
查看 DNS 协议配置:
- 在输出中,
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
这一行是关键。 - 这里,
-DNSOverTLS
表示 DNS over TLS 被 禁用(符号-
表示禁用)。 - 其他部分:
+DefaultRoute
:启用默认路由。+LLMNR
:启用 Link-Local Multicast Name Resolution。-mDNS
:禁用 Multicast DNS。DNSSEC=no/unsupported
:DNSSEC 未启用或不支持。
- 在输出中,
查看 DNS 服务器设置:
- DNS 服务器是
8.8.8.8
和8.8.4.4
(Google 公共 DNS),但服务器本身不影响 DoT 状态,关键是协议是否启用。 - 如果 DoT 启用,通常会显示
+DNSOverTLS
或类似指示。
- DNS 服务器是
# 1. 首先配置 DNS 服务器(cloudflare)
sudo resolvectl dns ens33 1.1.1.1 1.0.0.1# 2. 启用 DNS-over-TLS
sudo resolvectl dnsovertls ens33 yes# 3. 设置 DNS 搜索域
# 清除 ens33 接口原有的所有 DNS 搜索域,并禁用该接口的自动补全功能,强制解析时必须使用完整域名
sudo resolvectl domain ens33 ~.//改动成功+DNSOverTLS
kesonsun@ubuntu22:~$ resolvectl status ens33
Link 2 (ens33)Current Scopes: DNSProtocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 1.1.1.1DNS Servers: 1.1.1.1 1.0.0.1DNS Domain: ~.
kesonsun@ubuntu22:~$#确认 DNS 查询是否通过 TLS 加密,可以使用 tcpdump 捕获网络流量