CNAME Flattening - Solving CNAME at Apex Domain

如果您曾经尝试在根域名添加 CNAME 记录 — 例如将 yourdomain.com 直接指向 yourapp.provider.com — 并发现您的 DNS 服务器拒绝或损坏,那是因为根域名的 CNAME 记录被 RFC 标准禁止。本文说明了为什么会这样,以及如何使用 CNAME 展平、ALIAS 记录或 Cloudflare 来解决。

为什么根域名的 CNAME 会导致问题

根据 RFC 1034,CNAME 记录不能与同一名称的任何其他记录类型共存。但是,根域名(也称为根或裸域,例如 yourdomain.com)始终需要具有 NS 和 SOA 记录。这与放在那里的任何 CNAME 直接冲突。

此外,电子邮件的 MX 记录通常在根域名添加,这在标准 DNS 中使得在 @ 处放置 CNAME 在技术上不可能。

遇到此问题的常见用例

需要将根域名指向主机名而不是 IP 地址的服务:

什么是 CNAME 展平?

CNAME 展平(也称为 ANAME 或 ALIAS)是一种技术,其中 DNS 提供商在服务器端解析 CNAME 链,并将最终的 A 记录返回给客户端。从客户端的角度来看,它收到正常的 A 记录响应,而 DNS 服务器在实时内部处理 CNAME 解析。

该过程为:解析器查询 yourdomain.com → DNS 提供商服务器实时查找来自 CNAME 目标(yourapp.provider.com)的 IP → 将该 IP 作为 A 记录返回 → 客户端获得正确的 IP,而不会在响应中看到任何 CNAME。

解决问题的三种方式

选项 1 — 使用 Cloudflare(推荐)

Cloudflare 在免费计划上自动支持根域名的 CNAME 展平。当您使用 Cloudflare 作为您的 DNS 提供商时:

  1. 将您的域名添加到 Cloudflare
  2. 转到 DNS → 添加记录
  3. 选择类型 CNAME,将名称设置为 @,输入目标主机名
  4. 切换代理开启(橙色云)或仅 DNS — 两者都在根域名使用 CNAME 展平

选项 2 — 使用 ALIAS 记录(支持的 DNS 提供商)

一些 DNS 提供商如 DNSimple、Amazon Route 53 和 Dyn 支持 ALIAS 记录,其行为像 CNAME 展平但被公开为一个不同的记录类型。检查您的 DNS 提供商的文档,看是否支持 ALIAS。

选项 3 — 使用带 IP 监控的 A 记录

如果目标的 IP 地址很少变化,您可以手动查询目标主机名的 IP,将其添加为 A 记录,并设置监控脚本以在 IP 变化时更新记录。这是最不优雅的解决方案,但适用于任何 DNS 提供商。

总结:最简单和免费的解决方案是使用 Cloudflare 作为您的 DNS 提供商。Cloudflare 在免费计划上开箱即用地支持 CNAME 展平。如果您的当前 DNS 提供商不支持 ALIAS 记录,只需更改您的域名名称服务器以指向 Cloudflare。

CNAME 与 ALIAS 与 ANAME:有什么区别?

如何验证您的 DNS 提供商是否支持 CNAME 展平

在迁移 DNS 或选择新提供商之前,您可以使用 dig 命令测试是否激活了 CNAME 展平:

# 检查根域名返回 A 记录还是 CNAME
dig yourdomain.com A

# 如果答案部分显示 CNAME,提供商不在展平
# 如果直接显示 A 记录,展平有效

# 更深入的追踪进行调查
dig +trace yourdomain.com

如果在查询根域名时响应的答案部分包含 CNAME 记录,该提供商不支持展平。某些严格符合 RFC 的解析器或电子邮件系统可能会拒绝或误处理这种情况。切换到 Cloudflare 或其他支持展平的提供商是推荐的修复。

支持 CNAME 展平 / ALIAS 的提供商:Cloudflare(免费)、DNSimple、Amazon Route 53、Dyn、NS1 和 Bunny DNS。检查您当前提供商的文档,查阅术语"ALIAS 记录"或"ANAME 记录"。

CNAME 展平的 DNS 提供商比较

提供商 展平支持 记录名称 成本
Cloudflare ✓ 支持 CNAME(自动展平) 免费
DNSimple ✓ 支持 ALIAS 付费计划
Amazon Route 53 ✓ 支持 别名记录 按使用付费
通用注册商 DNS ✗ 不支持 — —

CNAME 展平和电子邮件记录:您需要了解的内容

一个常见的误解是 CNAME 展平允许您通过 CNAME 路由 MX 记录。这是不正确的。CNAME 展平只能解决将根域名指向 Web 服务主机名的问题 — 它不会改变 MX 记录的规则。

简而言之:CNAME 展平是将根域名指向 CDN、负载均衡器或静态托管端点的正确工具。电子邮件路由(MX、SPF、DKIM、DMARC)独立运行,不受展平影响。

对 SOA、MX 记录和 DNSSEC 的影响

使用 Cloudflare 的 CNAME 展平或 ALIAS 记录时,您仍然可以在根域名同时具有 MX、SOA、TXT 和其他记录。与标准 CNAME 不同,ALIAS 和 CNAME 展平不会破坏共存规则。但是,如果您使用 DNSSEC,请在继续之前验证您的提供商是否支持 ALIAS 与 DNSSEC 结合。

注册灵活 DNS 管理的域名

AsiaGB 支持对 .com、.co.th、.in.th 和 500 多个其他域名扩展的所有记录类型进行完整 DNS 管理。仅以 500 泰铢/年的价格注册 .com 域名。

注册域名