如何在 Linux(和 FreeBSD)上刷新 DNS 解析器缓存

如何在 Linux(和 FreeBSD)上刷新 DNS 解析器缓存

我是多个 Linux 和 FreeBSD 服务器的管理员,我遇到了一个问题:

服务器运行一个工具,该工具每分钟会为整个网络执行大量 DNS 查询。执行查询时,结果会缓存到整个系统。如果 DNS 条目发生变化,则更改会在很晚之后才会被采用。

刷新 DNS 缓存的方法是什么?我的老板几乎强迫我将软件移至有呼叫的 Windows ipconfig /flushdns。我告诉我的老板我将在周末解决这个问题,周一所有 Linux 和 FreeBSD 都将刷新缓存。如果我不这样做,他会强迫我制作 Windows 服务器并在其上运行软件。

如何在 Linux 和 FreeBSD 上刷新 DNS 缓存?

答案1

我不明白你的问题,因为你说了一些胡言乱语。

如果您使用的 Linux/Unix 系统未运行 DNS 服务器“named/bind/other”,则系统不会缓存任何 DNS 查询。应用程序(DNS 客户端)每次都只是查询 DNS 服务器,而不进行缓存,它们每次都查询 DNS 服务器。如果您使用 DNS 服务器“named/bind”并想清除缓存,只需重新启动此服务(Freebsd: /etc/rc.d/named restart),但这样做毫无意义。

如果 DNS 条目发生变化,则该变化会在很晚之后才会生效。

这是怎么回事?您是否运行 DNS 服务器?如果您运行辅助 DNS 服务器,则只会从主服务器获取区域的副本,并且没有必要刷新缓存。您可以通过删除区域文件并重新启动 DNS 服务来从主服务器推送服务器更新区域。如果您运行主 DNS 并想要更新区域信息,请更改区域中的序列并重新启动服务:

# /etc/rc.d/named restart (for named)
# rndc (for bind9)

更新区域信息。要检查是否获得正确的 DNS 答案,请使用:

# dig @dns_server example.com

促使我将软件移至具有 ipconfig /flushdns 的 Windows

为了什么?

答案2

假设您正在运行名称服务缓存守护程序,请以 root 身份运行“nscd -i hosts”

答案3

您可能想要执行以下操作的组合。

如果您知道 DNS 区域中的各种条目变化很快,则请将该区域的 TTL 设置为较小的值。

通常,在标准版本的 Linux 中会运行一个 NameServerCacheDaemon (nscd) 进程(不确定 FreeBSD 是否如此)。清除缓存的快速方法是重新启动此守护进程。

最后,如果您在主机上运行缓存 DNS 服务器,则可以轻松重新启动 DNS 服务,这将清除缓存。我认为,如果您使用 dns control 命令,甚至可能会清除缓存。

答案4

对于 FreeBSD,您可以通过以下命令删除 arp

arp -da

相关内容