直接改 /etc/resolv.conf 重启失效是因为 systemd-resolved 或 NetworkManager 会动态覆盖该文件;应根据系统类型修改对应配置:Ubuntu/Debian 改 /etc/systemd/resolved.conf 或 Netplan YAML,RHEL/CentOS/Fedora 改 ifcfg-* 文件,并确认服务状态与软链接指向。

直接改 /etc/resolv.conf 为什么重启就失效?
因为现代 Linux(尤其是 Ubuntu 18.04+、CentOS 8+、Fedora、Debian 11+)默认启用 systemd-resolved 或 NetworkManager,它们会动态接管并覆盖 /etc/resolv.conf。你手动写进去的 nameserver 114.114.114.114,下次网络服务重启或系统重启后就会被清空,甚至变成指向 127.0.0.53 的软链接。
Ubuntu/Debian 系统:优先改 /etc/systemd/resolved.conf
这是最通用、最稳定的永久生效方式,适用于绝大多数使用 systemd 的发行版:
- 运行
sudo nano /etc/systemd/resolved.conf - 取消注释并修改
[Resolve]段下的DNS=行,例如:DNS=114.114.114.114 8.8.8.8 - 可选:添加
FallbackDNS=提供兜底服务器 - 保存后执行:
sudo systemctl restart systemd-resolved - 验证是否生效:
resolvectl status(看 Global 部分)或systemd-resolve --status
Netplan 管理的 Ubuntu(如 20.04/22.04):必须改 /etc/netplan/*.yaml
如果你用的是桌面版或云镜像 Ubuntu,且 ip a 显示网卡名是 ens3、enp0s3 这类,大概率走 Netplan。此时改 resolved.conf 可能无效——Netplan 会把 DNS 写进 systemd-resolved,但优先级更高:
- 找到配置文件,通常是
/etc/netplan/00-installer-config.yaml或01-network-manager-all.yaml - 在对应网卡下添加
nameservers块(注意缩进!YAML 对空格敏感):nameservers:
addresses: [114.114.114.114, 8.8.8.8] - 执行:
sudo netplan apply - 检查:
resolvectl status→ 看对应接口(如ens3)下的 DNS 是否已更新
RHEL/CentOS/Fedora:改网卡配置文件更可靠
这类系统仍广泛依赖 ifcfg-* 文件,尤其当未启用 NetworkManager 时:
- 编辑网卡配置,例如:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 - 添加两行:
DNS1=114.114.114.114DNS2=8.8.8.8 - 确保
PEERDNS=yes(默认通常为 yes,允许该配置影响resolv.conf) - 重启网络:
sudo systemctl restart network(不是NetworkManager) - 验证:
cat /etc/resolv.conf应该已自动更新
真正容易被忽略的点是:不同机制之间存在优先级冲突。比如你同时配了 Netplan 和 resolved.conf,最终生效的是 Netplan 推送的;而如果你禁用了 systemd-resolved 却还留着它的配置,反而会导致解析失败。动手前先跑 ls -l /etc/resolv.conf 看它是普通文件还是软链接,再用 systemctl list-units | grep -E "(resolve|NetworkManager)" 确认哪个服务在管 DNS —— 否则改半天,只是在和系统“对空挥拳”。










