根本原因是DNS配置未持久化,被NetworkManager或systemd-resolved动态覆盖;应先用cat /etc/resolv.conf | head -n 1判断主控服务,再分别通过禁用NM的dns写入、配置systemd-resolved或锁定resolv.conf解决。

你的银河麒麟系统每次重启后DNS就变回默认值,手动改过的 /etc/resolv.conf 被清空或覆盖为 127.0.0.53,导致能 ping 通 IP 却打不开网页,问题根源在于 DNS 配置未绑定到持久化管理机制,而是被 NetworkManager 或 systemd-resolved 动态接管并重写。
确认当前 DNS 管理主体
先别急着改配置,执行这一步决定你该走哪条路:
cat /etc/resolv.conf | head -n 1
如果输出是 # Managed by systemd-resolved,说明 systemd-resolved 是主控;如果是 # Generated by NetworkManager,则 NetworkManager 在接管;若无任何注释且内容是你手写的 nameserver,则系统可能处于裸配置状态,但极不稳定——跳过此判断直接修改文件,大概率重启后失效。
方法一:永久禁用 NetworkManager 对 DNS 的写入(适用于桌面版默认环境)
这是最直接阻断覆盖源的操作,适用于图形界面用户且确认 NetworkManager 正在管理网络(nmcli general status 显示 networking-enabled: enabled)。
第一步:编辑 NetworkManager 主配置文件
sudo vim /etc/NetworkManager/NetworkManager.conf
第二步:在 [main] 段落下新增一行,严格按格式输入(注意等号前后无空格):
dns=none
第三步:保存退出后立即重启服务,让新策略生效
sudo systemctl restart NetworkManager
这一步做完,NetworkManager 就彻底放弃对 /etc/resolv.conf 的写入权限,后续 DNS 配置可安全交由 systemd-resolved 或手动控制。不执行此步而只改 resolved.conf,仍可能被 NM 覆盖。
方法二:通过 systemd-resolved 设置全局 DNS(推荐用于 V10 SP1+ 桌面/服务器)
该方式配置写入服务级配置,自动同步至 /etc/resolv.conf,且优先级高于 NetworkManager 的 DNS 分发逻辑。
方法1:编辑 resolved 配置文件
sudo vim /etc/systemd/resolved.conf
方法2:取消 DNS= 和 FallbackDNS= 行的注释,并填入国内高速 DNS
DNS=114.114.114.114 223.5.5.5
FallbackDNS=8.8.8.8 1.1.1.1
方法3:重载并重启服务,确保配置加载
sudo systemctl daemon-reload && sudo systemctl restart systemd-resolved
方法4:强制更新 /etc/resolv.conf 软链接指向(部分旧版本需手动执行)
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
验证是否生效:systemd-resolve --status | grep "DNS Servers",输出必须包含你填的两个 IP,且不能显示 “~” 符号(表示未激活)。
方法三:锁定 /etc/resolv.conf 文件(仅限紧急临时场景)
当无法立即定位管理服务、或需快速验证 DNS 是否为唯一瓶颈时使用,但会阻止所有服务写入,包括合法更新。
执行命令锁定文件:
sudo chattr +i /etc/resolv.conf
之后手动写入 DNS:
echo -e "nameserver 114.114.114.114\nnameserver 223.5.5.5" | sudo tee /etc/resolv.conf
【警告】锁定后,NetworkManager、systemd-resolved、DHCP 客户端均无法修改该文件,升级或重装网络组件时可能报错。如需恢复动态管理,必须先执行 sudo chattr -i /etc/resolv.conf


















