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

慈云数据 1年前 (2024-04-08) 技术支持 64 0

如何刷新 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 记录,需要立刻从服务端重新获取更新,常见于安全要求或者测试调试等场景。

how-to-flush-dns-cache

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 及 AlmaLinuxRocky 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 资源记录和服务。

              Flush DNS Cache on Ubuntu

              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)
微信扫一扫加客服

微信扫一扫加客服