15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
09.10.2024

什么是DNS和DNS层次结构?完整技术指南

DNS(域名系统)是一种分层式分布式命名系统,它将人类可读的域名(如 `www.example.com`)转换为机器可读的 IP 地址(如 `192.0.2.1`)。没有 DNS,每位互联网用户都需要记住他们所访问的每个网站、API 端点或邮件服务器的数字地址。DNS 是使现代互联网能够大规模导航的协议。

DNS 的核心是一个全球分布式数据库。查询通过结构化的委托链进行解析——从顶层的根服务器,经过顶级域(TLD)服务器,再到持有特定域名实际记录的权威名称服务器。这种架构使 DNS 同时具备快速、弹性和可扩展性。

为什么 DNS 不仅仅是一本”电话簿”

“电话簿”的类比是一个有用的起点,但它大大低估了 DNS 在生产环境中的实际作用。DNS 支撑着:

  • 名称解析——将 FQDN(完全限定域名)转换为 IPv4 和 IPv6 地址
  • 电子邮件路由——MX 记录将 SMTP 流量引导至正确的邮件基础设施
  • 服务发现——SRV 记录允许应用程序动态定位服务(在 SIP、XMPP 和 Kubernetes 中大量使用)
  • 流量工程——Geo-DNS 和加权路由记录实现全球负载均衡和基于延迟的故障转移
  • 安全执行——TXT 记录承载 SPF、DKIM 和 DMARC 策略;DNSSEC 添加加密验证
  • CDN 编排——CNAME 扁平化和 Anycast 路由允许 CDN 透明地提供最近的边缘节点服务

对于任何管理 VPS 托管环境或独立服务器的人来说,在这个层面上理解 DNS 不是可选的——DNS 配置错误是导致应用程序中断、电子邮件送达失败和 SSL 配置错误的最常见根本原因之一。

DNS 解析过程:逐步详解

当用户在浏览器中输入 `www.example.com` 时,会发生以下序列。理解每个步骤对于诊断解析故障和优化 TTL 策略至关重要。

第一步:本地缓存检查

操作系统首先检查其本地 DNS 缓存(由之前的查找填充)。在 Linux 上,这可能涉及 `systemd-resolved` 或 `nscd`。在 Windows 上,DNS 客户端服务维护此缓存。如果在 TTL 内存在有效的缓存记录,解析将在此停止。

第二步:存根解析器到递归解析器

如果没有本地缓存命中,操作系统存根解析器会将查询转发给递归 DNS 解析器——通常是您的 ISP 解析器,或配置的公共解析器,例如:

  • Google Public DNS:`8.8.8.8` / `8.8.4.4`
  • Cloudflare:`1.1.1.1` / `1.0.0.1`
  • Quad9:`9.9.9.9`

递归解析器代表客户端完成遍历 DNS 层次结构的繁重工作。

第三步:根服务器查询

如果递归解析器没有缓存的答案,它会查询 13 个根服务器集群之一(地址为 `a.root-servers.net` 至 `m.root-servers.net`)。这些不是 13 台独立的机器——它们是由 ICANN、Verisign、NASA 和 RIPE NCC 等组织运营的 13 个 Anycast 地址组,在全球拥有超过 1,500 个物理实例。

根服务器不返回 IP 地址。它返回一个转介——查询后缀的权威 TLD 服务器地址(例如 `.com`)。

第四步:TLD 服务器查询

递归解析器查询相应的 TLD 名称服务器。对于 `.com`,这由 Verisign 运营。TLD 服务器返回另一个转介——特定二级域名的权威名称服务器(例如 `ns1.example.com`)。

第五步:权威名称服务器查询

递归解析器查询权威名称服务器,该服务器持有 `example.com` 的区域文件。此服务器返回实际的 DNS 记录——例如,将 `www.example.com` 映射到 `93.184.216.34` 的 A 记录。

第六步:响应缓存和传递

递归解析器根据记录的 TTL(生存时间)值缓存响应,然后将 IP 地址返回给客户端的存根解析器,后者再将其传递给浏览器。浏览器随后向该 IP 地址打开 TCP 连接(或 HTTP/3 的 QUIC 连接)。

关键细节:TTL 值由域名所有者在权威服务器上设置。TTL 为 300 秒意味着记录可以被缓存 5 分钟后再重新查询。在迁移或事故响应期间,提前降低 TTL(至 60–300 秒)是最小化传播延迟的标准操作实践。

DNS 层次结构:架构与组件

DNS 命名空间结构为一棵倒置的树。树中的每个节点是一个标签,从叶节点到根节点的完整路径构成一个域名。`www.example.com.` 中的尾部点代表根。

第一层:根区域

根区域是 DNS 层次结构的顶点,由一个空标签(`.`)表示。它包含指向所有现有顶级域的 TLD 服务器的 NS 记录。根区域文件由 IANA(互联网号码分配机构)维护,目前包含超过 1,500 个 TLD 的委托。

根服务器在信任锚模型下运行——DNSSEC 验证链最终终止于根区域的密钥签名密钥(KSK),该密钥通过高度审计的仪式流程进行管理。

第二层:顶级域(TLD)

TLD 服务器对其后缀下注册的所有域名具有权威性。有几种类别:

TLD 类型示例运营商类型
通用 TLD(gTLD)`.com`、`.net`、`.org`、`.edu`ICANN 认可的注册机构
赞助 TLD(sTLD)`.gov`、`.mil`、`.edu`受限制的赞助组织
国家代码 TLD(ccTLD)`.uk`、`.de`、`.jp`、`.io`国家注册机构
新 gTLD`.app`、`.tech`、`.cloud`、`.shop`私人注册运营商
基础设施`.arpa`IANA(用于反向 DNS)

第三层:二级域(SLD)和子域

二级域是紧接 TLD 左侧的标签——`example.com` 中的 `example`。这是域名注册人购买和管理的单元。当您通过域名注册等服务注册域名时,您获得的是控制该 SLD 的 DNS 委托权。

子域是添加在 SLD 前面的标签(`www`、`mail`、`api`、`blog`)。它们完全在权威名称服务器的区域文件中配置——无需额外注册。子域深度理论上不受限制,但存在实际限制(FQDN 总长度不得超过 253 个字符;每个标签不得超过 63 个字符)。

第四层:权威名称服务器和区域文件

权威名称服务器是域名 DNS 记录的真实来源。它们以设置了 AA(权威答案)标志的响应回答查询。区域文件是包含域名所有资源记录的纯文本数据库。

每位管理员必须了解的关键 DNS 记录类型:

记录类型用途示例
A将主机名映射到 IPv4 地址`www 300 IN A 93.184.216.34`
AAAA将主机名映射到 IPv6 地址`www 300 IN AAAA 2606:2800:220:1:248:1893:25c8:1946`
CNAME指向另一个主机名的别名`blog CNAME www.example.com.`
MX带优先级的邮件交换器`@ 3600 IN MX 10 mail.example.com.`
NS将区域委托给名称服务器`@ IN NS ns1.example.com.`
TXT任意文本;用于 SPF、DKIM、DMARC`@ IN TXT "v=spf1 include:_spf.google.com ~all"`
SOA权威起始;区域元数据序列号、刷新、重试、过期、最小 TTL
SRV带端口和权重的服务位置`_sip._tcp IN SRV 10 20 5060 sip.example.com.`
PTR反向 DNS(IP 到主机名)用于 `in-addr.arpa` 区域
CAA限制哪些 CA 可以颁发 SSL 证书`@ IN CAA 0 issue "letsencrypt.org"`

CAA 记录值得特别关注:它们是一种经常被忽视的安全控制措施,可防止未经授权的证书颁发机构为您的域名颁发 SSL 证书。如果您的 CAA 记录未列出您正在使用的 CA,证书颁发将失败。

递归解析器与权威服务器:关键区别

这两个组件在架构上截然不同,新手经常将它们混淆。

属性递归解析器权威名称服务器
角色代表客户端进行查询回答关于其自身区域的查询
数据来源缓存 + 上游查询区域文件(本地数据库)
响应中的 AA 标志未设置已设置
示例ISP 解析器、8.8.8.8、1.1.1.1BIND、PowerDNS、NSD、Route 53
缓存响应是(遵守 TTL)否(提供权威数据)
部署者ISP、企业、公共提供商域名所有者、托管提供商

单台服务器技术上可以同时运行两种角色,但由于安全和性能方面的影响,在生产环境中强烈不建议这样做(开放解析器是 DNS 放大 DDoS 攻击的载体)。

DNSSEC:DNS 链的加密完整性

标准 DNS 没有内置身份验证——响应可以通过缓存投毒攻击(Kaminsky 攻击是最著名的)被伪造。DNSSEC(DNS 安全扩展)通过向 DNS 记录添加数字签名来解决这个问题。

DNSSEC 信任链的工作原理如下:

  1. 每个区域使用区域签名密钥(ZSK)对其记录进行签名
  2. ZSK 的公钥作为 DNSKEY 记录发布
  3. 父区域对子区域 DNSKEY 的哈希进行签名,创建 DS(委托签名者)记录
  4. 此链从根区域(最终信任锚)延伸到各个记录

DNSSEC 验证在递归解析器层面进行。验证器根据已发布的密钥检查签名;如果验证失败,解析器返回 `SERVFAIL`,而不是可能被投毒的响应。

操作注意事项:DNSSEC 显著增加了区域管理的复杂性。密钥轮换、签名过期以及与父区域的 DS 记录同步是常见的中断来源。在生产环境中启用 DNSSEC 之前,请务必使用 `dnsviz.net` 等工具测试 DNSSEC 配置。

托管环境中的 DNS:实际注意事项

传播与 TTL

“DNS 传播”是一个被广泛误用的术语。实际发生的是跨缓存的 TTL 过期。当您更改 A 记录时,已缓存旧值的解析器将继续提供该值,直到 TTL 过期。标准 DNS 中没有主动的”推送”机制。

为了最大限度地减少迁移期间的停机时间:

  1. 在更改前至少 24–48 小时将受影响记录的 TTL 降低到 300 秒(允许现有缓存过期)
  2. 进行 DNS 更改
  3. 确认新配置稳定后,将 TTL 恢复到生产值(3600–86400 秒)

分离视图 DNS

在同时拥有公共和私有网络段的环境中——这在 VPS 托管独立服务器上很常见——分离视图 DNS(也称为分脑 DNS)根据查询来源提供不同的答案。内部客户端将 `db.example.com` 解析为私有 RFC 1918 地址;外部客户端收到公共 IP 或负载均衡器地址。这在 BIND 中使用 `view` 指令实现,或在 PowerDNS 中通过 Lua 脚本实现。

反向 DNS(PTR 记录)

反向 DNS 使用 `in-addr.arpa`(IPv4)或 `ip6.arpa`(IPv6)区域将 IP 地址映射回主机名。PTR 记录对以下方面至关重要:

  • 电子邮件送达率——许多接收邮件服务器会拒绝或严重惩罚来自没有匹配 PTR 记录的 IP 的邮件
  • 安全日志记录——用主机名丰富防火墙和访问日志
  • 合规性——某些监管框架要求反向 DNS 用于审计跟踪

如果您正在运行电子邮件托管设置或自管理邮件服务器,请确保您的托管提供商已为您服务器的 IP 地址配置了 PTR 记录。

DNS 与 SSL 证书配置

DNS-01 ACME 挑战(由 Let’s Encrypt 和其他 CA 使用)需要向您域名的区域写入特定的 TXT 记录以证明域名控制权。此方法是通配符证书颁发所必需的。自动化证书管理(通过 `certbot` 或 `acme.sh`)需要 API 访问您的 DNS 提供商,以便以编程方式创建和删除这些 TXT 记录。

常见 DNS 故障模式与诊断

了解故障模式是将熟练管理员与仅仅遵循教程的人区分开来的关键。

NXDOMAIN——查询的名称在区域中不存在。常见原因:记录名称中的拼写错误、区域未加载,或委托指向错误的名称服务器。

SERVFAIL——服务器无法完成查询。常见原因:DNSSEC 验证失败、权威服务器不可达,或区域文件损坏(SOA 或 NS 记录中的语法错误)。

过期缓存——解析器正在提供过期或过时的记录。使用 `dig +nocache` 或直接查询权威服务器以绕过解析器缓存。

无效委托——父区域的 NS 记录指向实际上对该区域没有权威性的名称服务器(没有加载该区域)。这是一种导致间歇性解析失败的静默故障模式。

基本诊断命令:

“`bash

Query a specific resolver for an A record

dig @8.8.8.8 www.example.com A

Trace the full resolution path from root

dig +trace www.example.com

Check authoritative answer directly

dig @ns1.example.com www.example.com A +norec

Verify reverse DNS

dig -x 93.184.216.34

Check DNSSEC chain

dig www.example.com A +dnssec

Inspect SOA record (useful for checking serial after zone update)

dig example.com SOA

“`

DNS 性能优化

  • Anycast 部署——通过 Anycast 部署的权威服务器从地理位置最近的节点响应,减少查询延迟
  • TTL 调优——较高的 TTL(3600–86400 秒)减少解析器负载并提高稳定记录的缓存命中率;较低的 TTL(60–300 秒)为动态基础设施实现更快的故障转移
  • 负缓存——NXDOMAIN 响应在 SOA 最小 TTL 字段指定的持续时间内被缓存;过长的负 TTL 会延迟从配置错误中恢复
  • EDNS 客户端子网(ECS)——允许递归解析器将客户端 IP 的一部分转发给权威服务器,实现更准确的地理路由决策(以一定隐私为代价)
  • DNS over HTTPS(DoH)/ DNS over TLS(DoT)——加密传输中的 DNS 查询,防止 ISP 级别的拦截和篡改;对于注重隐私的部署越来越重要

决策矩阵:选择正确的 DNS 配置

场景推荐方法
简单网站,单台服务器A 记录指向服务器 IP;低复杂度
多区域 Web 应用程序通过托管 DNS 提供商使用 Geo-DNS 或加权 CNAME
自托管邮件服务器A + MX + PTR + SPF/DKIM/DMARC TXT 记录必不可少
通配符 SSL 证书DNS-01 ACME 挑战;需要 DNS API 访问
内部服务(私有网络)带内部区域的分离视图 DNS
高安全性域名DNSSEC + CAA 记录 + DMARC 策略
快速故障转移需求关键记录 TTL <= 300 秒;基于健康检查的路由
防止子域接管定期审计悬空 CNAME 记录

技术要点总结

  • DNS 解析是一个多步骤委托链:存根解析器 > 递归解析器 > 根 > TLD > 权威服务器
  • 13 个根服务器集群(不是单台机器)使用 Anycast 在全球提供超过 1,500 个物理实例
  • TTL 控制缓存持续时间——”传播”只是等待缓存过期,而不是主动推送
  • 权威服务器持有区域文件;递归解析器缓存和转发——切勿混淆这两种角色
  • DNSSEC 添加加密验证,但引入了操作复杂性;密钥轮换和 DS 同步是常见故障点
  • PTR 记录对于邮件服务器部署和安全日志记录不可或缺
  • CAA 记录限制哪些证书颁发机构可以为您的域名颁发 SSL 证书
  • 无效委托和过期负缓存是最隐蔽的 DNS 故障模式之一
  • 始终使用 `dig +trace` 从根开始诊断解析问题,而不是依赖解析器级别的输出

常见问题解答

递归解析器和权威 DNS 服务器有什么区别?

递归解析器代表客户端查询 DNS 层次结构并缓存响应。权威 DNS 服务器持有域名的实际区域文件,并以设置了 AA 标志的确定性答案进行响应。它们是架构上独立的角色,尽管技术上单个守护进程可以同时执行两者。

为什么更改记录后 DNS 传播需要这么长时间?

DNS 不会以主动方式”传播”。解析器在记录上设置的 TTL 持续时间内缓存记录。如果您的 A 记录的 TTL 为 86400 秒(24 小时),缓存了旧值的解析器将继续提供该值长达 24 小时。为了最大限度地减少这种情况,请在进行更改前至少 24 小时将 TTL 降低到 300 秒。

什么导致 SERVFAIL 响应,如何修复?

SERVFAIL 最常见的原因是 DNSSEC 验证失败、权威名称服务器不可达,或区域文件损坏/格式错误。使用 `dig +dnssec` 检查 DNSSEC 问题,验证您的权威服务器是否可达并正在响应,并使用 `named-checkzone` 验证区域文件语法。

我的域名需要 DNSSEC 吗?

对于处理敏感交易、电子邮件基础设施或金融服务的域名,强烈建议使用 DNSSEC。它可以防止缓存投毒攻击。但是,它增加了操作开销——密钥轮换和 DS 记录管理需要仔细的自动化。对于大多数生产域名,安全收益超过了复杂性。

功能性邮件服务器需要哪些 DNS 记录?

至少需要:指向邮件服务器主机名的 MX 记录、解析该主机名的 A 记录、服务器 IP 上的 PTR 记录(由您的托管提供商配置),以及 SPF、DKIM 和 DMARC 的 TXT 记录。缺少其中任何一项都将导致送达失败或被接收邮件服务器直接拒绝。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用