Voss Wang

NS 改了但站点不生效:一次 DNS 排查记录

2026-10-30 · DNS / 排障

现象:注册商后台里把 NS 改成了托管商给的两个地址,保存成功,状态也显示已更新。但半小时后 nslookup 查到的还是旧 NS,站点打不开,托管商后台一直停在 Pending。

下面是我实际用的排查顺序,从最可能到最不可能。

1. 注册商还在「自有 DNS」模式

这是最常见的原因,也是我这次踩的。很多注册商把解析分成两种模式:

  • 使用注册商自己的 DNS:NS 由注册商固定,后台只能改 A/CNAME/MX 这类记录;
  • 使用自定义域名服务器:NS 指向外部托管商。

如果界面停在第一种模式,你在「域名服务器」输入框里填什么都不会真正下发。必须先把模式切到自定义,再填地址。

2. 只填了一个 NS

托管商一般给两个 NS,两个都要填。只填一个时,部分注册商会保存失败但不明显报错;也有注册商允许保存,但解析只在部分递归服务器上生效,表现为「有时能开有时不能」。

3. 否定应答被缓存了

在 NS 还没生效的时候查过域名,递归服务器会缓存「不存在」的结果(SOA 里的 negative TTL,常见 300–1800 秒)。这时候即使 NS 已经正确,本地仍然查不到。

# 换一个解析器直接问权威,绕开本地缓存
nslookup -type=ns example.com 8.8.8.8
nslookup -type=ns example.com 1.1.1.1

两个公共解析器都返回新 NS,说明是本地或上游缓存问题,等 TTL 过期即可。

4. 拼写与结尾的点

ns1.example.net 和 ns1.example.net. 在部分界面里含义不同;有些注册商会自动补全,有些不会。另外注意不要把托管商给的「示例地址」当成自己的——每家的 NS 名字是随机分配的,必须用你后台实际显示的那两个。

5. DNSSEC 链断了

如果域名之前开过 DNSSEC,换 NS 时没有同步更新 DS 记录,验证型解析器会直接返回 SERVFAIL。判断方法:

# 用会做 DNSSEC 验证的解析器查
nslookup -type=ns example.com 1.1.1.1
# 返回 SERVFAIL 而不是 NOERROR,基本可以确定是 DNSSEC 问题

处理方式:先在原注册商关闭 DNSSEC、等 DS 记录从父区移除,再切 NS。

排查顺序总结

顺序检查项判断依据
1注册商是否处于自定义 NS 模式界面里有没有「使用自有 DNS / 自定义 NS」的切换
2两个 NS 是否都填了逐字符比对托管商后台显示的值
3权威是否已经返回新 NS用 8.8.8.8 和 1.1.1.1 各查一次
4拼写、结尾点、多余空格复制粘贴后肉眼核对一遍
5DNSSEC / DS 记录是否返回 SERVFAIL

这次的真实原因是第 1 条:模式没切,输入框是灰的但看着像可编辑。教训是——改完 NS 不要只看「保存成功」,要用公共解析器从外部确认一次。


相关:给自己的域名配一个只收信邮箱