当您使用域名访问网站时,您的系统会向 dns 服务器发送请求以获取该域的 ip 地址。此域 ip 地址对保存在 dns 缓存中供以后使用,因此您不必每次都向 dns 服务器发送请求以建立连接。
但有时,本地 dns 缓存会损坏并导致 http 错误。值得庆幸的是,在 linux 操作系统中刷新和重建 dns 缓存非常容易。这是如何做到的。
为什么要在 linux 上刷新 dns 缓存?您可能想要重建存储在系统上的 dns 缓存的原因有多种。如果您的dns记录过时了,您可能想要从dns服务器重新获取它。另外,如果您担心系统受到威胁了,您可能需要确保dns缓存未被篡改,也被称为dns欺骗。
当您刷新 dns 缓存时,系统必须再次 ping dns 服务器并从中获取新的域 ip 地址记录,从而在此过程中删除任何过时或受损的数据。
如何在 linux 上查看本地 dns 缓存在systemd之前,大多数linux发行版都没有系统范围的dns缓存,除非像dnsmasq或nscd这样的程序是手动设置的。systemd 附带 systemd-solved,这是一项将域名解析为 ip 地址并缓存 dns 条目的服务。
以下各节将指导您如何查看由 systemd 解析、nscd 和 dnsmasq 生成的 dns 缓存内容,以便您在决定刷新缓存数据之前了解缓存的数据。
查看系统解析的 dns 缓存要查看 systemd 解析的缓存记录,您需要先暂时终止服务,然后将其日志导出到文件中。
首先发送 sigusr1 信号以终止 systemd 解析的服务:
linuxmi@linuxmi ~/www.linuxmi.com % sudo killall -usr1 systemd-resolved[sudo] linuxmi 的密码:
使用 journalctl 命令和标准输出运算符将输出保存到文本文件:
linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u systemd-resolved > ~/cache.txtlinuxmi@linuxmi ~/www.linuxmi.com
然后,您可以使用 vim 等文本编辑器查看文件的内容:
在文件中,搜索“cache:”,方法是按 escape,键入“/cache:”,然后按 enter 键。在“cache:”下方列出的所有 dns 记录都包含在本地 dns 缓存中。若您在使用 vim,请按下 n 键以跳转至下一组 dns 条目。
查看 nscd 的本地 dns 缓存要查看 nscd 生成的本地缓存,您需要使用 string 命令读取 nscd 主机数据库的内容。
在基于 debian 和 ubuntu 的发行版上,此文件位于 /var/cache/nscd/hosts。运行以下命令以查看文件:
linuxmi@linuxmi ~/www.linuxmi.com % sudo strings /var/cache/nscd/hosts | uniq
要查看有关 nscd dns 高速缓存的一般统计信息,请使用 -g 标志:
linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -g
显示由 dnsmasq 生成的 dns 缓存获取确切的记录并不容易,因为 dnsmasq 在内存中存储 dns 缓存。您可以发送终止信号给 dnsmasq 并记录其输出,以获取处理的 dns 查询数量。
为此,首先,使用 systemctl 命令确保 dnsmasq 已启动并正在运行:
linuxmi@linuxmi ~/www.linuxmi.com % sudo systemctl status dnsmasq
如果状态显示“活动 active”,请运行以下命令以终止该服务:
linuxmi@linuxmi ~/www.linuxmi.com % sudo pkill -usr1 dnsmasq
使用 journalctl 命令,提取 dnsmasq 日志并将它们保存到文本文件中:
linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u dnsmasq > ~/cache.txt
最后,使用文件查看实用程序(如 cat 或更少)查看文件的内容:
linuxmi@linuxmi ~/www.linuxmi.com % cat ~/cache.txt
如何在 linux 上刷新 dns 缓存刷新 dns 缓存意味着从计算机中删除缓存的 dns 记录。这将迫使它向dns服务器发送请求,以获取新的dns条目。
以下是在 linux 上刷新 dns 缓存的方法:
使用 systemd 解析您可以使用 resolvectl 命令刷新 systemd 解析存储的 dns 缓存:
linuxmi@linuxmi ~/www.linuxmi.com % sudo resolvectl flush-caches
如果您运行的是 ubuntu 17.04 或 18.04,请使用 systemd 解析的命令刷新缓存:
sudo systemd-resolved --flush-caches
在 linux 上刷新 nscd dns 缓存
删除 nscd 的 dns 缓存的最便捷方法是重新启动服务。您可以通过运行以下命令来执行此操作:
linuxmi@linuxmi ~/www.linuxmi.com % sudo /etc/init.d/nscd restart
如果这不起作用,首先,检查存储在pc上的本地缓存是否持久。您可以使用 -g 标志进行验证:
sudo nscd -g
如果是这种情况,请使用带有 nscd 命令的 –i 标志来清除记录(i 代表 invalidate):
linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -i hosts
删除 dnsmasq dns 缓存
刷新 dnsmasq 生成的 dns 缓存很简单。由于缓存存储在内存中,因此重新启动服务会删除所有存储的条目。
要重新启动 dnsmasq,请运行以下 systemctl 命令:
sudo systemctl restart dnsmasq
或者,发出以下命令:
service dnsmasq restart
如果出现提示,请输入管理员密码。现在要重新启动 dnsmasq,所有缓存中存在的 dns 条目将被清除。
建议刷新 dns 缓存后,检查本地缓存条目以确认数据已经成功删除。您可以使用 linux 命令之一的 dig 来进行网络故障排除,并查看输出中的“查询时间”值。假如超过 0 毫秒,则说明缓存已经成功清除(若为 0 毫秒,则表示域记录仍存在于缓存中)。
dig google.com
清除谷歌浏览器的dns缓存您经常使用的 web 浏览器也会缓存 dns 记录。输入 url 时,系统会在本地浏览器缓存中搜索缓存条目。如果未找到,它将检查本地系统缓存中的记录。清除 web 浏览器的 dns 缓存非常重要,因为它优先于系统范围的缓存。
为了演示,让我们刷新谷歌浏览器中的dns缓存。在其他浏览器上也有一些方法可以做到这一点,所以最好 google 一下如何使用你使用的浏览器做到这一点。
首先,在url栏中键入“chrome://net-internals/#dns”并按enter键:
点击“清除主机缓存”按钮来清除谷歌浏览器中存储的dns条目。
linux是学习网络的最佳操作系统linux 乍一看可能看起来很复杂,但如果你花一些时间来学习它是如何工作的,你很快就会意识到它很棒,甚至可能比 windows 或 macos 更好。
大多数在线服务器都运行 linux,如果您想学习网络或想知道计算机通常如何工作,这也是 linux 理想选择的原因之一。
以上就是如何在 linux 上查看和刷新 dns 缓存的详细内容。