网站直接指向服务器时常用 A 或 AAAA;接入 CDN、对象存储和托管平台时常用 CNAME;TXT 多用于域名归属和邮件策略;CAA 用来限制证书颁发机构。
A、AAAA、CNAME、TXT、CAA 有什么区别
| 记录 | 记录值 | 常见用途 | 容易踩的坑 |
|---|---|---|---|
| A | IPv4 地址 | 域名指向 IPv4 服务器 | 服务器换 IP 后忘记更新 |
| AAAA | IPv6 地址 | 域名指向 IPv6 服务器 | 服务只支持 IPv4,却留下可解析的 AAAA |
| CNAME | 另一个域名 | CDN、托管平台、对象存储 | 与同名 A、TXT、MX 等记录冲突 |
| TXT | 一段文本 | 域名归属、SPF、DKIM、DMARC | 主机名重复拼接,或复制值时多了空格 |
| CAA | CA 标识 | 限制哪些机构可以签发证书 | 漏掉正在使用的 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
根域 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 会阻断签发或续期。