DNS 原理与配置:域名解析、记录类型与 CDN

FreeGuideOnline 最新 2026-06-13

DNS 原理与配置指南:域名解析、记录类型与 CDN

1. DNS 基础与域名解析过程

什么是 DNS?

DNS(Domain Name System,域名系统)是互联网的“电话簿”。它负责将人类易记的域名(例如 www.example.com)转换成机器可读的 IP 地址(如 93.184.216.34)。没有 DNS,我们只能通过背诵 IP 地址来访问网站。

域名结构

域名采用层次树状结构,从右向左逐级细化,以点号分隔:

  • 根域:最顶层,用隐式的 . 表示,由全球 13 组根服务器管理。
  • 顶级域(TLD):如 .com.org.cn.io
  • 二级域:由注册人购买的域名主体部分,如 example
  • 子域:在二级域前面额外添加的层级,如 wwwblogapi

例如 www.blog.example.com. (末尾的 . 代表根域,日常使用中可省略):

  • com 是顶级域
  • example 是二级域
  • blog 是三级域
  • www 是四级域(或称为主机记录)

域名解析的完整流程

当你在浏览器输入 www.example.com 并回车,计算机需要进行 DNS 查询,主要经历以下步骤:

  1. 浏览器/系统缓存检查
    先检查本地 hosts 文件、浏览器 DNS 缓存以及操作系统缓存中是否已有对应 IP。如有则直接使用。

  2. 递归查询(向本地 DNS 服务器发起)
    若本地无缓存,请求会被发送至网络配置中指定的 DNS 递归解析器(通常由 ISP 或公共 DNS 服务提供,如 8.8.8.8)。

  3. 递归解析器的迭代查询过程
    递归解析器代替你的电脑进行这一系列“追问”:

    • 向根域名服务器询问 www.example.com,根服务器返回 .com 顶级域的权威 DNS 服务器地址。
    • .com 服务器的权威 DNS 询问,返回 example.com 域的权威 DNS 服务器地址。
    • example.com 的权威 DNS 服务器询问 www.example.com,最终返回该主机对应的 IP 地址(或 CNAME 等记录)。
  4. 返回结果并缓存
    递归解析器将 IP 地址返回给你的电脑,同时根据记录的 TTL(生存时间)将结果缓存起来,后续查询直接使用缓存,直至过期。

递归查询 vs 迭代查询:客户端向递归解析器发起的是递归查询(要求对方给出最终答案),而递归解析器向各级权威服务器发起的是迭代查询(对方仅返回“下一步该问谁”)。

2. 常见 DNS 记录类型详解

A / AAAA 记录

  • A 记录:将域名指向一个 IPv4 地址。
    例:www.example.com. IN A 93.184.216.34
  • AAAA 记录:将域名指向一个 IPv6 地址。
    例:www.example.com. IN AAAA 2606:2800:220:1:248:1893:25c8:1946

CNAME 记录

CNAME(Canonical Name)记录用于将一个域名指向另一个域名(别名),由另一个域名提供最终的 IP 地址。
常用于 CDN 接入、将多个域名指向同一站点或规避 IP 频繁变更。
例:www.example.com. IN CNAME example.cdn.cloudflare.net.
访问 www.example.com 时,解析器会继续查询 example.cdn.cloudflare.net 的 A/AAAA 记录。

注意:CNAME 不能与同名的其他记录共存(即根域 example.com 自身不能使用 CNAME),且逐级 CNAME 会增加解析延迟。

MX 记录

MX(Mail Exchange)记录指定处理该域名电子邮件的服务器地址及优先级。
例:

example.com.  IN  MX  10  mail1.example.com.
example.com.  IN  MX  20  mail2.example.com.

数字越小优先级越高,邮件会先尝试投递给优先级更高的服务器。

TXT 记录

TXT 记录用于存放任意文本信息,通常用于域名验证、SPF(反垃圾邮件)、DKIM 签名等。
例:

example.com.  IN  TXT  "v=spf1 include:_spf.google.com ~all"

SPF 记录现在更推荐放在专门的 SPF 类型记录中(但 TXT 仍被广泛兼容)。

NS 记录

NS(Name Server)记录指定该域名的权威 DNS 服务器。
只有 NS 记录配置正确,其他记录才能被正常查询。
例:

example.com.  IN  NS  ns1.dnsprovider.com.
example.com.  IN  NS  ns2.dnsprovider.com.

SOA 记录

SOA(Start of Authority)记录是域名的权威信息声明,包含主 DNS 服务器、管理员邮箱、序列号、刷新间隔等参数。它是每个域名的第一条记录,由 DNS 管理商自动生成,一般无需手动修改。
例:

example.com.  IN  SOA  ns1.dnsprovider.com. admin.example.com. (
        2024062001 ; serial
        7200       ; refresh
        3600       ; retry
        1209600    ; expire
        86400      ; minimum TTL
)

其他常用记录

  • SRV 记录:定义特定服务的服务器地址和端口,常用于 VoIP、即时通信等。
  • CAA 记录:指定允许哪些证书颁发机构(CA)为该域名签发 SSL/TLS 证书,提升安全性。
  • PTR 记录:反向解析记录,将 IP 地址解析为域名,主要用于邮件服务器反查。

3. DNS 与 CDN 的联动

CDN 加速原理

CDN(内容分发网络)将网站静态资源(图片、CSS、JS 等)缓存到全球各地边缘节点上。当用户访问时,由离用户最近的节点直接返回内容,降低延迟。
当你的域名接入了 CDN,访问流程变为:
用户 → 本地 DNS → 权威 DNS(返回 CDN 厂商的 CNAME) → CDN 智能调度系统 → 返回距离用户最近的 CDN 节点 IP → 用户与节点建立连接。

如何通过 DNS 将流量导向 CDN

绝大多数 CDN 服务采用 CNAME 接入方式:你只需将需要加速的域名(如 cdn.example.com)的 DNS 记录类型设为 CNAME,并指向 CDN 厂商分配给你的那个专属域名(例如 xxxxx.cdn.qiniu.com)。后续的所有流量调度与节点选择均由 CDN 依据用户地理位置、ISP 等自动完成。

CNAME 方式接入 CDN 配置示例

假设你在 CDN 服务商处添加了加速域名 static.example.com,服务商提供给你的 CNAME 值是 example.kcdn.cn. 在你的 DNS 管理面板做如下配置:

主机记录:static
记录类型:CNAME
记录值:example.kcdn.cn
TTL:600(建议较短以便快速生效)

配置完成后:

  • 用户访问 static.example.com/image.png
  • DNS 解析到 example.kcdn.cn
  • CDN 返回最近的节点 IP
  • 节点若已有缓存则直接返回,否则回源到你的源站拉取内容并缓存。

根域接入:部分 CDN 也支持根域(example.com)通过 A 记录或 NS 方式接入,仍可实现加速,但技术细节视厂商而定。普遍推荐将根域做 301 跳转到 www 子域,并为 www 子域配置 CNAME CDN 加速。

4. 动手实践:配置 DNS 记录

以下操作以阿里云(万网)域名面板为例,其他平台逻辑类似。

添加一条 A 记录(将域名指向你的服务器)

  1. 登录域名注册商控制台,进入 DNS 解析设置页面。
  2. 点击“添加记录”。
    • 记录类型:A
    • 主机记录:填写 @(代表根域)或 www(代表 www 子域)
    • 记录值:输入你服务器的 IPv4 地址,如 123.45.67.89
    • TTL:默认 600 秒
  3. 保存,等待 DNS 全球生效(通常在数分钟至 48 小时内)。

配置 CNAME 实现子域名 CDN 加速

假设已开通 CDN 并得到 CNAME 地址 cdn.example.com.cdnyun.net

  1. 在 CDN 控制台添加加速域名 assets.yourdomain.com,源站填写你的网站服务器 IP 或对象存储域名。
  2. 回到 DNS 解析面板,添加记录:
    • 记录类型:CNAME
    • 主机记录assets
    • 记录值cdn.example.com.cdnyun.net
    • TTL:600
  3. 保存后,可通过命令行工具验证(见下文)。

使用 dig / nslookup 验证记录

配置完成后,可用命令行工具检查 DNS 生效情况。

使用 dig(Linux/macOS)

# 查询 A 记录
dig www.example.com A

# 查询 CNAME 记录
dig assets.yourdomain.com CNAME

# 添加 +short 仅显示结果
dig +short www.example.com

使用 nslookup(Windows/macOS/Linux)

nslookup -type=A www.example.com
nslookup -type=CNAME assets.yourdomain.com

正常情况下,输出会显示你配置的记录值。如果刚修改完仍显示旧值,可等待缓存过期或更换 DNS 服务器(如 8.8.8.8)再次查询。

5. 常见问题与排错

Q:更改 DNS 后多久生效?
A:受 TTL 控制,最长可能需要上一级缓存过期时间(通常 10 分钟至 48 小时)。可先将 TTL 改小,在变更前提前降低。

Q:提示“CNAME 和 其他记录冲突”
A:RFC 规定,同一条主机记录下不能同时存在 CNAME 和其他记录类型。例如,你不能给根域设置 CNAME 的同时还保留 MX 记录。解决方案:使用子域做 CNAME,根域用 A 记录并结合 URL 转发。

Q:CDN 配置后网站显示 404 / 回源失败
A:首先确认源站是否可正常访问(IP直连测试);其次检查 CDN 的回源 Host 配置是否正确,可能需要设置为源站实际识别的域名。

Q:dig 返回的结果与预期不符
A:尝试指定公共 DNS 查询 dig @8.8.8.8 www.example.com,排除本地缓存或 ISP DNS 劫持。也可使用在线 DNS 查询工具进行多地验证。

6. 总结

DNS 是互联网基础设施的基石,理解其解析流程和记录类型是运维和开发的必备技能。核心要点回顾:

  • 解析过程:本地缓存→递归解析器→根→顶级域→权威 DNS,层层迭代。
  • A 记录直接指向 IP,CNAME 指向另一个域名(灵活适用于 CDN、高可用切换)。
  • CDN 加速中最常见的操作就是设置 CNAME 记录,将域名解析到 CDN 厂商提供的域名,从而利用智能调度与边缘缓存。
  • 动手时务必注意记录冲突、TTL 影响和生效延迟,并用 dig/nslookup 快速排错。

掌握了这些,你就可以自如地为自己的项目配置域名解析,并将静态资源通过 CDN 高效率地分发给全球用户。