DNAME 是什么
DNAME(TYPE 39)做子树重定向:把「该节点之下的所有名字」整体映射到另一棵树下(RFC 6672)。查询 a.old.example.com 时,权威会合成 CNAME 指向 a.new.example.net。它比逐条 CNAME 更适合整域迁移,但节点自身(old.example.com 本身)并不受影响。
基本信息
| 类型 | DNAME(TYPE 39) |
|---|---|
| 作用 | 整棵子树的重命名与迁移 |
| 规范 | RFC 6672 |
| 行为 | 对子孙名字合成 CNAME 指向目标树 |
| 作用边界 | 不影响 owner 名字自身 |
| 典型用途 | 品牌或域名迁移、多子域批量改向 |
典型使用场景
- 品牌或域名迁移:整棵子树换到新域名
- 大规模子域重构:避免逐条维护大量 CNAME
- 排障:理解解析结果里为何出现意料之外的 CNAME
- DNSSEC 场景:确认签名范围与合成行为的影响
- 迁移规划:评估哪些名字需要额外补 CNAME
- 教学演示:对比 DNAME 与 CNAME 的作用范围差异
配置与验证
配置与验证
# 配置示例(BIND 风格区域文件)
old.example.com. IN DNAME new.example.net.
# 查询 a.old.example.com 会得到合成的 CNAME a.new.example.net
dig +noall +answer a.old.example.com A
# 节点自身不受 DNAME 影响,需要单独配置
# old.example.com. IN CNAME new.example.net.DNAME 与相关记录
| 记录 | 作用范围 | 典型用途 |
|---|---|---|
| CNAME | 单个名字 | 单条别名 |
| DNAME | 该节点下的整棵子树 | 整域迁移 |
| NS | 把子区委托给其他权威 | 子区托管 |
| HTTPS 与 SVCB | 单个服务名 | 端点声明 |
DNAME 不作用于 owner 名字本身:若还希望 old.example.com 也指向新域名,需要额外加一条 CNAME。
与 DNSSEC 配合时要注意签名对象与合成结果的验证路径,迁移前应在测试区验证。
合成的 CNAME 由权威动态生成,不占用额外记录空间,因此比逐条 CNAME 更易维护。
解析器对重定向链有长度限制,DNAME 与 CNAME 叠加层数过多会导致解析失败。
DNAME 只在配置它的权威侧生效;若新域名也需要反向映射,需要另一条 DNAME 或逐条配置。
查询 DNAME 节点本身时,返回的是 DNAME 记录而不是合成结果,客户端需要按规范自行完成子树映射。
迁移结束后若旧域名仍要保留可用性,DNAME 更适合长期保留;反之则应规划下线时间点,避免留下无人维护的重定向。