菜鸟科技网

Linux重启DNS服务命令是什么?

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

Linux重启DNS服务命令是什么?-图1
(图片来源网络,侵删)

下面我将根据不同的情况,为你详细列出重启 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

注意:服务名可能是 namedbind9,具体取决于你的安装方式,如果其中一个命令报错,就尝试另一个。

Linux重启DNS服务命令是什么?-图2
(图片来源网络,侵删)

如果你使用的是 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'

希望这份详细的指南能帮助你!

分享:
扫描分享到社交APP
上一篇
下一篇