如何刷新 DNS 缓存 (macOS, Linux, Windows)

2136 admin
世界杯历届冠军名单

如何刷新 DNS 缓存 (macOS, Linux, Windows)

Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows)

请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cache/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org

刷新或者清除 DNS 缓存,通常是因为有过时的 DNS 记录,需要立刻从服务端重新获取更新,常见于安全要求或者测试调试等场景。

1. Apple macOS

 macOS Catalina and later

打开终端,输入如下命令来重置 DNS 缓存,适用于 macOS 10.15 至 14.x:

sudo killall -HUP mDNSResponder; sudo dscacheutil -flushcache

 OS X Yosemite and later

打开终端,输入如下命令来重置 DNS 缓存,适用于 OS X 10.10.4 至 10.14.x:

sudo killall -HUP mDNSResponder

打开终端,输入如下命令来重置 DNS 缓存,适用于 OS X 10.10 至 10.10.3:

sudo discoveryutil mdnsflushcache

 OS X Mavericks, Mountain Lion, and Lion

打开终端,输入如下命令来重置 DNS 缓存,适用于 OS X 10.9.5 及之前版本:

sudo killall -HUP mDNSResponder

 Mac OS X Snow Leopard

打开终端,输入如下命令来重置 DNS 缓存,适用于 OS X 10.6 至 10.6.8:

sudo dscacheutil -flushcache

参考:Reset the DNS cache in OS X

2. FreeBSD

FreeBSB 自带 nscd(Name Service Cache Daemon),默认没有启用。

以下为 FreeBSD 12 和 13 示例。

运行如下命令启动 nscd 并设置为开机自动运行 (sysin):

sudo service nscd enable && sudo service nscd start

清除缓存即重启 nscd 服务:

sudo service nscd restart

3. Linux

3.1 Linux 刷新 DNS 缓存通用参考

Linux 可以运行 dnsmasq、nscd、unbound 或者 systemd-resolved 作为名称服务缓存守护进程 (sysin)。

dnsmasq

如果你的 DNS 服务器是用 dnsmasq 实现的,用下面这个命令:

service dnsmasq restart

如果 dnsmasq 服务不存在,先安装 dnsmasq,命令如下:

RHEL 及其兼容发行版:sudo yum install dnsmasq

Debian 及其兼容发行版:sudo apt install dnsmasq

或者其他发行版对应的软件包管理命令

注:DNSmasq 是一个轻巧的,容易使用的 DNS 服务工具,它可以应用在内部网和 Internet 连接的时候的 IP 地址 NAT 转换,也可以用做小型网络的 DNS 服务。

nscd

如果是清除 nscd 上的 Cache,可重新启动 nscd 服务来达成清除 DNS Cache 的效果:

service nscd restart

# 或是

service nscd reload

如果 nscd 服务不存在,先安装 nscd,命令如下:

RHEL 及其兼容发行版:sudo yum install nscd

Debian 及其兼容发行版:sudo apt install nscd

或者其他发行版对应的软件包管理命令

unboud

unbound 使用 unbound-control 命令来管理 DNS 缓存:

# 刷新所有缓存

unbound-control flush all

# 更多命令查看帮助

unbound-control -h

如果 unbound-control 无法执行,先安装 unbound,命令如下:

RHEL 及其兼容发行版:sudo yum install unbound

Debian 及其兼容发行版:sudo apt install unbound

或者其他发行版对应的软件包管理命令

systemd-resolved

使用 resolvectl 命令刷新 DNS 缓存:

# Step 1. 查看 DNS 缓存状况

sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行

sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)

sudo resolvectl statistics

如果 resolvectl 无法执行,先安装 systemd-resolved,命令如下:

RHEL 及其兼容发行版:sudo yum install systemd-resolved

Debian 及其兼容发行版:sudo apt install systemd-resolved

或者其他发行版对应的软件包管理命令

BIND (服务端,与上述客户端 DNS 缓存不同)

如果是清除 BIND 服务器上的 CACHE,用这个命令:

rndc flush

如果 rndc 无法执行,先安装 bind,命令如下:

RHEL 及其兼容发行版:sudo yum install bind

Debian 及其兼容发行版:sudo apt install bind9

或者其他发行版对应的软件包管理命令

以下对几个主流发行版单独说明。

3.2. RHEL

包括其兼容发行版:CentOS 及 AlmaLinux、Rocky Linux、Oracle Linux

RHEL 及其兼容发行版,默认不启用 DNS 查询缓存。

参看:Best practice for DNS caching in RHEL

常见解决方案:

dnsmasq

nscd(未来版本可能会移除)

unbound

systemd-resolved

dnsmasq

使用 dnsmasq 来启用 dns 缓存:

yum -y install dnsmasq

systemctl enable --now dnsmasq

清除缓存即重启 dnsmasq 服务:

systemctl restart dnsmasq

nscd

使用 nscd 来启用 dns 缓存:

yum -y install nscd

systemctl enable --now nscd

清除缓存即重启 nscd 服务:

systemctl restart nscd

3.3. Ubuntu

Ubuntu 默认运行 systemd-resolved 服务用于名称服务缓存,使用 resolvectl 命令调用 systemd-resolved.service 解析主机名、IP 地址、域名、DNS 资源记录和服务。

systemd-resolved.service 默认启用:

systemctl is-enabled systemd-resolved.service

enabled

刷新 DNS 缓存:

# Ubuntu 22.04 示例

# Step 1. 查看 DNS 缓存状况

sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行

sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)

sudo resolvectl statistics

备注:Ubuntu 也可以配置使用 nscd 或者 dnsmasq。

注意:在旧版本中 resolvectl 命令曾经为 systemd-resolve,现已废弃。命令参数参数略有差异。

# Ubuntu 20.04.5 同时支持 resolvectl 和 systemd-resolve

# Step 1. 查看 DNS 缓存状况

sudo systemd-resolve --statistics

# Step 2. 清除 DNS 缓存,systemd-resolve daemon 默认在所有的 Ubuntu 系统上运行

sudo systemd-resolve --flush-caches

# Step 3. 正在查看验证结果 (sysin)

sudo systemd-resolve --statistics

3.4. Debian

Debian 默认没有启用 DNS 缓存机制(基本系统)。可以配置使用 systemd-resolved.service 来启用。

以下为 Debian 12 示例。

启用 systemd-resolved.serivce:

sudo apt install systemd-resolved

查看服务已经启用:

systemctl is-enabled systemd-resolved.service

enabled

刷新 DNS 缓存:

# Step 1. 查看 DNS 缓存状况

sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行

sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)

sudo resolvectl statistics

备注:Debian 也可以配置使用 nscd 或者 dnsmasq。

4. Microsoft Windows

清除 dns 缓存内容:

ipconfig/flushdns

查看 dns 缓存内容:

ipconfig/displaydns

Windows 下的 DNS Cache 是由 DNS Client 后台进程控制的,你可以在 “服务” 中将其关闭,这样 windows 就不会进行 DNS 缓存,每次都将直接查询 DNS Server。

上述操作通常也和浏览器刷新 DNS 缓存配合使用。

如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari)

孙悟空到底活了多少岁? NVIDIA GeForce GTX 980 vs NVIDIA GeForce GTX 1080}。 GPU比较规格和基准