首页/网络/协议速查/CNAME 链与跟随解析
DNS 与域名解析60 条

CNAME 链与跟随解析

CNAME 让解析器换名继续追:链上每一跳都消耗一次查询与 RTT,出现环或过长链会让解析超时;CNAME 不能与其他记录共存于同一名字。

协议速查网络更新于 2026-10-13

CNAME 是什么

CNAME 是别名记录:它告诉解析器「这个名字等同于另一个名字」,解析器于是换名继续追下去。链上每一跳都要消耗一次查询与一个往返,链越长越慢;出现环或者链过长时,递归器最终会返回失败。

两条硬约束

第一,同一个名字上不能同时存在 CNAME 与其他类型的记录(RFC 1034 §3.6.2),违反后部分解析器会直接丢弃这个名字下的全部记录。第二,区域顶点通常不使用 CNAME,需要把顶点指向外部地址时要靠展平一类的机制(RFC 2181 §10.1 也强调别名的唯一性)。

基本信息

规范RFC 1034 §3.6.2,唯一性见 RFC 2181 §10.1
共存限制CNAME 必须唯一,不可与其它类型记录共存
区域顶点一般不用 CNAME,需要别名展平机制替代
查询成本每跳一次查询,递归器通常限制最大跳数

典型使用场景

  • 把站点指向内容分发网络或托管平台,由对方随时变更真实地址
  • 迁移期间做过渡:旧名字继续指向新名字
  • 排查「解析变慢或失败」:先数别名的跳数
  • 配置邮件相关记录时避开与别名冲突

手动跟随一条链

手动跟随一条链
dig www.example.com CNAME +short   # 看别名指向哪里
dig +short www.example.com          # 跟随到最终地址
dig a.example.com CNAME +short      # 检查是否存在互相指向的环
dig b.example.com CNAME +short

追链要看什么

观察点正常表现异常表现
跳数一到两跳多跳会逐级累积延迟
目标可解析目标名能正常解析目标不存在则整条链失败
共存记录同一名字下没有其它类型共存记录会被部分解析器整体丢弃
是否成环无环互为别名导致解析直接失败
切换别名目标时,别忘了目标名本身要可解析:整条链建立在最后一跳上,最后一跳不可解析就等于解析全面失败。
对外的别名通常只改一处、由服务方维护目标:这样迁移由对方负责,你只需要保证自己的别名指向正确。
邮件相关的校验记录常放在特定前缀的名字下,若该名字同时被配成别名,就可能触发共存冲突:配置前先确认这个名字没有其它记录。

易错点

  • 同一名字同时配置 CNAME 与文本记录:违反协议,部分解析器直接丢弃全部记录
  • 在区域顶点使用 CNAME:多数解析器不接受,应改用展平类机制
  • 别名链过长或成环:解析变慢甚至失败,而且排查时容易只看第一跳
  • 切换别名目标时未确认目标可解析:整站解析立刻失败
  • 为了省事把别名指向另一个别名:跳数增加,缓存与生效时间也变得更难预估

数据来源与参考

  • RFC 1034 §3.6.2
  • RFC 2181 §10.1

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌