直接修改 /etc/resolv.conf 通常无效,因其由 systemd-resolved、NetworkManager 等服务动态管理;需先判断管理者(通过 ls -l /etc/resolv.conf 和 systemctl is-active),再停用对应服务或修改其上游配置(如 /etc/systemd/resolved.conf 或 NM 连接设置),必要时可用 chattr +i 临时锁定。

直接改 /etc/resolv.conf 通常无效,因为它在现代 Linux 系统中几乎总是被动态管理——不是软链接就是自动生成的文件。硬改后几秒就被覆盖,根本留不住。真正要“防止被覆盖”,得先弄清谁在管它,再从源头控制。
先确认是谁在管理 resolv.conf
运行这两条命令:
ls -l /etc/resolv.conf systemctl is-active systemd-resolved NetworkManager
- 如果
ls输出带->(比如指向/run/systemd/resolve/stub-resolv.conf),说明是软链接; - 如果
systemd-resolved是active,它是主力管理者; - 如果只有
NetworkManager活着,那就走 NM 配置链路; - 两个都 inactive?那
/etc/resolv.conf才是真实配置文件,可放心改。
停掉 systemd-resolved(适合服务器或明确不用它的场景)
这是最彻底的“夺回控制权”方式:
- 停服务:
sudo systemctl stop systemd-resolved - 禁止开机自启:
sudo systemctl disable systemd-resolved - 删除软链接:
sudo rm /etc/resolv.conf - 新建静态文件:
sudo tee /etc/resolv.conf
- (可选)加不可变锁防覆盖:
sudo chattr +i /etc/resolv.conf(修改前记得先chattr -i)
用 systemd-resolved 配置(推荐给 Ubuntu 20.04+/Fedora/Debian 12+)
不碰 resolv.conf,改它的上游配置:
- 编辑
/etc/systemd/resolved.conf,取消注释并填入:[Resolve] DNS=223.5.5.5 8.8.8.8 FallbackDNS=1.1.1.1 Domains=~example.com
- 重启服务:
sudo systemctl restart systemd-resolved - 验证:
resolvectl status看 “DNS Servers” 是否已更新
通过 NetworkManager 配置(桌面环境首选)
尤其适合 GNOME/KDE 用户,不冲突、不覆盖:
- 查连接名:
nmcli connection show --active | awk 'NR>1 {print $1; exit}' - 设 DNS 并关自动获取:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1" sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes
- 生效:
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"
临时锁定文件(仅应急,慎用)
如果只想快速保住当前配置,且确认没其他服务在写:
-
sudo chattr +i /etc/resolv.conf - 后续要改时:
sudo chattr -i /etc/resolv.conf
⚠️ 注意:这会阻止所有程序(包括 NetworkManager、dhclient)写入,可能引发其他网络异常,不建议长期启用。
不复杂但容易忽略。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...










