US.KG FreeDomain 外部 DNS 实战全解:域名委派、核心记录类型、TTL 缓存机制与故障排查方法
本文基于 US.KG FreeDomain 学习指南(DigitalPlat FreeDomain 教程)中「Part 2: Learn DNS」部分整理而成,覆盖域名委派(Delegation)、A/AAAA/CNAME/MX/TXT/CAA 等核心记录类型、根域与子域管理、TTL 缓存与传播机制,以及一套从委派层到服务层的系统化 DNS 故障排查方法。读完本文,你可以在外部权威 DNS 服务商处正确创建和验证 DNS 记录,独立完成一次带回滚方案的 DNS 迁移,并能用 dig、curl 等命令定位 NXDOMAIN、SERVFAIL 等常见故障的根因。
本部分在 FreeDomain 学习路线中的定位
US.KG 仓库(项目主页见 README.md)包含两部分公开内容:DigitalPlat FreeDomain 平台指南(注册、账户、外部 nameserver 委派、状态与续费、API),以及一本通用域名与网站教材(互联网基础、外部 DNS 记录、Web 开发、部署、HTTPS、邮件、运维与进阶架构),完整目录见 教程总索引 与 LEARN.md。
理解 DNS 部分之前,必须先明确一条产品边界(见 平台边界说明 与 连接外部 Nameservers):
DigitalPlat 将注册域名委派(delegate)给外部权威 nameserver,它本身不提供普通 DNS 记录的编辑界面。 所有
A、AAAA、CNAME、MX、TXT等区域记录的教程都属于「外部 DNS」类别。注册平台只在注册/管理流程中接受 nameserver 主机名,真正的记录编辑发生在你自选的外部权威 DNS 服务商那里。
本部分共 5 章,构成一条完整的实践链路:
贯穿全篇的工作准则(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
两个要点:
- Web 服务器必须同时配置为接受这两个主机名——DNS 本身不会在两者之间产生 HTTP 重定向;
- 选定一个规范的公网主机名(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 迁移(六步法)
- 在变更前至少一个旧 TTL 周期,先降低要移动记录的 TTL;
- 确认降低后的 TTL 已能从权威 nameserver 上查询到;
- 变更地址或目标;
- 重叠期内保持旧服务可用;
- 分别从权威解析器和递归解析器验证新应答;
- 迁移稳定后把 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 -IHTTP 状态。
分享日志或截图前,先移除 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.10、2001: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 | 平台侧委派操作与常见错误对照表 |
| 命令参考 | 诊断命令、脚本化证据收集、虚拟主机预测试 |
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00