你鹅 發表於 2023-6-25 15:56:00

RHEL CentOS Debian Ubuntu 如何刷新 DNS 缓存

<p>RHEL CentOS Debian Ubuntu 如何刷新 DNS 缓存</p>
<p>全文:如何刷新 DNS 缓存 (macOS, Linux, Windows)</p>
<p>Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows)</p>
<p>请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cache/ 查看最新版。原创作品,转载请保留出处。</p>
<p>作者主页:sysin.org</p>
<hr>
<p>刷新或者清除 DNS 缓存,通常是因为有过时的 DNS 记录,需要立刻从服务端重新获取更新,常见于安全要求或者测试调试等场景。</p>
<p><img src="https://img2024.cnblogs.com/blog/2052703/202411/2052703-20241113183510069-1244285196.webp" alt="how-to-flush-dns-cache" loading="lazy"></p>
<h2 id="1-linux-刷新-dns-缓存通用参考">1. Linux 刷新 DNS 缓存通用参考</h2>
<p>Linux 可以运行 dnsmasq、nscd、unbound 或者 systemd-resolved 作为名称服务缓存守护进程 (sysin)。</p>
<h3 id="dnsmasq">dnsmasq</h3>
<p>如果你的 DNS 服务器是用 dnsmasq 实现的,用下面这个命令:</p>
<pre><code>service dnsmasq restart
</code></pre>
<p>如果 dnsmasq 服务不存在,先安装 dnsmasq,命令如下:</p>
<ul>
<li>RHEL 及其兼容发行版:<code>sudo yum install dnsmasq</code></li>
<li>Debian 及其兼容发行版:<code>sudo apt install dnsmasq</code></li>
<li>或者其他发行版对应的软件包管理命令</li>
</ul>
<p>注:DNSmasq 是一个轻巧的,容易使用的 DNS 服务工具,它可以应用在内部网和 Internet 连接的时候的 IP 地址 NAT 转换,也可以用做小型网络的 DNS 服务。</p>
<h3 id="nscd">nscd</h3>
<p>如果是清除 nscd 上的 Cache,可重新启动 nscd 服务来达成清除 DNS Cache 的效果:</p>
<pre><code>service nscd restart
# 或是
service nscd reload
</code></pre>
<p>如果 nscd 服务不存在,先安装 nscd,命令如下:</p>
<ul>
<li>RHEL 及其兼容发行版:<code>sudo yum install nscd</code></li>
<li>Debian 及其兼容发行版:<code>sudo apt install nscd</code></li>
<li>或者其他发行版对应的软件包管理命令</li>
</ul>
<h3 id="unboud">unboud</h3>
<p>unbound 使用 unbound-control 命令来管理 DNS 缓存:</p>
<pre><code># 刷新所有缓存
unbound-control flush all
# 更多命令查看帮助
unbound-control -h
</code></pre>
<p>如果 unbound-control 无法执行,先安装 unbound,命令如下:</p>
<ul>
<li>RHEL 及其兼容发行版:<code>sudo yum install unbound</code></li>
<li>Debian 及其兼容发行版:<code>sudo apt install unbound</code></li>
<li>或者其他发行版对应的软件包管理命令</li>
</ul>
<h3 id="systemd-resolved">systemd-resolved</h3>
<p>使用 resolvectl 命令刷新 DNS 缓存:</p>
<pre><code># Step 1. 查看 DNS 缓存状况
sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行
sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)
sudo resolvectl statistics
</code></pre>
<p>如果 resolvectl 无法执行,先安装 systemd-resolved,命令如下:</p>
<ul>
<li>RHEL 及其兼容发行版:<code>sudo yum install systemd-resolved</code></li>
<li>Debian 及其兼容发行版:<code>sudo apt install systemd-resolved</code></li>
<li>或者其他发行版对应的软件包管理命令</li>
</ul>
<h3 id="bind-服务端与上述客户端-dns-缓存不同">BIND (服务端,与上述客户端 DNS 缓存不同)</h3>
<p>如果是清除 BIND 服务器上的 CACHE,用这个命令:</p>
<pre><code>rndc flush
</code></pre>
<p>如果 rndc 无法执行,先安装 bind,命令如下:</p>
<ul>
<li>RHEL 及其兼容发行版:<code>sudo yum install bind</code></li>
<li>Debian 及其兼容发行版:<code>sudo apt install bind9</code></li>
<li>或者其他发行版对应的软件包管理命令</li>
</ul>
<p>以下对几个主流发行版单独说明。</p>
<h2 id="2-rhel">2. RHEL</h2>
<p>包括其兼容发行版:CentOS 及 AlmaLinux、Rocky Linux、Oracle Linux</p>
<p>RHEL 及其兼容发行版,默认不启用 DNS 查询缓存。</p>
<p>参看:Best practice for DNS caching in RHEL</p>
<p>常见解决方案:</p>
<ul>
<li>dnsmasq</li>
<li>nscd(未来版本可能会移除)</li>
<li>unbound</li>
<li>systemd-resolved</li>
</ul>
<p>dnsmasq</p>
<p>使用 dnsmasq 来启用 dns 缓存:</p>
<pre><code>yum -y install dnsmasq
systemctl enable --now dnsmasq
</code></pre>
<p>清除缓存即重启 dnsmasq 服务:</p>
<pre><code>systemctl restart dnsmasq
</code></pre>
<p>nscd</p>
<p>使用 nscd 来启用 dns 缓存:</p>
<pre><code>yum -y install nscd
systemctl enable --now nscd
</code></pre>
<p>清除缓存即重启 nscd 服务:</p>
<pre><code>systemctl restart nscd
</code></pre>
<h2 id="3-ubuntu">3. Ubuntu</h2>
<p>Ubuntu 默认运行 systemd-resolved 服务用于名称服务缓存,使用 resolvectl 命令调用 systemd-resolved.service 解析主机名、IP 地址、域名、DNS 资源记录和服务。</p>
<p><img src="https://img2024.cnblogs.com/blog/2052703/202411/2052703-20241113183510260-1850019695.webp" alt="Flush DNS Cache on Ubuntu" loading="lazy"></p>
<p>systemd-resolved.service 默认启用:</p>
<pre><code>systemctl is-enabled systemd-resolved.service
enabled
</code></pre>
<p>刷新 DNS 缓存:</p>
<pre><code># Ubuntu 22.04 示例

# Step 1. 查看 DNS 缓存状况
sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行
sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)
sudo resolvectl statistics
</code></pre>
<blockquote>
<p>备注:Ubuntu 也可以配置使用 nscd 或者 dnsmasq。</p>
</blockquote>
<p>注意:在旧版本中 resolvectl 命令曾经为 systemd-resolve,现已废弃。命令参数参数略有差异。</p>
<pre><code># Ubuntu 20.04.5 同时支持 resolvectl 和 systemd-resolve

# Step 1. 查看 DNS 缓存状况
sudo systemd-resolve --statistics

# Step 2. 清除 DNS 缓存,systemd-resolve daemon 默认在所有的 Ubuntu 系统上运行
sudo systemd-resolve --flush-caches

# Step 3. 正在查看验证结果 (sysin)
sudo systemd-resolve --statistics
</code></pre>
<h2 id="4-debian">4. Debian</h2>
<p>Debian 默认没有启用 DNS 缓存机制(基本系统)。可以配置使用 systemd-resolved.service 来启用。</p>
<blockquote>
<p>以下为 Debian 12 示例。</p>
</blockquote>
<p>启用 systemd-resolved.serivce:</p>
<pre><code>sudo apt install systemd-resolved
</code></pre>
<p>查看服务已经启用:</p>
<pre><code>systemctl is-enabled systemd-resolved.service
enabled
</code></pre>
<p>刷新 DNS 缓存:</p>
<pre><code># Step 1. 查看 DNS 缓存状况
sudo resolvectl statistics

# Step 2. 清除 DNS 缓存,systemd-resolved daemon 默认在所有的 Ubuntu 系统上运行
sudo resolvectl flush-caches

# Step 3. 正在查看验证结果 (sysin)
sudo resolvectl statistics
</code></pre>
<blockquote>
<p>备注:Debian 也可以配置使用 nscd 或者 dnsmasq。</p>
</blockquote>
<hr>
<p>上述操作通常也和浏览器刷新 DNS 缓存配合使用。</p>
<ul>
<li>如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari)</li>
</ul><br><br>
来源:https://www.cnblogs.com/sysin/p/17503143.html
頁: [1]
查看完整版本: RHEL CentOS Debian Ubuntu 如何刷新 DNS 缓存