子域 NS 委派挂了:缺 Glue 记录 —— 排查与修复

把子域委派给它自身内部的 NS,但解析失败?父区需要 glue A/AAAA。这里给出 dig 诊断和注册商端的具体修复步骤。

最快修复: 如果你的 NS 记录指向的主机名在被委派的区内部(比如 internal.yourdomain.com. NS ns1.internal.yourdomain.com.),那么父区还必须为这些 NS 主机名发布 A/AAAA 即 glue 记录。子域委派就在父区里加,整域(apex)委派就在注册商的 host 注册面板里加,然后用 dig +trace internal.yourdomain.com 确认在 .com 那一跳的 ADDITIONAL section 里带着地址。按 RFC 9471(2023 年 9 月),服务器在应答委派(referral)时必须为 in-domain 的 NS 返回 glue,所以一旦缺了,解析就卡住。

你想让 internal.yourdomain.com 由内部 DNS 基础设施服务(BIND、内部 Route 53 hosted zone、Kubernetes ExternalDNS)。在父区加一条 internal.yourdomain.com. NS ns1.internal.yourdomain.com.,看着挺合理。然后什么都不解析。或者更糟,公司内网解得出、外网解不出。原因是缺 glue 记录:当你委派的目标 NS 本身在被委派的子区里时,父区还必须发布这些 NS 的 A/AAAA 记录,否则解析器会陷入死循环(要查 ns1 才能拿到 ns1 的地址,但拿不到 ns1 的地址就没法查 ns1)。

DNS 里管这叫 in-domain(in-bailiwick)NS:NS 主机名本身就是被委派区底下的一个名字。只有 glue 能打破这个循环,而截至 2026 年 6 月,规范(RFC 9471)已经把父区返回 glue 定为强制要求。

你属于哪一类?

一条命令就能判断 glue 是不是你的问题。从外部网络跑:

dig +trace internal.yourdomain.com
dig +trace 显示什么最可能的原因跳到
卡在 .com 那步,列了 NS 但 ADDITIONAL 里没地址glue 从没在父区/注册局注册原因 1、原因 3
走到你的 NS 但地址是旧的/失效 IP,然后超时换 IP 后 glue 没更新原因 4
IPv4 通,只在某些网络/运营商失败缺 AAAA glue原因 6
dig @your-ns ... 能应答但 dig @8.8.8.8 ... 不能记录只在子区里、父区没有原因 2
两家注册商/服务商返回不一样的 NS IP劈裂配置漂移原因 5

常见原因

从最常见到边角情况。

1. NS 目标在子区里,但父区没 glue

你配了 internal.yourdomain.com. NS ns1.internal.yourdomain.com. 但父区没给 ns1.internal.yourdomain.com. 加 A 记录。父区有 NS 指针、却没法告诉解析器 ns1 在哪。

怎么判断dig +trace internal.yourdomain.com 走到 NS 那步就停了,“no answer” 或者卡在 NS 地址解析。

2. Glue 在子区里有、父区里没有

你在子区里加了 ns1 的 A 记录(internal.yourdomain.com 区文件里 ns1 A 10.0.0.1),但父区(yourdomain.com)没有同一条 A 记录。已缓存子区的内部解析器可能能用;外部解析器做新查询就挂。

怎么判断dig @8.8.8.8 internal.yourdomain.com 挂。dig @ns1.internal.yourdomain.com internal.yourdomain.com 通。数据存在,父区没告诉外部世界去哪找。

3. 注册商 glue 入口很不显眼

TLD 级 glue(用域名自身内部的 NS 委派整个域,比如 yourdomain.com. NS ns1.yourdomain.com.)需要在注册商通过他们的 EPP 通道注册到 TLD 注册局——大多数注册商有一个独立的”register host” / “child nameservers”面板,跟 DNS 记录 UI 分开。

怎么判断:你在 DNS 面板里加了 A 记录,但从 TLD 看 dig @a.gtld-servers.net yourdomain.com NS +additional 没有 additional A 记录——注册局里压根没有。

4. 旧 glue 指向已下线的 IP

你换了 NS 到新 IP。子区里的内部 NS 记录改了,父区的 glue 还指着旧 IP。解析器去打旧地址超时。

怎么判断dig +trace 显示解析器拿到了父区的 additional A,但连那个 IP 超时。

5. 注册商和 DNS 服务商两边 glue 不一致(劈裂配置)

很多场景下 NS 记录在 DNS 服务商 UI 里、父区 glue 在注册商那里,两边漂移。某些解析器认一个、某些认另一个。

怎么判断dig yourdomain.com NS @registrar-sidedig yourdomain.com NS @dns-provider-side 返回不一样的 IP。

6. IPv4 glue 有、IPv6 glue 没有

你在父区设了 ns1 A 192.0.2.1 但没 ns1 AAAA 2001:db8::1。只走 v6 的解析器到不了。

怎么判断:v4 路径解析正常,v6-first 解析器间歇失败。某些移动运营商遇到问题。

开始前

  • 弄清楚父区、被委派子区、各自的 NS 归属。
  • 知道父域在哪家注册商、那家是只管注册还是同时管 DNS。
  • 准备好每台委派 NS 的 IP 地址(v4 和 v6 如果有)。
  • 把父区现在的 NS 记录、父区的 glue(或注册商 host 列表)当前状态存下来。

需要收集的信息

  • 外部网络做的 dig +trace internal.yourdomain.com 输出。
  • dig @8.8.8.8 NS internal.yourdomain.com +additional 输出。
  • dig @a.gtld-servers.net yourdomain.com NS +additional 输出(TLD 看你的区是什么样的)。
  • 注册商”host 注册” / “child nameservers”页面截图。
  • DNS 服务商里父区和子区两边的 NS 记录列表。

一步步修

走 A 路径(NS 在子区外)或 B 路径(NS 在子区内——需要 glue)。

第 1 步:先想清楚到底要不要 glue

仅当 NS 目标的名字在被委派的区时才需要 glue(即 in-domain NS)。例子:

  • 需要 glue:internal.yourdomain.com NS ns1.internal.yourdomain.com.(ns1 在 internal.yourdomain.com 里)。
  • 不需要 glue:internal.yourdomain.com NS ns1.dnshost.com.(ns1 在 dnshost.com 这个独立区里,解析器会独立去查它)。

RFC 9471 §3 把界线划得很清楚:referral 必须in-domain 的 NS 带 glue(要么 UDP 包装不下时设 TC=1 逼客户端用 TCP 重试),应当sibling-domain 的 NS 带 glue。所以你的 NS 目标如果是 in-domain,而父区没给 glue,那就是父区不合规、解析必挂。如果 NS 目标是 sibling 或彻底外部的名字,那 glue 不是你的问题,得去别处找(lame delegation、防火墙、NS IP 填错)。

如果能用别的区的 NS 目标避开 glue(比如直接用 DNS 服务商的 NS ns1.dnshost.com),就这么做,这整类问题就没了。

第 2 步:要 glue 的话,父区里加 A 和 AAAA 记录

在父区(yourdomain.com)里:

ns1.internal.yourdomain.com.  3600  IN  A     192.0.2.1
ns1.internal.yourdomain.com.  3600  IN  AAAA  2001:db8::1
ns2.internal.yourdomain.com.  3600  IN  A     192.0.2.2
ns2.internal.yourdomain.com.  3600  IN  AAAA  2001:db8::2

注意这些是父区里的记录、名字看起来像属于子区。这就是 glue——父区把 out-of-bailiwick 的查找短路掉。

第 3 步:apex 级委派(yourdomain.com NS ns1.yourdomain.com)需要通过注册商在 TLD 注册 glue

当 in-domain 的 NS 落在 apex 上(你是把整个已注册域委派给它自身内部的一个名字)时,光在 DNS 记录 UI 里改是不够的。注册局把 apex glue 存为一个 host object,只有注册商能通过 EPP 创建它。各家菜单叫法不同,以下是截至 2026 年 6 月核实过的路径:

  • Namecheap: Domain List → Manage → Advanced DNS 标签页 → “Personal DNS Server” 区 → Add Nameserver(主机名 + IP)。
  • GoDaddy: Domain Portfolio → 选中域 → DNS → Hostnames → Add Hostname(Host 前缀 + IPv4/IPv6)。GoDaddy 几分钟内处理这个改动,但要给到全网注册局和解析器传播,留出最多一天的时间。
  • Squarespace Domains: 原来在 Google Domains 注册的域现在都在这里(Google Domains 已于 2024 年关停)。domains dashboard → 选中域 → DNS → Nameserver Registration → Add Host Record。需要用密码或 2FA 重新验证身份。
  • Cloudflare Registrar: 没有自助的 glue UI。账户级 custom nameservers 需要 Business 或 Enterprise 套餐,而要发布 glue 必须给 Cloudflare Support 开工单,让他们把主机名和 IP 加到注册局。注意:glue host object 在域转入 Cloudflare Registrar 时不一定会跟着过来,所以任何转入之后都要重新注册一遍。

加每个 NS 主机名 + 它的 IP。注册商通过 EPP 推到 TLD 注册局。在注册局侧验证它生效了:

dig @a.gtld-servers.net yourdomain.com NS +additional

ADDITIONAL section 应该有你 NS 主机名对应的 A/AAAA 记录。如果 NS 记录在、但 ADDITIONAL 是空的,说明 host object 从没在注册局建出来——这是 apex 委派最常见的失败点。

第 4 步:子区里也要权威保存这些 glue 地址

为了一致性,子区(internal.yourdomain.com)里也要有相同的 A 记录:

$ORIGIN internal.yourdomain.com.
@      IN  NS    ns1
@      IN  NS    ns2
ns1    IN  A     192.0.2.1
ns1    IN  AAAA  2001:db8::1
ns2    IN  A     192.0.2.2
ns2    IN  AAAA  2001:db8::2

最终解析器直接查到子区时拿到同样的答案。Glue 是引导、in-bailiwick 记录是权威源。

第 5 步:从外部端到端验证

dig +trace internal.yourdomain.com

要看到:

  1. 根 NS → .com TLD。
  2. .com TLD → 你的权威 NS、ADDITIONAL 里带地址。
  3. 你的 NS → 最终答案。

每一跳都有清晰的 A 记录,无卡顿、无超时。

也从另一个网络测(手机流量 / 另一个区的 VPS)——本地 DNS 缓存可能掩盖问题。

第 6 步:改动期间降 TTL,稳定后提上去

改动期间 NS 和 glue 都设 TTL = 300。稳定 24 小时后:

ns1.internal.yourdomain.com.  86400  IN  A  192.0.2.1

提到 86400(1 天)增加稳定性。长 TTL 减轻 NS 查询压力、提高解析器缓存命中率。

怎么确认修好了

五条都跑;别只看 dig +trace 就收工——热缓存可能盖住一个其实还坏着的注册局记录。

  • dig +trace internal.yourdomain.com 干净走完,每一步 ADDITIONAL 里都有地址。
  • dig @8.8.8.8 NS internal.yourdomain.com 返回 NS 记录。
  • dig @8.8.8.8 ns1.internal.yourdomain.com 返回 A 记录(通过父区 glue 解出来)。
  • apex glue 的话,dig @a.gtld-servers.net yourdomain.com NS +additional 显示你的主机名带地址——确认注册局(而不仅仅是你自己的区)里有数据。
  • 至少 3 个外部网络(手机流量、另一个区的 VPS、公共 DNS 检查工具)解析结果一致。用 DNSVizintoDNS 跑一遍整区审计,确认没有缺 glue 或 lame delegation 警告。

长期预防

  • 能不在被委派区里放 NS 目标就别放。完全避开 glue。
  • 任何 zone 委派 runbook 把 glue 记录列成 checklist 项——它经常被忘。
  • 用 DNS-as-code(Terraform dns_* 资源、OctoDNS)把 glue 跟委派一起进版本控制。
  • 每次 NS IP 改动,父区 glue 立刻更新、并从外部 dig +trace 验证。
  • 每周 cron 跑 intodns.comdnsviz.net——先于用户发现 glue 问题。

常见坑

  • 子区里加 NS 的 A 记录就以为够了。父区也得有 glue。
  • 子区里更新了 NS IP、注册商那边的父区 glue 忘了改。
  • DNS 服务商 UI 里加了 glue,但没推到 TLD 注册局(部分注册商需要单独的”child nameserver”注册)。
  • Lame delegation——NS 列了但实际不为该区应答(前一家服务商遗留)。
  • 把”vanity nameservers”(装饰用、ns1.yourbrand.com alias 到服务商)跟需要 glue 的真委派搞混。

FAQ

Q:为什么内网解析得出、外网解析不出?

内网解析器可能直接缓存了子区记录,或者配了 stub zone。外网解析器走完整委派链,在缺 glue 那挂。仅内网能用是 glue 问题的强信号。

Q:注册商没有 glue / child nameserver 页面怎么办?

要么注册商不支持 glue(真 TLD 上罕见),要么藏起来了。找客服问”EPP host registration”或”child nameserver”——任何获得 TLD 认证的注册商都必须支持。它要是拒绝,换一家。

Q:TLD 注册局缓存 glue 多久?

按 TLD NS 返回 additional 记录的 TTL,.com/.net 一般 1-2 天。注册商通过 EPP 推上去后,这个时间窗内传播完。Squarespace 和大多数注册商给的口径是 glue 改动 24-48 小时内全网可见。

Q:dig +trace 返回 SERVFAIL 或者卡在 .com 那行,这是什么意思?

TLD 回了一个 referral,但里头没有你 NS 的可用地址。这就是教科书式的缺 glue 症状:.com 服务器知道 NS 的名字、却从没拿到它的 IP,解析器无处可去。用 dig @a.gtld-servers.net yourdomain.com NS +additional 确认——ADDITIONAL section 空着就说明 host object 没注册。

Q:我在自己区里加了 A 记录,为啥还说缺 glue?

被委派区里的记录是权威的,但在有东西告诉解析器”这个区的 NS 在哪”之前根本够不着。那份引导用的副本住在父区、不在子区。apex 委派的父区就是 TLD 注册局,所以这往往需要注册商的 host object、而不是改区文件能解决的。

Q:能不能只用一个 NS?

技术上行,实际不行。大多数 TLD 要求委派至少 2 条 NS 记录。2 是下限,4 比较稳。如果两台 NS 共用一个网络或服务商,不管几条都有冗余缺口。

延伸阅读:Name server 跟 DNS records 分不清DNS 改了站点还是打不开子域名不解析

标签: #排查 #DNS #delegation #排查