无法修改resolv.conf:重启或切换WiFi后配置重置求助
解决resolv.conf重启/WiFi开关后被重置的问题
你遇到的是典型的系统网络管理服务自动覆盖resolv.conf配置的问题——127.0.0.1一般是本地DNS缓存服务(比如systemd-resolved)的地址,但如果这个服务未正常运行,就会导致域名解析失败。之前修改base文件、dhclient.conf的操作没生效,大概率是因为你没针对实际管理网络的核心服务做配置,下面给你几个针对性的解决方案:
方案1:针对systemd-resolved服务(Ubuntu 18.04+/Debian 10+常见)
如果你的系统用systemd-resolved管理DNS,resolv.conf通常是指向该服务的符号链接,直接修改文件会被自动覆盖,正确操作如下:
- 打开resolved的配置文件:
sudo nano /etc/systemd/resolved.conf - 找到
DNS=行,去掉注释并填入自定义DNS服务器:DNS=8.8.8.8 8.8.4.4 - 确保
DNSStubListener=保持默认的yes,然后重启服务:sudo systemctl restart systemd-resolved - 若resolv.conf的符号链接异常,重新建立链接:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
方案2:针对NetworkManager服务(桌面版系统常用)
如果你的网络由NetworkManager管理,它会自动生成resolv.conf,需要修改它的配置规则:
- 编辑NetworkManager主配置:
sudo nano /etc/NetworkManager/NetworkManager.conf - 在
[main]段落添加/修改以下内容,禁止自动覆盖resolv.conf:dns=none - 或者更友好的方式:通过图形界面设置自定义DNS
- 打开系统网络设置,找到当前WiFi连接,进入「IPv4设置」
- 将DNS方法改为「手动」,添加
8.8.8.8和8.8.4.4 - 保存后重启NetworkManager:
sudo systemctl restart NetworkManager
方案3:应急锁定resolv.conf(不推荐长期使用)
如果上面的方法暂时没生效,可以先锁定文件防止被覆盖:
- 先写入正确的DNS配置:
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf - 设置文件为不可修改状态:
sudo chattr +i /etc/resolv.conf - 后续需要修改时,先取消锁定:
sudo chattr -i /etc/resolv.conf
验证配置生效
修改完成后,重启WiFi或网络服务,然后执行以下命令确认:
cat /etc/resolv.conf nslookup google.com
如果能正常解析域名,说明配置生效。
内容的提问来源于stack exchange,提问作者user3447843




