fangpsh's blog

ANAME、CNAME、DNAME

CNAME 很常见,一般人都很熟悉,将一个域名映射到另外一个域名。但是CNAME 有个限制,顶级域名(apex domain)不建议设置CNAME,因为会和MX 记录冲突,详细解释:为什么裸域名不可以设置 CNAME?#26

RFC1912:2.4 CNAME records

A CNAME record is not allowed to coexist with any other data. In other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record...

所以就诞生了ANAME,有些DNS 服务商叫做ALIAS,可以在apex domain 上实现类似CNAME 效果。第一次见到这个,是在配置Github Pages

目前只有一些国外的DNS 服务商支持:

Do you support ALIAS or ANAME DNS records?

  • CloudFlare
  • DNSMadeEasy
  • DNSimple
  • PointDNS
  • Amazon Route 53 (only for hosting on AWS)

不过这是非标准的实现,生产环境还是少用为好。

DNAME

除了ANAME,CNAME,还有一个DNAME。DNAME 和CNAME 的区别是,CNAME 只是映射一个子域名,DNAME 映射的是整个子域名空间。

举个例子:

aaa.example.com CNAME bbb.example.org

还可以添加记录

a1.aaa.example.com CNAME  b1.bbb.example.org

aaa 的CNAME 只是表示把aaa这个子域名映射过去,并不影响*.aaa。但是如果DNAME 的话,就不一样了

aaa.example.com CNAME bbb.example.org

这个时候你再解析a1.aaa.example.com,得到的实际是a1.bbb.example.org 的结果。因为aaa.example.com 节点包括其子节点都映射到了bbb.example.org

更详细的例子可以参考台湾网友的这篇文章:DNS的CNAME/DNAME傻傻分不清楚

另外DNAME 记录,国内的DNS 服务商也几乎都不支持╮(╯▽╰)╭ 。