根域名能直接 CNAME 到别的域名,基本是句玩笑话,实际配置里很多根域名写的都是 A 记录。在 AWS 上,可以用 Route 53 的 Alias 记录。
如果 A 记录直接写 ALB 的 IP,ALB 的 IP 一换就完蛋,所以一般在前面套一个 NLB,NLB 可以绑固定的弹性 IP。
规则出自哪里
这是 IETF(互联网工程任务组)在 DNS 标准里定下的:
- RFC 1034(1987 年,DNS 发明人 Paul Mockapetris 写的)第 3.6.2 节:一个名字上有了 CNAME,就不能再有任何其他记录。
- RFC 1035(同年):每个域名的根(zone apex)必须有 SOA 和 NS 记录,用来声明这个域名归哪台 DNS 服务器管。
- RFC 2181(1997 年)第 10.1 节:又重申了一遍,CNAME 不能和其他记录共存。
两条规则合起来
根域名一定有 SOA 和 NS,而有 CNAME 的名字不能有其他记录,所以根域名一定不能写 CNAME。
没有哪条规则是专门针对 @ 的,这是两条规则合起来推出的结果。
后来的补救
2023 年的 RFC 9460 新增了 HTTPS/SVCB 记录,可以在根域名上合法地实现“指向另一个域名”。
不过浏览器和 DNS 服务商的支持还不完整,GoDaddy 也不支持,所以现在实际用的还是 Route 53 Alias、Cloudflare CNAME 拉平这类服务商自己的方案。
本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 镜湖!
评论

