取消DNS自动获取本质是禁用NetworkManager或systemd-resolved等服务对/etc/resolv.conf的控制,需先查清当前管理服务(如nmcli或systemctl is-active systemd-resolved),再在连接级执行ipv4.ignore-auto-dns yes并设静态DNS,最后重启连接或服务生效。

取消 DNS 自动获取,本质是告诉网络管理服务“别碰我的 /etc/resolv.conf”,而不是单纯删掉几行配置。直接改文件但没关自动源,5 分钟后就回滚——这是最常踩的坑。
NetworkManager 下怎么关自动 DNS
桌面版 Ubuntu、Fedora、多数云服务器默认走 NetworkManager。它会根据 DHCP 或连接设置自动写入 DNS,必须在连接级禁用。
- 先查当前激活连接名:
nmcli connection show --active,记下类似Wired connection 1的名字 - 关自动获取 DNS:
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes - 设你自己的 DNS(空格分隔):
sudo nmcli connection modify "Wired connection 1" ipv4.dns "223.5.5.5 119.29.29.29" - 重启连接生效:
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1" - 验证是否生效:
nmcli device show | grep DNS,不是只看/etc/resolv.conf
systemd-resolved 启用时怎么停自动覆盖
Ubuntu 20.04+、Debian 11+、Fedora 默认启用 systemd-resolved,/etc/resolv.conf 是软链,直接编辑无效。
- 确认它在运行:
systemctl is-active systemd-resolved返回active就得按这路走 - 编辑主配置:
sudo nano /etc/systemd/resolved.conf - 取消注释并填值:
DNS=223.5.5.5 119.29.29.29;加FallbackDNS=114.114.114.114可选 - 重启服务:
sudo systemctl restart systemd-resolved - 检查软链:
ls -l /etc/resolv.conf必须指向/run/systemd/resolve/stub-resolv.conf
传统网卡脚本(RHEL/CentOS/ifcfg-*)怎么阻止 DHCP 写 DNS
老式服务器或最小化安装常用这套机制,关键在 PEERDNS=no,否则每次 dhclient 或重启 network 服务都会覆盖。
- 编辑对应网卡配置,例如:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 - 加一行:
PEERDNS=no(已有就确认值为no) - 如果要用静态 DNS,再加:
DNS1=223.5.5.5和DNS2=119.29.29.29 - 重启网络:
sudo systemctl restart network(不是NetworkManager) - 注意:有些镜像里
network服务已废弃,得用nmcli或netplan替代
临时锁死 resolv.conf 防覆盖(慎用)
只适合排查或极简环境,生产系统不推荐——它会干扰 systemd-resolved 或 NetworkManager 正常工作。
- 备份原文件:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak - 清空并写入:
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf - 加不可修改属性:
sudo chattr +i /etc/resolv.conf - 要改回来:
sudo chattr -i /etc/resolv.conf - 风险点:
chattr +i后,任何服务(包括systemd-resolved)都无法更新解析文件,连缓存刷新都可能失败
真正起作用的不是“写了什么 DNS”,而是“谁在管 DNS”——不先判断 systemctl is-active systemd-resolved 和 nmcli 状态,后面所有操作都可能白忙。


















