一条 CNAME 链能看出什么:认 CDN 厂商,以及根域名为什么不能 CNAME

· 约 5 分钟 🧭 域名查 IP

查 github.com,只看到几个 IP。查 www.taobao.com,看到一条链:

www.taobao.com
  → www.taobao.com.danuoyi.tbcache.com
    → 一组 IP

再查 taobao.com,结果又和 www.taobao.com 完全不同。

这三种结果的差别不是随机的,每一种都对应着一个具体的技术决定。读懂 CNAME,能从一次解析里看出对方的部署方式。

CNAME 是什么

A 记录说「这个名字对应这个 IP」,CNAME 记录说的是另一件事:

这个名字实际上是另一个名字,去查那个。

解析器遇到 CNAME 会自动跟过去,一级级跟到出现 A 或 AAAA 记录为止。所以你在浏览器里访问一个挂了 CNAME 的域名,中间这几跳是完全透明的。

它的价值在于解耦:你的域名指向 CDN 的调度域名,CDN 想换节点、换机房、扩容,改自己那边就行,你的 DNS 记录一个字都不用动。

为什么 CNAME 比 IP 更有信息量

拿到一组 IP,查归属地最多告诉你「浙江省·移动」。而 CNAME 的后缀是厂商指纹——CDN 厂商必须用自己的域名做调度,这个后缀藏不住。

几个最常见的:

CNAME 后缀厂商
kunlunaq.com / alicdn.com阿里云 CDN
tencent-cloud.net / cdntip.com腾讯云 CDN
eo.dnse0.com腾讯云 EdgeOne
cdn.cloudflare.netCloudflare
akamaiedge.net / edgekey.netAkamai
fastly.netFastly
cloudfront.netAWS CloudFront
wscloudcdn.com网宿科技

(域名查 IP 页面上有完整的对照表并会自动比对,这里只列最常撞见的几个。认不出后缀时它会把原始 CNAME 链完整列出来。)

大厂自建 CDN 则会指向自家域名,得靠认:danuoyi.tbcache.com 是淘宝,bilicdn1.com 是 B 站。

一条多级链,各级分别是谁

典型的三级结构长这样:

shop.example.com                      ← 你的业务域名
  → example.com.w.kunlunaq.com        ← CDN 的调度域,决定给哪个区域
    → xxx.kunlunar.com                ← 节点域
      → 121.x.x.x / 121.x.x.y         ← 最终的边缘节点 IP

读这条链能看出三件事:

  1. 用的是谁家 —— 看后缀
  2. 接入方式 —— 有的厂商会在调度域里带上产品线标识,能区分是普通 CDN 还是全站加速、安全加速
  3. 故障面 —— 链条跨了几家服务商,故障面就是几家的叠加。任意一级的权威 DNS 出问题,整条链都解析不出来

根域名为什么不能 CNAME

这是所有 DNS 配置问题里最常见的一个,而原因来自一条很老的规则:

一个名字上如果有 CNAME 记录,就不能再有任何其他记录。

(RFC 1034 定的,因为 CNAME 的语义是「这个名字整体等价于那个名字」,同时挂别的记录会自相矛盾。)

而根域名——也就是不带 www 的 example.com——身上必然有两条记录:

  • SOA:这个区的起始授权信息
  • NS:这个区由哪些权威服务器负责

这两条是区文件的必需项,删不掉。于是结论就出来了:根域名上放不下 CNAME。

同一条规则还有一个常见的连带后果:挂了 CNAME 的名字也不能再配 MX 或 TXT。想给 mail.example.com 同时配 CNAME 和 MX,会被 DNS 服务商拒绝或者被解析器忽略其中之一。

三条变通路线

1. 根域名放 A 记录,www 放 CNAME

最传统的做法。代价是根域名的 IP 写死了,CDN 换节点你得跟着改。也是「查 example.com 和 www.example.com 结果完全不同」的主要来源。

2. 根域名 301 跳到 www

根域名只负责跳转,实际服务全在 www 上。干净,但多了一次跳转的往返。

3. ALIAS / ANAME / CNAME 拉平

各家 DNS 服务商提供的一种特殊记录类型(叫法不一,Route 53 叫 ALIAS,有的叫 ANAME,Cloudflare 叫 CNAME flattening)。

它的原理是:服务商在自己的权威服务器上替你把链跟完,对外只返回最终的 A 记录。 查询者看到的是一组普通 IP,完全不知道背后有一条 CNAME。

这条路最省事,但有两个代价值得知道:

  • 地理调度的基准变了 —— 跟链这一步是 DNS 服务商的服务器做的,CDN 是按它的位置给节点,而不是按最终用户的位置。服务商和用户离得远时,调度精度会下降
  • 它是各家自己的扩展,不是 DNS 标准,换服务商时这条记录不一定能平移

实操:怎么读一次解析结果

  1. 根域名和 www 都查一遍 —— 两者经常不同,只查一个会得出错误结论
  2. 先看有没有 CNAME —— 有就顺着链读后缀,认厂商
  3. 没有 CNAME 就看 A 记录的数量和归属地 —— 两三个分散在不同省份的 IP,基本就是 CDN 在调度;单个固定 IP 更像是自己的服务器
  4. 看有没有 AAAA —— 有 AAAA 说明支持 IPv6 访问,纯 IPv6 环境下能不能打开就看这一条
  5. 要批量对一批域名,粘进去一次跑完 —— 上限 500 个,导出 CSV

一个必须说清楚的前提:这是服务器视角

解析是在本站的杭州服务器上完成的,用的是公共 DNS。它回答的是「这个域名对外长什么样」,不是「你的网络里它长什么样」。

所以两件事它做不到:

  • 判断你这边打不开某网站是不是 DNS 的问题 —— 那要在你自己的机器上查,用 nslookup 域名 或 dig 域名
  • 列出一个 CDN 域名的全部节点 —— CDN 的权威 DNS 只返回查询者附近的一小组地址,实测大站也只给两个 A 记录。想看各地调度需要用 EDNS Client Subnet 伪装成各地用户分别查询,那是另一套机制

本机 DNS 出问题时的排查顺序,见 DNS 污染排查;想知道查出来的那些 IP 归属地为什么常常对不上,见 IP 归属地为什么查不准。

DNS 解析结果随时可能变化,归属地数据也存在误差,仅供参考。

❓ 常见问题

CNAME 链有好几级,会不会让网站变慢?

理论上每多一级多一次查询,实际上基本被缓存吃掉了。未命中缓存时:递归解析器要沿着链一级级查到最终的 A 记录,三级链条大致多两次往返,量级在几十毫秒。命中缓存时:链条中间那几级的 TTL 通常很长(云厂商的调度域往往几小时),真正短 TTL 的只有最后一跳,所以绝大多数请求只查一次。真正值得注意的不是级数,是最后一跳的 TTL:CDN 为了能快速切换节点会把它设得很短(几十秒到几分钟),这是调度精度和查询量之间的取舍。什么时候级数才是问题:链条跨了两家服务商(比如自建调度再转给 CDN),任何一家出故障都会让整条链断掉,故障面是叠加的。

我刚改完 DNS 记录,为什么这里查到的还是旧地址?

缓存还没过期,而且你和这个工具看的不是同一份缓存。三层缓存各有各的寿命:(1) 权威服务器上的新记录,改完通常一两分钟内生效;(2) 公共递归 DNS 会按旧记录的 TTL 缓存,TTL 是 600 就最多等 10 分钟,是 86400 就要等一天;(3) 你本机和浏览器还有一层自己的缓存。这个工具用的是公共 DNS(223.5.5.5),所以它反映的是那台递归服务器的缓存状态,和你本机的情况无关。想快点生效:改记录之前先把 TTL 调小(比如 60),等旧 TTL 过完再改内容,切换完再调回去。排查自己这边:用本机的 nslookup 或 dig,在线工具替代不了。

为什么根域名和 www 查出来的结果不一样?

多数情况下是因为根域名用不了 CNAME。规则:DNS 规定一个名字上有了 CNAME 就不能再有别的记录,而根域名(apex)必然带着 SOA 和 NS 两条记录,所以它放不下 CNAME。结果:很多站的做法是 www 上挂 CNAME 指向 CDN,根域名上放 A 记录或者做一个 301 跳到 www。这两条路径的解析结果天然不同。所以查一个站时两个都值得查:(1) 只查根域名可能完全看不到 CNAME,误以为它没用 CDN;(2) 只查 www 可能漏掉根域名指向的旧服务器。变通方案见正文的 ALIAS 与 CNAME 拉平,它们能让根域名「看起来」有 CNAME 的效果。

查不到 CNAME,是不是就说明这个站没上 CDN?

不一定,至少有三种情况会让 CNAME 消失。(1) 直接把 CDN 的 IP 写进 A 记录 —— github.com 就是这样,看不到 CNAME 但显然在用 CDN;(2) 根域名做了 CNAME 拉平 —— DNS 服务商在服务端替你跟完链,对外只返回最终的 A 记录,查询者看到的就是一组 IP;(3) 自建 CDN 用自家域名 —— CNAME 是有的,但后缀不在常见厂商表里,比如 danuoyi.tbcache.com(淘宝)、bilicdn1.com(B 站),得靠认域名。反过来判断的办法:看返回的 A 记录数量和归属地——同一个域名从不同地方查到不同的 IP,基本就是 CDN 在调度。

🧭 打开 域名查 IP 域名解析到哪些 IP·每个 IP 的归属地与运营商·CNAME 认出 CDN 厂商·批量解析导出 CSV →

🔗 相关阅读

全部教程 →