sudo systemctl restart systemdresolved
(Systemd)、sudo service named restart
或sudo /etc/init.d/named restart
,具体用法Linux下DNS服务重启命令详解
在Linux系统中,DNS(域名系统)是网络通信的核心组件之一,负责将域名解析为IP地址,当遇到DNS配置更改、缓存异常或服务故障时,重启DNS服务成为快速恢复功能的有效手段,以下是针对不同场景和发行版的详细操作指南:
确定使用的DNS服务类型
Linux支持多种DNS服务器软件,常见的包括:
| 软件名称 | 典型应用场景 | 默认服务名示例 |
||||
| BIND (Named) | 企业级权威/从属DNS服务器 | named
, bind9
|
| Dnsmasq | 轻量级缓存转发+DHCP集成 | dnsmasq
|
| Systemdresolved | 本地主机解析管理(现代系统默认) | systemdresolved
|
| PowerDNS | 高性能多线程架构 | pdns
|
| Unbound | 注重安全的递归解析器 | unbound
|
通过ps aux | grep <关键字>
或检查配置文件路径(如/etc/named.conf
)可确认当前运行的服务类型。
按初始化系统分类的重启方法
✅1. Systemd管理系统(推荐用于CentOS 7+/Ubuntu 16.04+)
# 重启Systemd内置解析器 sudo systemctl restart systemdresolved # 针对BIND服务的专用命令 sudo systemctl restart named # 针对Dnsmasq服务的专用命令 sudo systemctl restart dnsmasq
⚠️ 状态验证:执行后建议运行systemctl status systemdresolved
查看运行状态,输出应包含Active: active (running)
字样。
➡️2. SysVinit传统系统(适用于旧版CentOS 6/Ubuntu 14.04及更早版本)
# 通用网络服务重启(间接影响DNS) sudo service network restart # 直接调用Init脚本(以BIND为例) sudo /etc/init.d/named restart # Dnsmasq专属命令 sudo service dnsmasq restart
注意:部分系统中服务名称可能为
bind9
而非named
,可通过ls /etc/init.d/
列出可用脚本进行确认。
特殊场景处理方案
🔧1. 完全重置DNS配置
当需要清除历史记录并重建链接时:
# Systemd环境操作流程 sudo systemctl stop systemdresolved # 停止服务 sudo systemctl disable systemdresolved # 禁用开机自启 sudo rm f /etc/resolv.conf # 删除旧配置文件 sudo ln s /run/systemd/resolve/resolv.conf /etc/resolv.conf # 创建符号链接 sudo systemctl start systemdresolved # 重新启动服务 # SysVinit兼容步骤 sudo service dns stop # 停止传统守护进程 sudo service dns disable # 禁用自动启动 sudo rm f /etc/resolv.conf # 清理残留配置 sudo ln s /run/systemd/resolve/resolv.conf /etc/resolv.conf # 建立新关联 sudo service dns start # 初始化新实例
此操作常用于解决/etc/resolv.conf
被意外修改导致的解析错误。
🛠️2. 刷新缓存而不中断服务
对于需要实时生效的配置变更:
# Systemd解析器缓存刷新 sudo systemdresolve flushcaches # Dnsmasq动态重载配置 sudo killall HUP dnsmasq # 发送SIGHUP信号触发热更新
这种方式避免了服务中断对业务的影响。
跨发行版兼容性对照表
发行版 | BIND服务名 | Dnsmasq服务名 | 推荐重启命令 |
---|---|---|---|
Ubuntu 20.04+ | bind9 | dnsmasq | systemctl restart bind9 |
CentOS 8 | named | dnsmasq | systemctl restart named |
Debian Stable | bind9 | dnsmasq | service bind9 restart |
Raspberry Pi OS | dnsmasq | N/A | sudo systemctl restart dnsmasq |
💡提示:使用
which <命令>
可定位实际可执行文件路径,帮助排查路径问题。
常见问题与解答
Q1: 执行重启命令后DNS仍未恢复正常怎么办?
✅ A: 按顺序执行以下排查步骤:
1️⃣ 检查日志文件(通常位于/var/log/syslog
或/var/log/messages
),搜索关键词如dns
、resolve
;
2️⃣ 使用dig @localhost example.com
测试本地解析能力;
3️⃣ 确认防火墙未阻止53号端口(UDP/TCP);
4️⃣ 若使用云服务商提供的自定义镜像,可能需要额外配置网络策略。
Q2: 如何避免频繁手动重启?
✅ A: 建立监控机制:
▸ 配置systemd
watchdog功能:在单元文件中添加WatchdogSec=30s
;
▸ 使用Prometheus+Alertmanager设置指标阈值告警;
▸ 编写Shell脚本结合cron定时任务实现自动化健康检查。
高级技巧扩展
▶️ 批量管理多台服务器:结合Ansible Playbook实现规模化运维:
hosts: dns_servers tasks: name: Ensure DNS service is running systemd: name: systemdresolved state: restarted
🔹 此方案适用于数据中心级别的集群部署。
▶️ 性能调优参数示例(以Dnsmasq为例):
修改/etc/dnsmasq.conf
添加以下行提升吞吐量:
cachesize=10000 # 增大缓存容量 negttl=60 # 缩短否定应答TTL加速失效