直接改 /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,但优先级更高: