当你更改域名的名称服务器时 — 无论是迁移到新主机、设置新的DNS提供商,还是将域名指向不同的服务器 — 每个人心中都会有一个问题:"我要等多久?"答案在于一个名为DNS传播的过程,它解释了更新的DNS记录如何传播到世界各地的解析器。本文介绍了DNS传播的工作原理、需要多长时间,以及如何使用免费在线工具和命令行实用程序检查传播是否完成。

什么是DNS传播及其如何工作

DNS(域名系统)将人类可读的域名(如example.com)翻译成服务器用于通信的IP地址。当你在浏览器中输入URL时,你的计算机会询问DNS解析器(通常由ISP提供,或者公共解析器如Google 8.8.8.8或Cloudflare 1.1.1.1)与该域名相关联的IP地址。

解析器不是每次都查询权威名称服务器,而是按每个DNS记录的TTL(生存时间)值定义的时间段缓存DNS响应。当你更改名称服务器或更新DNS记录时,新信息会立即写入权威名称服务器。但是,全球的解析器仍然持有旧数据的缓存副本,直到其TTL过期。每个解析器清空其缓存并获取新数据的过程就是我们所说的DNS传播。

这意味着传播不是来自中心位置的"推送" — 而是每个解析器在其缓存过期时独立执行的"拉取"。这就是为什么全球不同地区的不同用户在传播窗口内可能看到不同的DNS结果。

它实际上需要多长时间 — 真实数字

传播时间因几个因素而异。以下是你应该预期的典型范围:

情景 典型时间 最长时间
名称服务器更改(TTL之前很高) 12–24小时 48–72小时
名称服务器更改(TTL提前降低) 1–4小时 12小时
A记录更新(TTL = 3600) 1–2小时 6小时
A记录更新(TTL = 300) 5–10分钟 30分钟
MX记录更新 1–4小时 24小时
TXT / CNAME记录更新 15分钟–2小时 24小时

这些是平均值。某些ISP或解析器可能因缓存策略或本地配置而需要更长时间。严格遵守TTL值的解析器 — 如Cloudflare 1.1.1.1 — 往往比ISP解析器传播得更快,后者有时会以更高的最小值覆盖TTL以减少其基础设施上的查询负载。

影响传播速度的关键因素

了解什么推动传播速度可以帮助你更有效地计划DNS更改:

在更改名称服务器前如何降低TTL

这是迁移托管或切换DNS提供商时最小化停机时间的专业方法:

步骤1 — 检查你的当前TTL

dig yourdomain.com NS
dig yourdomain.com A

查看输出中ANSWER SECTION的第二列。该数字是你的TTL(以秒为单位)。如果显示86400或43200,你需要提前降低。

步骤2 — 提前24–48小时降低TTL

登录你的域名注册商或当前DNS提供商的控制面板。将A记录、AAAA记录、MX记录和任何关键CNAME记录的TTL更改为300–600秒。然后等待旧TTL完全过期 — 你必须至少等待与旧TTL值一样长的时间(如果TTL为86400,降低后等待24小时)。

步骤3 — 更改名称服务器

在低TTL完全传播并生效后,在注册商的域名设置中更新名称服务器。

步骤4 — 传播完成后提高TTL

一旦你确认全球传播完成,将TTL提高回正常值(3600–86400)。低TTL会导致解析器更频繁地查询你的权威名称服务器,增加负载和查询成本。

检查DNS传播的免费在线工具

几个优秀的免费工具让你同时从多个全球位置查看DNS解析结果:

通过命令行检查DNS传播

对于想要精确控制和查询特定DNS服务器能力的人,命令行提供了最准确的传播状态视图。

使用dig(Linux / macOS)

从Google DNS查询A记录:

dig @8.8.8.8 yourdomain.com A

检查NS记录以验证名称服务器更新:

dig @8.8.8.8 yourdomain.com NS

检查MX记录用于电子邮件路由:

dig @1.1.1.1 yourdomain.com MX

查看缓存记录上的剩余TTL:

dig @8.8.8.8 yourdomain.com A +noall +answer

直接查询权威名称服务器(绕过所有解析器缓存):

# 找到权威名称服务器
dig yourdomain.com NS +short

# 直接从权威NS查询
dig @ns1.your-nameserver.com yourdomain.com A

使用nslookup(Windows / macOS / Linux)

# 从Cloudflare DNS查询A记录
nslookup yourdomain.com 1.1.1.1

# 检查NS记录
nslookup -type=NS yourdomain.com 8.8.8.8

# 检查MX记录
nslookup -type=MX yourdomain.com 8.8.8.8

同时比较多个解析器

按顺序运行这些命令以比较不同DNS提供商的结果:

# Google公共DNS
dig @8.8.8.8 yourdomain.com A +short

# Cloudflare
dig @1.1.1.1 yourdomain.com A +short

# OpenDNS
dig @208.67.222.222 yourdomain.com A +short

# Quad9
dig @9.9.9.9 yourdomain.com A +short

如果所有解析器返回相同的新IP地址,DNS传播完成。

专业提示:在任何名称服务器更改前,运行dig yourdomain.com NS +short并记下完整输出中的当前TTL。在计划的切换时间前至少那么多秒将TTL降低到300秒(5分钟)。切换后,解析器将在5–30分钟内获取新数据,而不是等待24–48小时 — 有效地将迁移停机时间减少到接近零。

DNS传播完成的迹象

在更改名称服务器或DNS记录后,寻找这些指标以确认传播完成:

常见问题及解决方法

即使传播完成后,某些用户仍可能遇到问题。以下是最常见的原因:

本地DNS缓存(浏览器或操作系统)

你的操作系统和浏览器都独立于ISP维护自己的DNS缓存。要清除它们:

# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

# Windows
ipconfig /flushdns

# Chrome浏览器(在地址栏中输入)
chrome://net-internals/#dns

家庭或办公室路由器缓存

许多路由器独立于操作系统缓存DNS。尝试重启路由器,或切换到移动数据进行测试 — 移动网络直接使用ISP DNS并绕过你的家庭路由器缓存。

ISP TTL覆盖

某些ISP强制执行的最小缓存TTL比你的记录指定的要长。快速的解决方法是临时将设备的DNS服务器设置更改为8.8.8.8(Google)或1.1.1.1(Cloudflare)。这些公共解析器更准确地遵守TTL值。

SOA记录的否定TTL

如果你删除了以前存在的记录,某些解析器会根据SOA记录中的否定TTL缓存NXDOMAIN响应。使用以下检查:

dig yourdomain.com SOA +short

SOA输出中的最后一个数字是否定TTL(以秒为单位)。你必须等待那么长时间,否定缓存才能过期,然后新记录才会从该解析器变得可见。

缺少胶水记录

如果你的名称服务器主机名是域本身的子域(例如ns1.yourdomain.com),你必须在注册商处创建胶水记录,将这些主机名映射到IP地址。没有胶水记录,解析器无法查找名称服务器,因为这样做需要解析同一个域 — 一个会导致解析失败的循环依赖。

常见问题(FAQ)

DNS传播需要多长时间?

DNS传播通常需要24–48小时,但大多数更新在4–8小时内完成。关键因素是现有DNS记录的TTL值。TTL为86400(1天)意味着解析器将等待最多24小时然后查询新数据。要加速传播,在更改名称服务器前至少24–48小时将TTL降低到300–600秒。

我如何检查DNS传播状态?

你可以使用whatsmydns.net和dnschecker.org等在线工具检查DNS传播,这些工具同时显示来自全球数百个位置的DNS结果。从命令行,使用dig @8.8.8.8 yourdomain.com NS查询Google的DNS,或在Windows上使用nslookup yourdomain.com 8.8.8.8。比较多个DNS服务器的结果将告诉你传播进展了多远。

为什么某些位置看到新的DNS而其他位置仍看到旧的?

这是DNS的正常行为,DNS是分布式系统。世界各地的每个解析器都有自己的缓存,并根据最后一次查询时收到的TTL值独立刷新它。不同地区的解析器在不同时间查询,所以它们的缓存在不同时间过期。与CDN不同,DNS没有中央缓存失效机制 — 每个解析器按自己的时间表拉取新数据。

在更改名称服务器前降低TTL是必要的吗?

是的,如果你想最小化停机时间,强烈推荐。最佳做法是在更改名称服务器前至少24–48小时将A记录和NS记录的TTL降低到300–600秒(5–10分钟)。这允许全球解析器在切换后更快地清空缓存。传播完成后,将TTL提高回正常值(3600–86400)以获得更好的性能。

使用AsiaGB注册你的域名

注册.com、.net、.co.th域名,包括完整的DNS管理和免费WHOIS隐私。

注册域名