最核心的命令是 systemctl restart,但你需要指定正确的服务名。

下面我将根据不同的情况,为你详细列出重启 DNS 的命令。
使用 systemd 的新版 Linux 发行版(如 Ubuntu 16.04+, Debian 8+, CentOS 7+, RHEL 7+, Fedora, Arch Linux 等)
这是目前最主流的方式。systemd 是系统和服务管理器,所有服务都作为 systemd 单元来管理。
如果你使用的是 BIND (named)
BIND 是最流行的 DNS 服务器软件之一。
# 重启 BIND 服务 sudo systemctl restart named # 或者使用完整的服务名 sudo systemctl restart bind9
注意:服务名可能是 named 或 bind9,具体取决于你的安装方式,如果其中一个命令报错,就尝试另一个。

如果你使用的是 dnsmasq
dnsmasq 是一个轻量级的 DNS、DHCP 和 TFTP 服务器,常用于家庭路由器和小型网络。
# 重启 dnsmasq 服务 sudo systemctl restart dnsmasq
如果你使用的是 Unbound
Unbound 是一个验证、递归、缓存型 DNS 解析器,专注于安全和隐私。
# 重启 Unbound 服务 sudo systemctl restart unbound
如果你使用的是 NetworkManager 的 DNS 功能
在一些桌面版 Linux(如 Ubuntu, Fedora)中,DNS 解析可能由 NetworkManager 管理,而不是一个独立的 DNS 服务器服务,这种情况下,重启网络服务即可刷新 DNS 配置。
# 重启 NetworkManager 服务,这会刷新所有网络接口的配置,包括 DNS sudo systemctl restart NetworkManager
使用 SysVinit 的旧版 Linux 发行版(如 CentOS 6, RHEL 6, Debian 7 等)
这些老系统使用 service 命令来管理服务。
如果你使用的是 BIND (named)
# 重启 BIND 服务 sudo service named restart # 或者 sudo service bind9 restart
如果你使用的是 dnsmasq
# 重启 dnsmasq 服务 sudo service dnsmasq restart
如果你使用的是 NetworkManager
# 重启 NetworkManager 服务 sudo service NetworkManager restart
使用 systemd 但配置文件更改后,需要重新加载配置
有时你只是修改了 DNS 服务器的配置文件(如 /etc/named.conf),并不想完全重启服务,而是想让服务在运行时重新加载新配置,这时应该使用 reload 命令,这样能避免正在进行的 DNS 查询被中断。
# 对于 BIND/named sudo systemctl reload named # 对于 dnsmasq sudo systemctl reload dnsmasq # 对于 Unbound sudo systemctl reload unbound
客户端 DNS 缓存刷新
如果你指的是客户端(比如你的 Linux 电脑)的 DNS 缓存,那命令又不一样了。
清理 systemd-resolved 的缓存(现代 Ubuntu, Debian, CentOS 8+ 等)
这些系统使用 systemd-resolved 服务来管理本地 DNS 缓存。
# 清空 systemd-resolved 的 DNS 缓存 sudo systemd-resolve --flush-caches
清理 nscd 的缓存(一些旧版系统)
nscd (Name Service Cache Daemon) 用于缓存用户、组和主机名等信息。
# 清空 nscd 的所有缓存 sudo nscd -i hosts
清理 dnsmasq 的缓存(如果客户端也在运行 dnsmasq)
# 向 dnsmasq 的 PID 发送 SIGUSR1 信号以清空缓存 # 首先需要找到 dnsmasq 的进程 ID sudo killall -USR1 dnsmasq
总结与快速参考
| 场景 | DNS 软件/服务 | 命令 (现代系统 systemd) |
命令 (旧系统 SysVinit) |
|---|---|---|---|
| 服务器重启 | BIND / named | sudo systemctl restart named |
sudo service named restart |
| dnsmasq | sudo systemctl restart dnsmasq |
sudo service dnsmasq restart |
|
| Unbound | sudo systemctl restart unbound |
(通常不用于旧系统) | |
| 客户端刷新 | systemd-resolved |
sudo systemd-resolve --flush-caches |
(不适用) |
nscd |
sudo nscd -i hosts |
sudo nscd -i hosts |
|
| 仅重载配置 | BIND / named | sudo systemctl reload named |
sudo service named reload |
如何确定我的服务名是什么?
如果你不确定服务名,可以使用以下命令来查找:
# 查找所有与 dns 或 named 相关的服务 systemctl list-units --type=service | grep -E 'named|dns|bind' # 或者查找正在运行的进程 ps aux | grep -E 'named|dnsmasq|unbound'
希望这份详细的指南能帮助你!
