Domain IP Lookup

实际如何选择 TTL

60-300s迁移进行中:传播快,查询更多
3,600s对大多数普通记录来说是合理的默认值
86,400sMX、NS 等很少变动的记录
DNS 基础

如何刷新 DNS 缓存(Windows、macOS、Linux、浏览器)

4 分钟阅读

您的设备会保存 DNS 应答,这样就不必为每个请求都重新查询。记录变更之后,您之所以一直看到旧的目标,正是因为这份保存下来的副本。刷新会丢弃它,并强制重新查询。

不过,在刷新任何东西之前,不妨花三十秒确认一下问题是否真的出在缓存过期上,因为多数时候并不是。

第一步:确认问题出在缓存上

直接查询权威域名服务器,绕过您与源头之间的所有缓存。

询问源头,而不是缓存
dig +short example.com @ns1.example.com
  • 权威服务器显示新值,您看到的却是旧值:问题出在缓存上,刷新可能有帮助。
  • 权威服务器显示的也是旧值:刷新不会改变任何结果。记录没有保存成功,或者您是在一家您的域名并未委派给的服务商处编辑的。

核心要点

刷新只会清除您自己控制的设备上的缓存,碰不到您的 ISP 的解析器,也碰不到其他任何人的解析器,它们会按各自的时间表过期,由记录的 TTL 决定。

Windows

以管理员身份打开命令提示符或 PowerShell,然后执行:

命令提示符(管理员)
ipconfig /flushdns

您应该会看到提示 Successfully flushed the DNS Resolver Cache(中文系统中为“已成功刷新 DNS 解析缓存”)。没有管理员权限时,命令会因权限错误而失败。

清除之前先查看缓存内容
ipconfig /displaydns

macOS

自 Big Sur 以来的所有版本,都只需一条命令。系统会提示您输入密码。

终端
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

成功时没有任何输出,没有消息就说明成功了。两部分缺一不可:前一条清除目录服务缓存,后一条重启持有其余缓存的解析器守护进程。

Linux

Linux 因发行版而异,因为使用的解析器守护进程不同。请先检查您用的是哪一种:

确认您使用的解析器
systemctl is-active systemd-resolved
systemctl is-active nscd
systemctl is-active dnsmasq
systemd-resolved(Ubuntu 18.04+、Fedora 及大多数现代发行版)
sudo resolvectl flush-caches

# Confirm it worked:
resolvectl statistics
nscd
sudo systemctl restart nscd
dnsmasq
sudo systemctl restart dnsmasq

浏览器

浏览器有自己的 DNS 缓存,独立于操作系统。刷新系统缓存不会清除它,这就是为什么在 Chrome 中网站可能仍从旧地址加载,而 dig 已经显示新地址。

浏览器清除方法
Chrome / Edge / Brave访问 chrome://net-internals/#dns,点击 Clear host cache(清除主机缓存)
Firefox访问 about:networking#dns,点击 Clear DNS Cache(清除 DNS 缓存)
Safari使用 macOS 的缓存,需在系统层面刷新

您的路由器

家用路由器经常为整个家庭缓存 DNS,所以有时逐台刷新每个设备仍然无效。重启路由器就能清除它,虽然粗暴,但有效。有些固件也会在管理界面中提供清除 DNS 缓存的选项。

否定缓存:为什么新记录看起来不存在

有一种情况会让人意外,而且无论怎么刷新常规位置都解决不了:您新建了一个子域名,立即查询,得到“不存在”,之后即便记录明明已经生效,它仍会在一段时间内继续返回这个结果。

这就是否定缓存。当解析器被告知某个名称不存在时,它会像缓存真实应答一样,把这种不存在也缓存下来。再次查询,命中的只是缓存的否定结果。

缓存的时长并不由您刚创建的记录决定,而是来自该区域 SOA 记录的最后一个字段,即最小 TTL。常见取值在 300 到 3600 秒之间,所以新创建的名称最长可能有一小时看起来像是不存在。

刷新本地缓存在这里会有帮助,因为否定应答和其他应答一样,会在每一层被存储。但您的 ISP 的解析器持有自己的那一份,它只能等待过期。这段时长从何而来,请参阅 TTL。

缓存为什么会存在

值得克制那种习惯性刷新的冲动。DNS 缓存在做实实在在的工作:一次典型的页面加载,要解析网站本身、字体、统计分析和图片的名称。如果没有缓存,每一项都意味着在获取任何一个字节之前,先来一次完整的往返。

缓存也在保护您。如果您的 DNS 服务商发生故障,持有您记录未过期副本的解析器会继续提供这些记录,访客毫无察觉。激进地清除缓存,就等于拿掉了这层缓冲。请在追查某个具体的过期应答时才刷新,而不要把它当作日常的清洁习惯。

完整流程,依次进行

  1. 验证权威记录

    确认新值确实已在源头生效。如果没有,就到此为止,这不是缓存问题。

  2. 刷新浏览器缓存

    这是最常见的原因,也最容易清除。或者直接在隐私窗口中测试。

  3. 刷新系统缓存

    使用上文中适用于您所在平台的命令。

  4. 重启路由器

    如果同一网络中的其他设备也显示旧值,这很可能就是共享的那一层。

  5. 换一个网络测试

    移动数据使用的是一条完全独立的解析器链路。如果在那里正常,说明剩下的过期缓存在您的 ISP 那里,只有时间能解决。

如果全部刷新之后您看到的仍是旧应答,说明您在等待一个不受您控制的缓存。DNS 传播解释了这段等待由什么决定,TTL 则说明下次如何缩短它。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。

常见问题