linux修改dns需匹配网络管理机制:一、networkmanager环境用nmcli配置;二、systemd-resolved环境改/etc/systemd/resolved.conf并重启服务;三、无网络管理器时可直接编辑/etc/resolv.conf并锁定文件。

Linux 系统修改本地 DNS 服务器 IP 地址,关键不是“改一个文件就行”,而是要匹配你当前实际使用的网络管理机制。直接硬改 /etc/resolv.conf 很可能重启网络或重连后就失效——因为这个文件常被 NetworkManager、systemd-resolved 或 dhclient 动态覆盖。
看清楚系统用的是什么网络管理服务
先运行这条命令确认主控服务:
systemctl list-units | grep -E "(NetworkManager|systemd-resolved|dhcpcd)"
常见组合有三种:
- 有
NetworkManager(绝大多数桌面版 Ubuntu/Fedora/RHEL 8+、带 GUI 的 CentOS/Rocky)→ 推荐用nmcli配置 - 有
systemd-resolved(Ubuntu 20.04+、Debian 10+、Fedora 默认)→ 应优先改/etc/systemd/resolved.conf - 没上述服务,靠
dhclient或静态网卡脚本(如旧版 CentOS 7 minimal、某些嵌入式环境)→ 可安全编辑/etc/resolv.conf或改网卡配置文件
方法一:用 nmcli(NetworkManager 环境下最稳妥)
适用于图形界面或启用了 NetworkManager 的服务器(包括大多数云主机)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
步骤如下:
- 查连接名:nmcli connection show(通常叫 “Wired connection 1” 或 “System eth0”)
- 设 DNS 并禁用自动获取:sudo nmcli connection modify "Wired connection 1" ipv4.dns "223.5.5.5 119.29.29.29" ipv4.ignore-auto-dns yes
- 重启连接生效:sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"
- 验证:systemd-resolve --status | grep "DNS Servers" 或 cat /etc/resolv.conf
方法二:用 systemd-resolved(现代发行版默认推荐)
它会接管 DNS 解析逻辑,并自动生成 /etc/resolv.conf 软链接。手动改 resolv.conf 无效。
操作流程:
- 编辑主配置:sudo nano /etc/systemd/resolved.conf
- 取消注释并填写:DNS=8.8.8.8 1.1.1.1,可选加 FallbackDNS=223.5.5.5
- 重启服务:sudo systemctl restart systemd-resolved
- 检查是否生效:resolvectl status(新版)或 systemd-resolve --status
方法三:直接写死 /etc/resolv.conf(仅限无网络管理器的精简环境)
如果确认没 NetworkManager 也没 systemd-resolved(例如某些容器、最小化安装或嵌入式 Linux),可直接编辑:
- 备份原文件:sudo cp /etc/resolv.conf /etc/resolv.conf.bak
- 清空并写入:echo -e "nameserver 114.114.114.114\nnameserver 223.5.5.5" | sudo tee /etc/resolv.conf
- 防止被覆盖(可选):sudo chattr +i /etc/resolv.conf(需解除时用
chattr -i) - 测试:nslookup baidu.com 或 dig google.com +short
改完别忘了验证解析是否走新 DNS。不复杂但容易忽略服务覆盖逻辑。










