Ubuntu重启后DNS无法解析主机,如何避免手动执行修复命令?
解决Ubuntu重启后DNS无法解析的持久化方案
我太懂每次重启都要手动敲命令修复DNS的烦躁了——咱们直接从根源解决这个问题,以后再也不用重复操作!以下是一步步的实操方案:
1. 确保resolvconf服务开机自启
问题的核心往往是resolvconf服务在重启后没自动启动,导致DNS配置无法正常生成。执行这条命令让它开机就运行:
sudo systemctl enable --now resolvconf.service
这条命令会同时启用并立即启动resolvconf服务,确保重启后它能自动接管DNS配置。
2. 修复resolv.conf符号链接并锁定配置
现在要确保/etc/resolv.conf的链接不会被系统其他服务覆盖:
- 先删除可能存在的无效文件或链接:
sudo rm -f /etc/resolv.conf - 创建正确的符号链接指向resolvconf生成的配置文件:
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf - 强制resolvconf更新DNS配置:
sudo resolvconf -u
3. 阻止NetworkManager覆盖DNS配置
很多时候NetworkManager会自动生成自己的resolvconf文件,把我们设置的链接覆盖掉。我们需要让它把DNS管理交给resolvconf:
- 编辑NetworkManager的配置文件:
sudo nano /etc/NetworkManager/NetworkManager.conf - 在
[main]部分添加或修改以下内容:dns=resolvconf - 保存退出(按
Ctrl+O回车,再按Ctrl+X),然后重启NetworkManager服务:sudo systemctl restart NetworkManager.service
4. 备选方案:改用systemd-resolved管理DNS(如果resolvconf方案无效)
如果你的系统更依赖systemd-resolved,也可以切换到这个服务来管理DNS:
- 启用并启动systemd-resolved服务:
sudo systemctl enable --now systemd-resolved.service - 创建正确的符号链接指向systemd-resolved的配置:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf - 编辑
/etc/systemd/resolved.conf,确保里面的DNS服务器配置正确(比如添加常用的公共DNS):
保存后重启服务:[Resolve] DNS=8.8.8.8 114.114.114.114 FallbackDNS=8.8.4.4sudo systemctl restart systemd-resolved.service
完成以上步骤后,重启你的Ubuntu系统测试一下——应该再也不用手动敲命令修复DNS了!
内容的提问来源于stack exchange,提问作者Vitalii Kravchenko
相关产品推荐
相关产品推荐

