首页
/ US.KG FreeDomain 外部 DNS 实战全解:域名委派、核心记录类型、TTL 缓存机制与故障排查方法

US.KG FreeDomain 外部 DNS 实战全解:域名委派、核心记录类型、TTL 缓存机制与故障排查方法

2026-09-04 15:02:29作者:邓越浪Henry

本文基于 US.KG FreeDomain 学习指南(DigitalPlat FreeDomain 教程)中「Part 2: Learn DNS」部分整理而成,覆盖域名委派(Delegation)、A/AAAA/CNAME/MX/TXT/CAA 等核心记录类型、根域与子域管理、TTL 缓存与传播机制,以及一套从委派层到服务层的系统化 DNS 故障排查方法。读完本文,你可以在外部权威 DNS 服务商处正确创建和验证 DNS 记录,独立完成一次带回滚方案的 DNS 迁移,并能用 digcurl 等命令定位 NXDOMAINSERVFAIL 等常见故障的根因。

本部分在 FreeDomain 学习路线中的定位

US.KG 仓库(项目主页见 README.md)包含两部分公开内容:DigitalPlat FreeDomain 平台指南(注册、账户、外部 nameserver 委派、状态与续费、API),以及一本通用域名与网站教材(互联网基础、外部 DNS 记录、Web 开发、部署、HTTPS、邮件、运维与进阶架构),完整目录见 教程总索引LEARN.md

理解 DNS 部分之前,必须先明确一条产品边界(见 平台边界说明连接外部 Nameservers):

DigitalPlat 将注册域名委派(delegate)给外部权威 nameserver,它本身不提供普通 DNS 记录的编辑界面。 所有 AAAAACNAMEMXTXT 等区域记录的教程都属于「外部 DNS」类别。注册平台只在注册/管理流程中接受 nameserver 主机名,真正的记录编辑发生在你自选的外部权威 DNS 服务商那里。

本部分共 5 章,构成一条完整的实践链路:

  1. 委派与外部 Nameservers
  2. DNS 记录类型
  3. 根域与子域
  4. TTL、缓存与传播
  5. DNS 故障排查

贯穿全篇的工作准则(Working Rule)

原文档在 Part 2 总览 中给出了一条最重要的操作纪律:

一次只改一条 DNS 记录(Make one DNS change at a time);记录修改前的旧值;等待权威应答(authoritative answer)更新;在改下一层之前先验证结果。

并且明确:本部分所有记录编辑示例都在外部权威 DNS 服务中执行,而不是在注册平台执行。 这条准则是后文所有迁移计划和排查步骤的前提——只有单层变更加验证,才能把故障定位到具体的层。

委派与外部 Nameservers:三个视图必须一致

这是通用 DNS 章节,前提是注册平台已经收到了外部权威 nameserver 的主机名。要理解委派,先建立「同一个域名的三个视图」模型:

视图 内容
注册视图(Registration view) 存储期望的权威 nameserver 主机名
父级 DNS 视图(Parent DNS view) 发布解析器实际遵循的委派关系
子区权威视图(Child authoritative view) 发布该区的 SOA、NS 与普通资源记录

三者必须足够一致,域名解析才能工作。只要有一处不一致(例如注册处填了新 NS,但外部服务商还没建区),解析就会失败,而 dig +trace 是区分「父级委派问题」和「子区问题」的关键工具。

检查委派关系

dig NS example.dpdns.org

返回的 nameserver 应与外部 DNS 服务分配的集合完全一致。需要追踪完整路径时:

dig +trace NS example.dpdns.org

trace 输出会显示从根服务器逐级下探的过程,帮助你判断问题卡在父级委派(NS 指向了旧主机名)还是子区本身(NS 正确但应答超时)。

直接检查子区

dig @ns1.dns-service.example SOA example.dpdns.org
dig @ns1.dns-service.example NS example.dpdns.org

注意一个容易被忽视的顺序约束:权威服务器必须先发布该 zone,等待缓存更新才有任何意义。 如果外部服务商处根本没有建 zone,再怎么等都不会有结果。这一点在 平台侧的委派验证流程 中同样被强调:先在外部服务建 zone → 复制分配的 nameserver → 填到注册平台 → 再用 dig NS 验证。

委派失败模式速查表

观察到的结果 可能的故障层
父级指向旧的 NS 主机名 注册信息或父级委派未生效
NS 主机名正确但查询超时 外部权威服务或网络问题
一个 nameserver 有应答、另一个没有 外部 DNS 同步或可用性问题
SOA 显示 zone 不存在 外部 DNS 服务商处缺少该 zone
NS 正常但 A 记录为空 外部 DNS zone 中缺少普通记录

不要混用不同上下文的字段

以下四类值看起来相似,却属于完全不同的上下文(原文给出的对照示例):

Nameserver 字段: ns1.dns-service.example
A 记录值:        192.0.2.10
CNAME 值:       another-host.example
解析器地址:     客户端上配置的 IP

把服务器 IP 填进 Nameserver 字段、把公网解析器地址当成 NS 值,是 平台侧文档 列出的高频错误。该文档还整理了一张「常见错误对照表」,值得在填表前对照:

错误 正确做法
把服务器 IP 当 NS 值填入 填入分配到的权威 nameserver 主机名
在 DigitalPlat 里找 A 记录编辑器 打开外部 DNS zone
外部 zone 建成了拼错的域名 委派前先重建或更正外部 zone
只填了分配 NS 集合中的某一个 填入完整的分配集合
外部权威服务器没有 zone 时干等传播 先修复外部 zone

证据工作表(Evidence Worksheet)

每次委派变更后,原文档建议用固定模板记录证据,便于回溯与求助:

Expected external nameservers:
Observed delegated nameservers:
SOA answer from nameserver 1:
SOA answer from nameserver 2:
Time checked in UTC:
Next action:

DNS 记录类型:一条记录由什么组成

一条 DNS 记录有名称(name)、类型(type)、值(value)、TTL 四个基本字段;部分记录类型还包含优先级(priority)或其他参数。记录创建同样发生在承载该 zone 的外部权威 DNS 服务上——只接受 nameserver 主机名的注册平台不是记录编辑器。以下按原文档的章节逐一展开。

A 记录:主机名到 IPv4

Name:  @
Type:  A
Value: 192.0.2.10
TTL:   3600

要点:使用服务器真实的公网 IPv4 地址,不要把 192.168.1.10 这类私有地址用于公网网站。验证:

dig A example.dpdns.org

AAAA 记录:主机名到 IPv6

Name:  @
Type:  AAAA
Value: 2001:db8::10
TTL:   3600

只有当服务器确实可通过 IPv6 到达时才发布 AAAA。一条坏掉的 IPv6 路径会让偏好 IPv6 的客户端觉得网站不稳定。验证:

dig AAAA example.dpdns.org

CNAME 记录:主机名别名

Name:  www
Type:  CNAME
Value: example.dpdns.org
TTL:   3600

两条铁律:不要把 CNAME 指向 IP 地址;带有 CNAME 的名称一般不能同时存在其他类型记录。验证:

dig CNAME www.example.dpdns.org

MX 记录:邮件路由

Name:     @
Type:     MX
Priority: 10
Value:    mail.example.dpdns.org
TTL:      3600

数字越小优先级越高;MX 目标必须是带地址记录的主机名,不能是 CNAME,也不能在 MX 值里直接写 IP。验证:

dig MX example.dpdns.org

邮件场景的完整记录组合(MX、SPF、DKIM、DMARC 的 TXT 记录及验证命令)在教程的 邮件 DNS 章节 有独立展开,可作为本章 MX/TXT 的延伸阅读。

TXT 记录:验证、策略与服务配置

Name:  @
Type:  TXT
Value: service-verification=replace-with-issued-value
TTL:   3600

存储所有权验证、邮件策略、服务配置用的文本。两条注意事项:验证值必须逐字符精确复制;除非服务文档明确要求,不要把多条独立的 TXT 记录合并。验证:

dig TXT example.dpdns.org

CAA 记录:限制证书颁发机构

Name:  @
Type:  CAA
Flag:  0
Tag:   issue
Value: ca.example
TTL:   3600

CAA 用于限定哪些 CA 可以为该域名签发证书。错误的 CAA 记录会直接阻止证书签发——只在确认了你 HTTPS 方案实际使用的 CA 之后再添加。验证:

dig CAA example.dpdns.org

NS 与 SOA 记录

NS 记录标识权威 nameserver;SOA 描述区域权限与计时参数。托管型 DNS 服务通常自行管理 zone 顶端的 NS 和 SOA 记录。特别注意:只在子区内部修改 NS 记录,并不一定改变父级委派;已注册域名的 nameserver 变更必须通过其注册服务完成。

PTR 记录:反向 DNS

PTR 把 IP 地址映射回主机名。由于反向 DNS 由 IP 网络的所有者控制,普通的正向 zone 无法为你服务器的公网地址设置 PTR 记录。

保存记录前的安全检查清单

原文档给出的「Safe Record Checklist」,保存任何记录前逐项过一遍:

  • 名称是相对于目标 zone 的相对名(避免双后缀,见下文);
  • 值的格式符合该记录类型的要求;
  • TTL 与计划变更相匹配;
  • 同一名称下不存在冲突的 CNAME
  • 文档示例 IP 已替换为真实服务器地址;
  • 记录没有暴露秘密。验证 token 在其发布者另有说明前默认就是公开的。

根域与子域:一个域名组织多个服务

一个已注册域名可以通过子域组织大量服务,而不需要再注册新域名。

Zone 顶端(Apex)的表示

example.dpdns.org 来说,zone apex 就是注册名本身。DNS 界面通常用以下三种方式之一表示它:

@
example.dpdns.org
(名称字段留空)

遵循界面自己的约定。 不要把完整域名填进会自动补全 zone 后缀的字段,否则会造出 example.dpdns.org.example.dpdns.org 这样的名字——这也是后文 NXDOMAIN 排查中列出的高频原因之一。

常见子域命名

主机名 典型用途
www.example.dpdns.org 公网网站
api.example.dpdns.org 应用 API
status.example.dpdns.org 状态页
mail.example.dpdns.org 邮件服务器主机名
dev.example.dpdns.org 开发环境

这些用途只是命名约定。DNS 并不「知道」www 是网站、mail 是邮件服务器——语义完全由你指向的服务器和记录决定。

根域与 www 的经典组合

example.dpdns.org      A       192.0.2.10
www.example.dpdns.org  CNAME   example.dpdns.org

两个要点:

  1. Web 服务器必须同时配置为接受这两个主机名——DNS 本身不会在两者之间产生 HTTP 重定向;
  2. 选定一个规范的公网主机名(canonical hostname),在 Web 服务器层把另一个重定向过去,保持链接与统计口径一致。

通配符记录:谨慎使用

Name:  *
Type:  A
Value: 192.0.2.10

*.example.dpdns.org 可以为任何不存在的名字应答。副作用:它会掩盖拼写错误,并把未知名称意外路由到你的服务。除非应用确实在动态创建子域,否则优先使用显式记录。

子域委派:让子域成为独立 zone

在父级添加 NS 记录即可把子域委派出去:

Name:  team
Type:  NS
Value: ns1.team-dns.example

委派之后,team.example.dpdns.org 之下的记录由子级 nameserver 控制。不要在父 zone 中为被委派名称保留冲突记录。

命名准则

  • 文档中记录主机名时用小写字母;
  • 名称简短且能描述用途;
  • 避免暴露内部项目代号;
  • 不要在主机名中编码凭据、客户数据或秘密;
  • 生产与测试服务明确分离。

逐名验证

dig A example.dpdns.org
dig CNAME www.example.dpdns.org
dig NS team.example.dpdns.org

TTL、缓存与传播:为什么「改完没生效」

DNS 变更不会瞬间复制到每一台设备——递归解析器会按记录的 TTL 缓存应答。

缓存如何工作

若解析器收到这条应答:

example.dpdns.org. 3600 IN A 192.0.2.10

它最长可以复用该答案 3,600 秒。更新权威记录不会抹掉已经缓存的答案。

另一个容易被忽视的点:否定应答同样会被缓存。 有人在查一个不存在的名字之后你立刻创建了该记录,部分解析器在一段时间内仍可能返回 NXDOMAIN

TTL 选择参考表

场景 示例 TTL 权衡
稳定的生产记录 3600 ~ 86400 查询少,紧急变更慢
计划中的迁移 300 ~ 600 切换快,DNS 查询多
临时测试 60 ~ 300 迭代快,查询量大

原文档特别注明:这些是运维示例而非普适要求,DNS 服务商可能强制自己的最小 TTL 或自动 TTL。

计划一次 DNS 迁移(六步法)

  1. 在变更前至少一个旧 TTL 周期,先降低要移动记录的 TTL;
  2. 确认降低后的 TTL 已能从权威 nameserver 上查询到;
  3. 变更地址或目标;
  4. 重叠期内保持旧服务可用;
  5. 分别从权威解析器和递归解析器验证新应答;
  6. 迁移稳定后把 TTL 调回较高值。

关键提醒:临变更前的最后一刻才降低 TTL 是无效的——已经以旧(长)TTL 缓存的副本不受影响,这正是第 1 步要求「提前至少一个旧 TTL 周期」的原因。

区分「权威状态」与「缓存状态」

直接问权威服务器:

dig @ns1.dns-service.example A example.dpdns.org

再问你机器上配置的递归解析器:

dig A example.dpdns.org

如果权威应答是新的、递归应答还是旧的,说明 zone 已经正确,只是缓存仍在有效期内。此时等待比反复编辑记录更安全(反复编辑还可能触发服务商的限流)。

检查 TTL 数值

dig A example.dpdns.org +noall +answer

输出中 IN 前面的数字是以秒计的剩余 TTL。答案来自缓存时,这个数字通常会在多次查询之间递减——这是判断「答案是否被缓存」的直接证据。

浏览器与操作系统的缓存

即使解析器已更新,应用或操作系统仍可能持有连接或 DNS 状态。先用命令行 DNS 工具测试;重启浏览器并不能修一条错误的权威记录。

DNS 故障排查:从委派层到服务层逐层推进

排查总原则与 Working Rule 一致:从委派向最终服务方向排查,一次不要改多层。

第 1 步:确认准确的名字与类型

dig A www.example.dpdns.org

检查拼写错误、无意的重复后缀(双 zone 名)、以及错误的记录类型。

第 2 步:检查父级委派

dig +trace NS example.dpdns.org

委派应当导向注册服务中配置的权威 nameserver。

第 3 步:检查每一台权威服务器

dig @ns1.dns-service.example SOA example.dpdns.org
dig @ns2.dns-service.example SOA example.dpdns.org

所有权威服务器都应当能为该 zone 应答。如果它们长时间返回不同的 serial 或不同的值,说明 DNS 服务商可能尚未同步 zone。

第 4 步:直接查询目标记录

dig @ns1.dns-service.example A www.example.dpdns.org

如果直接应答就是错的,去修权威 zone——等待传播无法修正一条错误的权威应答。这是排查中最容易搞反因果的一步。

第 5 步:对比递归应答

查询本机常规解析器,必要时再查一个由用户或网络管理员选定的第二解析器。TTL 过渡期内出现不同的缓存值是正常的。

常见故障模式与定位

NXDOMAIN 的可能原因:

  • 主机名拼错;
  • 记录建在了错误的 zone;
  • DNS 界面把 zone 后缀追加了两次;
  • 否定应答仍被缓存。

SERVFAIL 的可能原因:

  • 被委派的 nameserver 不应答;
  • 某台权威服务器上缺少该 zone;
  • 网络路径或防火墙阻断了 DNS 流量。

DNS 正确但网站打不开:DNS 只负责定位服务器,继续往下查:

curl -I http://example.dpdns.org
curl -I https://example.dpdns.org

然后依次检查服务器进程、防火墙、虚拟主机(virtual host)、证书与应用日志。

只有部分用户看到新网站

  • 旧 DNS 应答仍被缓存;
  • IPv4 与 IPv6 指向了不同服务器;
  • 代理或应用缓存持有旧内容;
  • 客户端实际使用了不同的主机名。

www 正常但根域不通:检查根域的 A/AAAA 记录和 Web 服务器接受的主机名列表——www 的 CNAME 不会自动配置根域。

求助前先收集证据

原文档要求求助前至少备齐:

  • 准确的主机名与记录类型;
  • dig NS 输出;
  • 一条直接权威查询的输出;
  • 期望值与实际值;
  • 变更时间与之前的 TTL;
  • 相关场景下的 curl -I HTTP 状态。

分享日志或截图前,先移除 token、cookie、账户 ID、私有地址与无关个人数据。

进阶章节的 命令参考 提供了一条可直接执行的诊断脚本,把上面的证据收集固化成文件:

{
  date -u
  dig NS example.dpdns.org
  dig A example.dpdns.org
  curl -I --max-time 15 https://example.dpdns.org
} > domain-diagnostic.txt 2>&1

该文档还特别提醒:dig +short 输出对脚本很方便,但会丢掉 flags、authority、TTL 等上下文,诊断时应使用完整输出。另外它提供了两组在 DNS 生效前验证 Web 服务器的技巧,可直接并入排查流程:

curl -I -H 'Host: example.dpdns.org' http://192.0.2.10
curl --resolve example.dpdns.org:443:192.0.2.10 -I https://example.dpdns.org

前者在 DNS 生效前用 Host 头测试虚拟主机;后者连接到指定地址并仍按主机名校验证书。

适用前提、限制与延伸阅读

  • 本文所有示例域名(example.dpdns.org)与 IP(192.0.2.102001:db8::10)均为文档保留的虚构/文档地址,真实部署前必须替换
  • 记录操作全部发生在你自选的外部权威 DNS 服务商,DigitalPlat 只负责注册与外部 NS 委派,不背书、不保证任何第三方 DNS 服务;
  • 具体的 TTL、NS 分配行为取决于所选 DNS 服务商,本文给出的数值为运维示例而非厂商保证;
  • 需要交互式决策支持时,可参考仓库自带的 故障排查决策树检查清单与模板练习手册

本文覆盖的核心文档

文档 主题
Part 2 总览 章节索引与工作准则
委派与外部 Nameservers 三视图模型、委派失败模式、证据工作表
DNS 记录类型 A/AAAA/CNAME/MX/TXT/CAA/NS/SOA/PTR 与安全清单
根域与子域 Zone apex、www 组合、通配符、子域委派、命名准则
TTL、缓存与传播 缓存机制、TTL 选择、迁移六步法
DNS 故障排查 五步排查法、常见故障模式、证据收集
连接外部 Nameservers 平台侧委派操作与常见错误对照表
命令参考 诊断命令、脚本化证据收集、虚拟主机预测试
登录后查看全文
热门项目推荐
相关项目推荐