DNS 原理与配置:域名解析、记录类型与 CDN
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。 - 子域:在二级域前面额外添加的层级,如
www、blog、api。
例如 www.blog.example.com. (末尾的 . 代表根域,日常使用中可省略):
com是顶级域example是二级域blog是三级域www是四级域(或称为主机记录)
域名解析的完整流程
当你在浏览器输入 www.example.com 并回车,计算机需要进行 DNS 查询,主要经历以下步骤:
-
浏览器/系统缓存检查
先检查本地 hosts 文件、浏览器 DNS 缓存以及操作系统缓存中是否已有对应 IP。如有则直接使用。 -
递归查询(向本地 DNS 服务器发起)
若本地无缓存,请求会被发送至网络配置中指定的 DNS 递归解析器(通常由 ISP 或公共 DNS 服务提供,如8.8.8.8)。 -
递归解析器的迭代查询过程
递归解析器代替你的电脑进行这一系列“追问”:- 向根域名服务器询问
www.example.com,根服务器返回.com顶级域的权威 DNS 服务器地址。 - 向
.com服务器的权威 DNS 询问,返回example.com域的权威 DNS 服务器地址。 - 向
example.com的权威 DNS 服务器询问www.example.com,最终返回该主机对应的 IP 地址(或 CNAME 等记录)。
- 向根域名服务器询问
-
返回结果并缓存
递归解析器将 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 记录(将域名指向你的服务器)
- 登录域名注册商控制台,进入 DNS 解析设置页面。
- 点击“添加记录”。
- 记录类型:A
- 主机记录:填写
@(代表根域)或www(代表 www 子域) - 记录值:输入你服务器的 IPv4 地址,如
123.45.67.89 - TTL:默认 600 秒
- 保存,等待 DNS 全球生效(通常在数分钟至 48 小时内)。
配置 CNAME 实现子域名 CDN 加速
假设已开通 CDN 并得到 CNAME 地址 cdn.example.com.cdnyun.net。
- 在 CDN 控制台添加加速域名
assets.yourdomain.com,源站填写你的网站服务器 IP 或对象存储域名。 - 回到 DNS 解析面板,添加记录:
- 记录类型:CNAME
- 主机记录:
assets - 记录值:
cdn.example.com.cdnyun.net - TTL:600
- 保存后,可通过命令行工具验证(见下文)。
使用 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 高效率地分发给全球用户。