网站直接指向服务器时常用 A 或 AAAA;接入 CDN、对象存储和托管平台时常用 CNAME;TXT 多用于域名归属和邮件策略;CAA 用来限制证书颁发机构。

A、AAAA、CNAME、TXT 和 CAA 五种 DNS 记录用途的关系图
A、AAAA 和 CNAME 会影响访问流量去哪里;TXT 与 CAA 保存验证、策略或证书限制。

A、AAAA、CNAME、TXT、CAA 有什么区别

记录记录值常见用途容易踩的坑
AIPv4 地址域名指向 IPv4 服务器服务器换 IP 后忘记更新
AAAAIPv6 地址域名指向 IPv6 服务器服务只支持 IPv4,却留下可解析的 AAAA
CNAME另一个域名CDN、托管平台、对象存储与同名 A、TXT、MX 等记录冲突
TXT一段文本域名归属、SPF、DKIM、DMARC主机名重复拼接,或复制值时多了空格
CAACA 标识限制哪些机构可以签发证书漏掉正在使用的 CA,导致续期失败

不同控制台会把 DNS 名称标成“主机记录”“名称”或“Name”。每条记录都包含名称、类型、值和 TTL。Google Cloud DNS 的记录概览(在新标签页打开)列出了常见用途;A、CNAME 等基础语义见 RFC 1034(在新标签页打开),AAAA 见 RFC 3596(在新标签页打开),CAA 见 RFC 8659(在新标签页打开)

A:直接填写 IPv4 地址

A 记录适合有稳定公网 IPv4 的服务器:

example.com.      300  IN  A  203.0.113.10
www.example.com.  300  IN  A  203.0.113.10

203.0.113.10 是文档示例地址,实际配置要换成自己的入口 IP。查看结果:

dig +short example.com A

服务器公网 IP 经常变化时,不要依赖手工修改 A 记录。固定负载均衡入口、云平台提供的别名能力,或可靠的动态 DNS 会更合适。

AAAA:提供 IPv6 入口

AAAA 保存 IPv6 地址:

example.com.  300  IN  AAAA  2001:db8::10

只有入口服务、防火墙、反向代理和监控都能处理 IPv6 时,才应该发布 AAAA。错误的 AAAA 很隐蔽:支持 IPv6 的网络会优先尝试一个不可用地址,而只走 IPv4 的网络仍然正常。

dig +short example.com AAAA
curl -6 -I https://example.com/

CNAME:让服务商维护后面的地址

CNAME 的值是另一个域名,不是 IP。CDN 分配了 example.cdn-provider.net 后,可以这样连接:

images.example.com.  300  IN  CNAME  example.cdn-provider.net.

访问 images.example.com 时,解析器会继续查询服务商域名对应的地址。服务商以后调整边缘节点,不需要你逐个修改 IP。

RFC 1034(在新标签页打开)规定了这项限制:标准 CNAME 所在的名称不能同时承载其他记录。

同一个域名下 CNAME 与 A、TXT 冲突,以及拆分子域后的正确配置方式
需要 CNAME、TXT 和邮件记录同时存在时,用不同名称承担不同用途。

根域为什么不能直接填普通 CNAME

根域 example.com 必须保留 SOA 和 NS,普通 CNAME 又不能和其他记录共存,因此标准 DNS 不允许根域直接使用 CNAME。

有些服务商提供 ALIAS、ANAME 或 CNAME Flattening,可以让根域获得类似别名的效果。这些是服务商实现的扩展能力,TTL、DNSSEC 和故障行为要以对应文档为准。

TXT:域名归属和邮件策略都在这里

第三方平台要求证明域名归属时,通常会给出一条不可修改的 TXT:

verification.example.com.  300  IN  TXT  "verify_abc123"

邮件服务的 SPF、DKIM 和 DMARC 也使用 TXT。同一个名称可以有多条 TXT,但每一条值都要完整保留。

dig +short verification.example.com TXT
dig +short _dmarc.example.com TXT

平台一直提示“未通过”时,查询最终 DNS 应答,并检查:

  • 控制台是否自动补了根域,导致名称变成 verification.example.com.example.com
  • 复制时是否多了空格、中文引号或换行;
  • 记录类型是否误选成 CNAME;
  • 查询名称是否与平台要求完全一致;
  • 之前的 NXDOMAIN 是否仍在负缓存中。

CAA:限制谁能签发证书

CAA 可以允许某个 CA 签发普通证书或通配符证书:

example.com.  300  IN  CAA  0 issue "letsencrypt.org"
example.com.  300  IN  CAA  0 issuewild "letsencrypt.org"

没有 CAA 时,满足域名验证条件的 CA 可以签发证书。加上 CAA 后,签发机构必须先确认自己被允许。

dig +short example.com CAA

配置前要确认当前证书、备用证书和 CDN 托管证书分别由谁签发。漏掉实际使用的 CA 会导致后续签发或续期失败。

TTL 改小,不会让旧缓存立刻消失

TTL 表示解析器可以缓存应答多久。原记录的 TTL 是 3600 秒时,即使现在把它改成 300 秒,已经缓存的旧结果仍可能继续保留到原来的 3600 秒结束。

准备迁移入口时,可以提前一个旧 TTL 周期把数值调低,等旧缓存自然过期后再修改记录。稳定一段时间,再恢复正常 TTL。例如原 TTL 为 3600 秒,应至少提前 1 小时降低 TTL;临切换前才调低,不会清除已经存在的旧缓存。

不同网络返回不同地址,也不一定是所谓的“全球传播中”。递归 DNS、本机代理、浏览器 Secure DNS、hosts 文件和运营商网络都会影响结果。

改完记录,怎样确认已经生效

# 当前权威 DNS 由谁负责
dig +short example.com NS

# 本机与公共解析器分别看到了什么
dig example.com A
dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com A

# CDN 或托管平台的别名是否正确
dig +short images.example.com CNAME

# TXT 与 CAA 是否按原值返回
dig +short verification.example.com TXT
dig +short example.com CAA

DNS 查询正确,只能说明域名已经指到目标入口。网站是否能打开,还要继续检查 HTTPS、响应内容和缓存状态;完整链路见 一个域名请求经过哪些环节

常见问题

A 记录和 CNAME 有什么区别?

A 记录直接保存 IPv4 地址;CNAME 保存另一个域名,由解析器继续查找目标地址。固定服务器入口通常用 A,CDN 和托管平台更常提供 CNAME。

CNAME 和 A 可以使用同一个主机名吗?

通常不可以。标准 CNAME 所在名称不能再同时拥有 A、AAAA、MX、TXT 等记录。需要共存时,应该拆成不同子域。

根域可以配置 CNAME 吗?

标准 DNS 不允许根域使用普通 CNAME,因为根域必须同时保留 SOA 和 NS。服务商提供的 ALIAS、ANAME 或 CNAME Flattening 是替代能力。

DNS 修改后为什么没有立即生效?

旧应答可能仍在递归解析器、操作系统或浏览器缓存中,NXDOMAIN 也可能被负缓存。等待原 TTL 的同时,还要排除本机代理、Secure DNS 和 hosts 文件影响。

CAA 是必须的吗?

不是。需要收紧证书签发范围时再配置,并把当前 CA、备用 CA 和通配符证书需求一起列全。漏掉实际使用的 CA 会阻断签发或续期。