Domain IP Lookup

CNAME 是名称的别名,而非地址的别名

www.example.com

CNAME 记录

cdn.provider.net

目标主机名

192.0.2.10

A 记录,最终答案

DNS 基础

CNAME 链详解:顺着别名找到 IP

4 分钟阅读

CNAME 记录让一个 DNS 名称成为另一个规范主机名的别名。别名本身并不包含 IPv4 或 IPv6 地址;解析器会跟随目标名称,并在那里查找所请求的数据。当一个别名指向的名称本身也是别名,或者服务商的 DNS 配置在返回地址之前引入了多个受管目标时,就形成了链。这在托管平台和 CDN 中很常见。理解这条链,有助于解释为什么一次简单的查询会先显示主机名,经过额外的解析步骤之后才显示 IP。

有意识地逐级跟踪每一环

假设 www.example.com 是指向 customer.hosting.example 的 CNAME,而后者又是某个区域服务名称的别名。解析器会不断沿着链条往下走,直到找到所请求的地址数据,或遇到错误、无效配置为止。每个别名目标都是一个独立的 DNS 名称,可以有自己的 TTL 和服务商归属。调试时,请记录每一环,而不是只看最后的地址。如果目标拼写错误、不存在,或者绕回形成循环,即使控制面板里第一条 CNAME 记录看起来格式正确,解析也可能失败。

链的结果需要检查什么
别名解析到 A / AAAA最终的地址值及其 TTL
目标没有所请求的类型目标是否应当发布该记录族
目标返回 NXDOMAIN主机名拼写以及服务商侧目标的状态
链形成循环循环别名或相互冲突的服务商配置
不同解析器得到不同目标CDN、地理路由或缓存行为

CNAME 规则带有一些限制。作为 CNAME 的名称,通常不能在同一所有者名称下再携带无关的数据,DNSSEC 相关记录和某些服务商的特殊实现除外。这就是为什么区域顶点(根域名)上的 CNAME 会与标准 DNS 中必需的 SOA 和 NS 记录冲突。一些 DNS 托管商提供 ALIAS、ANAME 或扁平化功能,以便在顶点上获得类似的便利,但它们的实现方式各不相同,并且对外返回的是合成的地址记录。不要假设服务商界面中名为别名的功能在线路上就一定是真正的 CNAME。

TTL 与服务商归属同样重要

解析链中的每一步都可以被独立缓存。对最终目标的修改,可能不会立刻取代递归解析器已缓存的别名应答,而且不同环节可能有不同的 TTL 值。如果服务商要求您添加 CNAME 来验证域名,请严格使用其指定的所有者名称和目标,包括任何必需的下划线前缀。在没有弄清楚现有 CNAME 上依赖着什么之前,不要重新指向它。一条链的可靠程度,取决于每一环背后的记录和服务。

  • 记录从别名到地址之间的每一个 CNAME 目标。
  • 分别独立检查最终目标上的 A 和 AAAA。
  • 避免循环别名,以及同一所有者名称下相互冲突的记录。
  • 确认顶点扁平化是服务商功能,还是标准 DNS 记录。
  • 当更新后的目标没有在各处生效时,比较各级 TTL。

在迁移中使用链

CNAME 使托管服务商可以更换其底层 IP 地址,而无需客户每次都去修改 A 记录。代价是要依赖目标名称及其服务商。在迁移平台之前,请确认新的目标,在正确的 DNS 权威方更新别名,并通过公共解析器验证整条链。在缓存仍可能引用旧目标期间,请保留之前的服务。如果某个查询工具只显示到第一个别名就停止,请改用能够显示后续各环的解析器或检查工具,然后通过预期的主机名测试最终服务。

关于地址记录与别名记录的核心区别,请阅读 CNAME 与 A 记录。DNS 记录参考介绍了其他常见类型,而域名查询工具可以显示某个主机名的公共 DNS 数据。可见的 CNAME 只是一个指针,而不是目的地本身;追踪完整的链,才是弄清 DNS 当前究竟指向哪个端点的可靠方法。

更换服务商时避免脆弱的链

每增加一层别名,就多一个必须保持有效的依赖,也可能多引入一个缓存周期。长链不一定就是坏的,但它会让最终答案更难推断,并且当多个服务商分别拥有不同环节时,会让迁移变得复杂。请尽量让链保持简短,记录由谁控制每个目标,并定期核实旧平台的名称已不再被引用。在注销账户或更换供应商之前,先在区域中搜索指向其主机名的别名。否则,一条看起来正确的第一级 CNAME 可能仍然依赖着一个已退役的目标,直到旧服务商关停之后才会出现故障。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。

本主题的免费工具