linux为什么重启DNS失效
linux为什么重启DNS失效详细介绍
在 Linux 系统中,重启后 DNS 配置失效通常是由于 DNS 设置未正确持久化,或被系统服务自动覆盖导致。以下是常见原因及解决方法:
一、常见原因分析
1.
/etc/resolv.conf 被系统服务自动覆盖
- 默认行为:多数 Linux 发行版通过网络管理服务(如
systemd-resolved、NetworkManager、dhcpcd、dhclient)动态管理resolv.conf,手动修改该文件后,服务重启或网络重新连接时会被自动覆盖。 - 典型场景:
- 使用 DHCP 获取 IP 时,DHCP 服务器会分配 DNS 服务器,覆盖手动设置。
systemd-resolved(现代系统默认)或NetworkManager(图形环境)会自动生成resolv.conf,指向本地缓存(如127.0.0.53)。
2.
未在持久化配置文件中设置 DNS
- 静态 IP 场景:若使用静态 IP,DNS 应配置在网络接口的配置文件中(如
/etc/netplan/*.yaml、/etc/sysconfig/network-scripts/ifcfg-<接口>、/etc/network/interfaces),而非直接修改resolv.conf。 - DHCP 场景:若需固定 DNS,需在 DHCP 配置中指定(如
dhclient.conf),或通过网络管理工具设置。
3.
不同发行版的网络管理工具差异
- Ubuntu/Debian:默认使用
netplan或NetworkManager,DNS 配置需在netplan文件或nm-connection-editor中设置。 - CentOS/RHEL:
- 旧版本(如 CentOS 7):通过
/etc/sysconfig/network-scripts/ifcfg-<接口>配置。 - 新版本(如 CentOS 8/Fedora):默认使用
systemd-networkd或NetworkManager。
- 旧版本(如 CentOS 7):通过
- Arch/Manjaro:常用
systemd-resolved或dhcpcd,需在接口配置文件中设置 DNS。
二、解决方法
1.
通过持久化配置文件设置 DNS(推荐)
- 静态 IP 配置(以 CentOS 7 为例):
编辑网络接口文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),添加:
ini保存后重启网络服务:
bashsystemctl restart network - Ubuntu/Debian(netplan):
编辑/etc/netplan/*.yaml,添加:
yamlnetworkd
no
192.168.1.10/24
8.8.8.8 8.8.4.4
应用配置:
bashnetplan apply - 使用 NetworkManager(图形 / CLI):
- 图形界面:进入 “网络设置”→ 编辑连接 → IPv4/IPv6 设置 → 手动指定 DNS。
- CLI:通过
nmcli命令:bashnmcli connection modify 连接名 ipv4.dnsnmcli connection up 连接名
2.
禁用systemd-resolved(传统模式)
- 若需直接使用
resolv.conf(不推荐现代系统):bashsystemctl stop systemd-resolvedsystemctl disable systemd-resolved
/etc/resolv.conf
/run/resolvconf/resolv.conf /etc/resolv.conf
然后通过
resolvconf工具管理 DNS(如编辑/etc/resolvconf/resolv.conf.d/base)。
3.
临时固定resolv.conf(不推荐,仅临时生效)
- 添加注释告知系统保留配置(部分服务支持):bash
/etc/resolv.conf/etc/resolv.conf
但此方法在多数情况下会被服务覆盖,仅适用于临时测试。
三、验证配置是否持久化
- 重启系统后,检查
/etc/resolv.conf内容是否保留。 - 查看网络服务状态:bash
systemctl status systemd-resolved912systemctl status systemd-resolved
- 使用
nmcli connection show(NetworkManager 环境)或ip addr查看接口配置中的 DNS 是否正确。
总结
根本原因是 DNS 配置未通过系统认可的持久化方式(如网络接口配置文件、管理工具)设置,而是直接修改了动态生成的resolv.conf。解决关键在于根据发行版和网络模式(DHCP / 静态 IP),通过官方推荐的工具或配置文件设置 DNS,确保重启后配置不被覆盖。