检查
/etc/NetworkManager/NetworkManager.conf
中 [main]
段是否含 dns=none
,若无则添加后重启 NetworkManager,再手动配置 `/etcUbuntu系统DNS配置重启后丢失的详细解决方案
问题现象描述
在Ubuntu系统中手动配置DNS服务器后,重启网络或系统时发现/etc/resolv.conf
文件中的DNS配置被重置,导致无法正常解析域名,这是由于系统网络管理工具(如Netplan、NetworkManager)自动覆盖了手动修改的配置。
问题根源分析
可能原因 | 详细说明 |
---|---|
网络管理工具自动覆盖配置 | Ubuntu使用Netplan/NetworkManager管理网络,重启时会重写/etc/resolv.conf |
未通过正确方式配置DNS | 直接修改/etc/resolv.conf 属于临时配置,未被网络管理工具识别 |
系统使用systemdresolved 服务 |
该服务会强制管理DNS解析,覆盖手动配置 |
配置文件语法错误 | YAML/JSON格式错误导致配置未生效,回退到默认设置 |
解决方案步骤
确认系统网络管理工具
Ubuntu不同版本使用不同的网络管理工具:
- Ubuntu 20.04+:默认使用 Netplan(配置路径
/etc/netplan/
) - Ubuntu 18.04及之前:默认使用 NetworkManager(配置路径
/etc/NetworkManager/systemconnections/
)
检查当前网络管理工具
# 检查Netplan是否启用 ls /etc/netplan/ # 检查NetworkManager是否运行 systemctl status NetworkManager
通过Netplan配置DNS(Ubuntu 20.04+)
步骤1:编辑Netplan配置文件
sudo nano /etc/netplan/01netcfg.yaml
步骤2:添加DNS配置
# 示例配置(以ens33网卡为例) network: version: 2 renderer: networkd ethernets: ens33: dhcp4: yes # 静态DNS配置(覆盖DHCP分配的DNS) dns4: 8.8.8.8 8.8.4.4 # 静态IP配置(如需) addresses: [192.168.1.100/24] gateway4: 192.168.1.1
步骤3:应用配置
sudo netplan apply
通过NetworkManager配置DNS(Ubuntu 18.04及之前)
步骤1:编辑连接配置文件
sudo nano /etc/NetworkManager/systemconnections/<连接名称>.nmconnection
步骤2:添加DNS服务器
<connection> ... <ipv4> <method>auto</method> <dns> <dnssearch>[域后缀]</dnssearch> <dnsservers> <address>8.8.8.8</address> <address>8.8.4.4</address> </dnsservers> </dns> </ipv4> ... </connection>
步骤3:重启NetworkManager
sudo systemctl restart NetworkManager
禁用systemdresolved
服务(可选)
如果系统使用systemdresolved
服务,需禁用它以避免冲突:
# 停止并禁用服务 sudo systemctl stop systemdresolved sudo systemctl disable systemdresolved # 删除其生成的resolv.conf符号链接 sudo unlink /etc/resolv.conf
验证配置是否生效
方法1:检查/etc/resolv.conf
cat /etc/resolv.conf
# 应显示配置的DNS服务器(如8.8.8.8)
方法2:测试DNS解析
# 测试域名解析
nslookup www.google.com
# 查看当前DNS服务状态
systemdresolve status
常见问题与解答
问题1:为什么/etc/resolv.conf
修改后立即生效,但重启后失效?
解答:
/etc/resolv.conf
文件由网络管理工具(如Netplan、NetworkManager)或systemdresolved
服务自动生成,直接修改该文件属于临时操作,重启后会被系统重新生成,必须通过修改对应网络管理工具的配置文件来永久生效。

问题2:如何恢复默认DNS配置?
解答:
- 通过Netplan恢复:删除
dns4
字段后执行sudo netplan apply
。
- 通过NetworkManager恢复:删除
<dnsservers>
节点后重启服务。
- 启用
systemdresolved
:执行sudo systemctl enable systemdresolved
并重新创建/etc/resolv.conf
的符号链接。
Ubuntu系统的DNS配置需通过对应的网络管理工具(Netplan/NetworkManager)进行持久化设置,避免直接修改/etc/resolv.conf
,若需自定义DNS,请按照上述步骤修改配置文件并应用,同时注意关闭可能冲突的服务(如`

cat /etc/resolv.conf # 应显示配置的DNS服务器(如8.8.8.8)
方法2:测试DNS解析
# 测试域名解析 nslookup www.google.com # 查看当前DNS服务状态 systemdresolve status
常见问题与解答
问题1:为什么/etc/resolv.conf
修改后立即生效,但重启后失效?
解答:
/etc/resolv.conf
文件由网络管理工具(如Netplan、NetworkManager)或systemdresolved
服务自动生成,直接修改该文件属于临时操作,重启后会被系统重新生成,必须通过修改对应网络管理工具的配置文件来永久生效。
问题2:如何恢复默认DNS配置?
解答:
- 通过Netplan恢复:删除
dns4
字段后执行sudo netplan apply
。 - 通过NetworkManager恢复:删除
<dnsservers>
节点后重启服务。 - 启用
systemdresolved
:执行sudo systemctl enable systemdresolved
并重新创建/etc/resolv.conf
的符号链接。
Ubuntu系统的DNS配置需通过对应的网络管理工具(Netplan/NetworkManager)进行持久化设置,避免直接修改/etc/resolv.conf
,若需自定义DNS,请按照上述步骤修改配置文件并应用,同时注意关闭可能冲突的服务(如`