最快修复: 如果你的 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-side 和 dig 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
要看到:
- 根 NS →
.comTLD。 .comTLD → 你的权威 NS、ADDITIONAL 里带地址。- 你的 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 检查工具)解析结果一致。用 DNSViz 或 intoDNS 跑一遍整区审计,确认没有缺 glue 或 lame delegation 警告。
长期预防
- 能不在被委派区里放 NS 目标就别放。完全避开 glue。
- 任何 zone 委派 runbook 把 glue 记录列成 checklist 项——它经常被忘。
- 用 DNS-as-code(Terraform
dns_*资源、OctoDNS)把 glue 跟委派一起进版本控制。 - 每次 NS IP 改动,父区 glue 立刻更新、并从外部
dig +trace验证。 - 每周 cron 跑
intodns.com或dnsviz.net——先于用户发现 glue 问题。
常见坑
- 在子区里加 NS 的 A 记录就以为够了。父区也得有 glue。
- 子区里更新了 NS IP、注册商那边的父区 glue 忘了改。
- DNS 服务商 UI 里加了 glue,但没推到 TLD 注册局(部分注册商需要单独的”child nameserver”注册)。
- Lame delegation——NS 列了但实际不为该区应答(前一家服务商遗留)。
- 把”vanity nameservers”(装饰用、
ns1.yourbrand.comalias 到服务商)跟需要 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 #排查