如何在Linux中清除或者刷新DNS缓存

时间:2020-03-21 11:44:11  来源:igfitidea点击:

此简要教程介绍了在Linux操作系统中清除或者刷新DNS缓存的所有可能方法。
对于那些想知道的人来说,DNS缓存(或者有时称为DNS解析器缓存)是由操作系统维护的小临时数据库。
它存储有关所有访问的和其他Internet域的信息。
换句话说,DNS缓存包含最近的DNS查找。
当我们多次访问同一时,OS从本地DNS缓存数据库而不是实际的公共DNS服务器检索该的DNS记录。
因此,DNS缓存改善了加载时间并减少了原点DNS服务器的带宽/CPU消耗。

你为什么要清除或者刷新DNS缓存?

可能有很多原因可以清除本地DNS缓存。
例如,我们可能已经自定义了或者更改了域的DNS设置,或者我们面临着某些互联网连接问题。
在这种情况下,如果我们尝试访问该,操作系统可能会从本地DNS缓存中获取站点的缓存版本。
因此,清除本地DNS缓存将从本地DNS缓存数据库中删除所有条目,并强制系统与实际DNS服务器的新条目重新填充DNS缓存,并显示的新副本。

在Linux中清除或者刷新DNS缓存

默认情况下,未在Linux中的操作系统级别安装和/或者启用DNS缓存。
相反,Web浏览器等应用程序维护自己的内部缓存。
因此,我们可以简单地清除浏览器的缓存或者重新启动它们以修复Internet连接问题,请解决DNS欺骗(例如DNS缓存中毒)问题并解决陈旧内容问题。
如果Linux发行版使用任何DNS缓存服务,则需要如下所述手动清除它们。
有多种方法可以清除DNS缓存。
它差异取决于我们使用的Linux分布和DNS缓存服务。
其中我包含了清除Linux中最常用的DNS缓存服务的说明。

1.清除Systemd-Resolve DNS缓存服务

SystemD-Resolve是一个Systemd服务,为本地应用程序提供系统级DNS缓存服务。
它是默认安装的系统包的一部分。
默认情况下,在Fedora和Ubuntu等大多数现代Linux操作系统中默认启用Systemd已解决的服务。
首先,让我们检查SystemD Descripved Service是否有效或者不使用命令:

$sudo systemctl is-active systemd-resolved.service

如果启用了SystemD已解析服务,则会在输出中看到"活动"。
如果不活动,它将打印"非活动"。

正如我们在上面的输出中看到的那样,SystemD已解析的服务在我的系统中处于活动状态。

让我们查看使用命令查看systemd-destve缓存服务的统计信息:

$sudo systemd-resolve --statistics

示例输出:

DNSSEC supported by current servers: no
Transactions              
Current Transactions: 0   
  Total Transactions: 3117

Cache                     
  Current Cache Size: 58  
          Cache Hits: 1248
        Cache Misses: 1891

DNSSEC Verdicts           
              Secure: 0   
            Insecure: 0   
               Bogus: 0   
       Indeterminate: 0

如我们所见,上述输出列出了当前缓存大小,命中和错过缓存的总值。

要刷新系统 - 解析缓存,请运行:

$sudo systemd-resolve --flush-caches

在成功执行时,我们将不会看到任何输出。

现在,检查Systemd-解析统计信息以验证本地DNS缓存是否已清除。

$sudo systemd-resolve --statistics

我们现在将看到当前缓存大小为零。

DNSSEC supported by current servers: no
Transactions              
Current Transactions: 0   
  Total Transactions: 3155

Cache                     
  Current Cache Size: 0   
          Cache Hits: 1255
        Cache Misses: 1922

DNSSEC Verdicts           
              Secure: 0   
            Insecure: 0   
               Bogus: 0   
       Indeterminate: 0

2.清除NSCD DNS缓存服务

nscd,名称服务缓存守护程序的简短是一个缓存守护程序,为最常见的名称服务请求提供缓存。
它是大多数基于Redhat的系统的首选缓存服务。
如果Linux系统正在使用NSCD缓存服务,可以通过简单地重新启动下面的NSCD服务来清除或者刷新本地DNS缓存服务:

$sudo systemctl restart nscd.service

或者,

$sudo service nscd restart

或者,

$sudo /etc/init.d/nscd restart

3.清除绑定/命名为DNS缓存服务

Berkeley Internet名称域(短绑定)是当今最受欢迎的开源DNS服务器。
如果我们使用绑定用于缓存DNS查询,请使用以下命令在Linux中清除/刷新绑定缓存服务:

$sudo systemctl restart named

或者,

$sudo service named reload

或者,

$sudo /etc/init.d/named restart

或者,

$sudo rndc reload

或者,

$sudo rndc exec

最新的出价版本允许我们对特定域的DNS缓存清除DNS缓存。
以下命令清除onitad.com域的DNS缓存:

$sudo rndc flushname theitroad.com

我们还可以清除以下LAN和WAN区域的DNS缓存:

$sudo rndc flush lan
$sudo rndc flush wan

4.清除DNSMASQ DNS缓存服务

DNSMASQ是一个轻量级DHCP和缓存DNS服务器,支持PXE和TFTP服务器。
它适用于资源受限路由器和防火墙来管理小型网络。

如果我们使用DNSMASQ作为缓存服务,则可以像下面的那样刷新本地DNS缓存服务:

$sudo systemctl restart dnsmasq

另一种清除Ubuntu和其他Ubuntu变体中的本地DNS缓存等的另一种方法是运行以下命令:

$sudo /etc/init.d/dns-clean restart