/etc/resolv.conf 是动态生成的输出文件,非配置入口;应先判断 DNS 管理者(NetworkManager、systemd-resolved 或 netplan),再通过对应工具(nmcli、resolved.conf 或 netplan YAML)修改配置并生效。

直接改 /etc/resolv.conf 几乎一定失效——它不是配置入口,而是“输出结果”。现代 Linux(Ubuntu 20.04+/Debian 11+/CentOS 8+/Fedora)默认由 systemd-resolved、NetworkManager 或 netplan 动态生成该文件,硬写进去会被几秒内覆盖。
先判断谁在管 DNS:看 /etc/resolv.conf 头注释和系统服务状态
别跳过这步。改错地方=白忙活。
- 运行
cat /etc/resolv.conf,如果第一行是# Generated by NetworkManager,说明NetworkManager在控制 - 运行
systemctl is-active systemd-resolved,返回active表示它已启用且优先级更高(尤其 Server 环境) - 运行
ls /etc/netplan/*.yaml,有输出说明走netplan(常见于 Ubuntu Server 17.10+ 云镜像) - 运行
ls /etc/sysconfig/network-scripts/ifcfg-*(RHEL/CentOS)或cat /etc/network/interfaces(Debian 传统方式),若含DNS1=或dns-nameservers,说明用底层网卡配置
NetworkManager 管着 DNS:用 nmcli 改连接级配置
桌面环境、笔记本、多数云服务器默认走这条路。图形界面容易漏掉关键开关,命令行更稳。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 查当前激活的连接名:
nmcli connection show --active | awk 'NR==2 {print $1}'(或直接nmcli connection show看 NAME 列) - 设 DNS(覆盖式,不追加):
nmcli connection modify "Your-Connection-Name" ipv4.dns "223.5.5.5 119.29.29.29" - 必须关自动获取:
nmcli connection modify "Your-Connection-Name" ipv4.ignore-auto-dns yes(否则 DHCP 仍会塞回旧 DNS) - 重启连接生效:
nmcli connection down "Your-Connection-Name" && nmcli connection up "Your-Connection-Name" - 验证:
nmcli device show | grep DNS或resolvectl status(若systemd-resolved同时启用,后者更准)
systemd-resolved 管着 DNS:改 /etc/systemd/resolved.conf 并重启服务
Server/CLI 环境首选。它提供缓存、DNSSEC 和 per-interface 解析能力,但配置项容易踩坑。
- 编辑配置:
sudo nano /etc/systemd/resolved.conf - 取消注释并设
DNS=8.8.8.8 1.1.1.1;如需兜底,再加FallbackDNS=114.114.114.114 -
DNSSEC=默认是yes,但某些私有 DNS(如内网 bind)不支持,调试时可临时设为no - 重启服务:
sudo systemctl restart systemd-resolved - 确认生效:
resolvectl status eth0(把eth0换成你的真实网卡名),看 “DNS Servers” 行是否更新
netplan 用户:必须改 YAML 配置文件,nmcli 和 resolvectl 无效
Ubuntu Server 默认用 netplan,它完全不读 /etc/resolv.conf,也不响应其他 DNS 命令——除非你显式禁用 renderer: networkd 并切回 NetworkManager。
- 找配置文件:
ls /etc/netplan/*.yaml(常见为01-network-manager-all.yaml或50-cloud-init.yaml) - 在对应网卡块下加
nameservers,例如:
network:
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [223.5.5.5, 119.29.29.29]- 应用配置:
sudo netplan apply - 验证:
resolvectl status eth0或cat /run/systemd/resolve/resolv.conf(/etc/resolv.conf通常是它的符号链接)
最易被忽略的是:多个服务共存时的优先级冲突。比如 systemd-resolved 和 NetworkManager 同时 active,前者会接管解析,但 nmcli 设置的 DNS 可能只写进自己的内部状态而没透传过去。此时 resolvectl status 的输出比 cat /etc/resolv.conf 更可信。

















