Ubuntu无法访问外网或apt更新失败,八成因DNS配置错误;推荐全局强制DNS(编辑/etc/systemd/resolved.conf,设DNS=114.114.114.114 223.5.5.5、DNSSEC=no、Domains=~.,重启systemd-resolved并重建软链接),或兼容使用resolvconf管理base文件,最后验证resolvectl status及nslookup。

Ubuntu系统无法访问外网或软件源更新失败,八成是DNS没配对——尤其在国内用默认DNS经常卡在域名解析环节。直接改/etc/resolv.conf看似快,但重启就丢;用resolvconf又容易漏掉软链接重建这步,导致nslookup和apt用的不是同一套DNS。下面分场景给出真正生效的配置路径。
推荐方案:全局强制DNS(服务器/开发机首选)
这一步直接接管所有网卡的DNS行为,不受DHCP干扰,适合需要稳定解析的生产环境或远程服务器。
编辑 systemd-resolved 配置文件:sudo vim /etc/systemd/resolved.conf
取消注释并修改[Resolve]段落,填入国内常用DNS(以114和阿里为例):
→ DNS=114.114.114.114 223.5.5.5
→ FallbackDNS=114.114.115.115 223.6.6.6
→ Domains=~.(强制所有域名走自设DNS,不走ISP默认)
→ DNSSEC=no(【关键】国内多数公共DNS不支持DNSSEC,开启会导致部分域名解析失败)
→ Cache=yes
保存退出后,立即重启服务:sudo systemctl restart systemd-resolved
必须重建软链接,否则/etc/resolv.conf仍指向旧地址:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
验证是否生效:resolvectl status | grep "DNS Servers",输出应含你填的114或阿里IP。
兼容方案:通过resolvconf管理(桌面版稳妥选择)
如果你用的是带NetworkManager的Ubuntu桌面版,且不想动systemd-resolved,这个方法更轻量,重启后依然有效。
方法一:写入base文件(推荐)
→ 编辑sudo vim /etc/resolvconf/resolv.conf.d/base
→ 写入两行:nameserver 114.114.114.114 和 nameserver 223.5.5.5
→ 保存后执行sudo resolvconf -u刷新
方法二:临时加到head(调试用)
→ 编辑sudo vim /etc/resolvconf/resolv.conf.d/head
→ 加入# Custom DNS和nameserver 223.5.5.5
→ 执行sudo resolvconf -u,该DNS会优先于base和dynamic内容
检查结果:cat /etc/resolv.conf末尾应出现你写的nameserver行,且开头没有“DO NOT EDIT”警告——说明resolvconf已接管。
验证与排错
第一步:确认当前系统实际使用的DNS:resolvectl query www.baidu.com,看Server字段是否为你配置的IP。
第二步:测试解析是否通:nslookup www.taobao.com 114.114.114.114(直连114),再试nslookup www.taobao.com 127.0.0.53(走本地resolved代理)。
第三步:如果apt update仍报域名错误,运行sudo systemd-resolve --flush-caches清空缓存,再重试。
第四步:若仍失败,检查是否被netplan覆盖——查看ls /etc/netplan/*.yaml,若有文件且含nameservers:字段,需在其中显式声明DNS,并执行sudo netplan apply。











