如何在Linux中清除或者刷新DNS缓存
此简要教程介绍了在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