我正在编写一种方法来刷新不同 Linux 发行版上的 dns 缓存。我想支持使用 Ubuntu-server、Ubuntu-desktop、Centos8-desktop 和 Centos7-server(nogui) 执行此操作
我分别构建了 4 个虚拟机。
对于ubuntu来说很简单。我只要跑sudo systemd-resolve --flush-caches
就可以了。
然而,对于 centos 发行版,我似乎无法找到一种方法来完成清除缓存,甚至无法理解 DNS 的工作原理。我在网上读到的是,对于 centos/rhel 我可以使用dnsmasq
或者nscd
基于这个链接,但我的结果不同......
在centos8机器上,我发现该dnsmasq
服务在部署后被停止并禁用。尝试启动服务时出现错误,指出端口 53 已被占用。我查了一下ss -tulpn
,发现端口 53 被 virb0 接口占用,该接口是libvirtd
.看来centos8流中默认安装了kvm?不管怎样,我很好奇 dns / 缓存如何在启用此服务的情况下工作。如何清除启用了 libvirtd 的 centos 主机上的缓存?
在 cnetos7 盒子上,我没有找到dnsmasq
任何nscd
服务。所以我有点困惑 dns 缓存是如何工作的?
如何确定 dns 在 centos8 和 centos7 主机上的缓存方式。如何查看当前的dns缓存?以及如何清除缓存?
注意我nameserver
在/etc/resolve
每个 centos 盒子上配置了两个。
答案1
简短的回答,在 centos7 和 centos8 上默认情况下似乎没有启用 dns 缓存。
好的,我发现了这个帖子它详细说明了我的想法。如果没有 systemd,linux 机器上就没有 dns 缓存。有两个替代选项,即nscd
服务或dnsmasq
。看来 nscd 很不稳定,在较新的盒子上找不到。dnsmasq
默认情况下,所有盒子上都不包含它,因此需要安装并启用它。
我能够让 centos8 盒子正常工作这个帖子。看来 dnsmasq、libvirt 和 systemd-resolve 都已安装。但它们都没有真正能够完成缓存工作。需要手动启用它。systemctl start systemd-resolved.service
之后我systemctl enable systemd-resolved.service
修复了centos8盒子。
centos7机器上没有任何可以启用缓存的东西。所以我必须弄清楚如何设置它。可能会设置 systemd-resolved 以保持 NetworkManager、systemd 和当今趋势的标准化。
答案2
您可以尝试使用命令(如root
):
resolvectl flush-caches
如果你刚刚nscd
重新启动它。另请检查您是否有 AD 绑定并sssd
可以缓存一些记录。