是常态,不是你操作错了;因现代linux发行版默认由systemd-resolved、networkmanager或netplan动态管理dns,/etc/resolv.conf常为符号链接或自动生成文件,手动修改后会被立即覆盖。

直接改 /etc/resolv.conf 会失效?这是常态,不是你操作错了
大多数现代 Linux 发行版(Ubuntu 18.04+、CentOS 8+、Fedora、Debian 11+)默认用 systemd-resolved、NetworkManager 或 netplan 管理 DNS,手动写死 /etc/resolv.conf 会被自动覆盖。这不是权限问题,是服务在“抢着管”。强行 chattr +i /etc/resolv.conf 会阻断网络服务启动,不推荐。
用 nmcli 改 NetworkManager 管理的 DNS(桌面/笔记本最常用)
适用于使用 NetworkManager 的系统(GNOME/KDE 默认),修改立即生效且持久。
- 查当前连接名:
nmcli connection show --active | awk 'NR==2 {print $1}'(或看输出里 NAME 列) - 设 DNS(覆盖式,不追加):
nmcli connection modify "Your-Connection-Name" ipv4.dns "8.8.8.8 1.1.1.1" - 关 DHCP 自动获取 DNS:
nmcli connection modify "Your-Connection-Name" ipv4.ignore-auto-dns yes - 重启连接:
nmcli connection down "Your-Connection-Name" && nmcli connection up "Your-Connection-Name" - 验证:
resolvectl status或nmcli device show | grep DNS
用 resolvectl 配置 systemd-resolved(Server/CLI 环境首选)
systemd-resolved 是 systemd 生态的 DNS 管理器,/etc/resolv.conf 通常只是它的一个符号链接(指向 /run/systemd/resolve/stub-resolv.conf)。直接改文件无效,必须走接口。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 临时设置(重启后失效):
resolvectl dns eth0 8.8.8.8 1.1.1.1(eth0 换成你的网卡名) - 永久设置:编辑
/etc/systemd/resolved.conf,取消注释并修改DNS=8.8.8.8 1.1.1.1,再执行sudo systemctl restart systemd-resolved - 注意:
FallbackDNS是兜底,DNSSEC开启可能让某些私有 DNS 失败,调试时可先设为off - 验证:
resolvectl status eth0,看 “DNS Servers” 行是否更新
Netplan 用户(Ubuntu Server 17.10+)必须改 YAML 文件
Netplan 不读 /etc/resolv.conf,也不响应 nmcli 或 resolvectl 的 DNS 设置(除非禁用 renderer: networkd 并切回 NetworkManager)。
- 找到配置文件:
ls /etc/netplan/*.yaml(常见为01-network-manager-all.yaml或50-cloud-init.yaml) - 在对应 interface 下加
nameservers块,例如:network: ethernets: eth0: dhcp4: true nameservers: addresses: [8.8.8.8, 1.1.1.1] - 应用:
sudo netplan apply(失败时用sudo netplan --debug apply看具体哪行错) - 注意:若启用了
dhcp4-overrides: {use-dns: false},DNS 才真正由nameservers控制;否则 DHCP 返回的 DNS 仍会覆盖
真正麻烦的不是“怎么填 DNS”,而是搞清谁在管 DNS —— cat /etc/resolv.conf 第一行写着 # This file is managed by ... 就是线索。跳过这步直接硬改,90% 的“改了没用”都源于此。










