【Linux】Ubuntu有线但不能上网怎么办?DNS解析失败终极解决方案:从 ping域名失败到通网
一、前言
作者是刚学习操作系统的小白,安装Ubuntu 20.04.3和VMware、且虚拟机搭好之后
发现自己是有线状态(右上角形如“品”的图标)但是不能上网
校园网和个人热点都不行
寻求各种文章方案都以失败而终
最后在人工智能的帮助下解决了问题
本文提供一个思路,希望能帮助各位
图1 安装好的Ubuntu界面

图2 搜狐浏览器搜百度失败

图3 有线成功连接状态
二、排查接口
既然是有线状态,那么网络是互通的,我们来确认一下
图4 总览
1)在控制面版-网络和Internet-网络连接,右键WLAN点击属性

图5 打开WLAN属性
勾选两个选项

图6 WLAN属性
2)查看虚拟网络,点击编辑-虚拟网络编辑器

图7 虚拟网络编辑器打开操作
可以看到只有V1和V8是连接的,且被选中且子网IP不是 0.0.0.0

图8 虚拟网络编辑器界面
也对应了网络连接界面的V1和V8

图9 网络连接界面
3)VMware网络连接
点击虚拟机-设置-网络适配器可以选择网络模式,根据前文,只能选NAT模式和主机模式,这里我们选择NET模式


图10 虚拟机设置界面
确保接口设置没问题,接下来开始排查问题!
三、排查问题
1.检查 VMware 的虚拟网络编辑器和服务
VMware 的 NAT 和 DHCP 服务可能没有正常运行。
重启 VMware 的相关服务(在Windows 主机上操作)
按 Win + R 键,输入 services.msc 并回车,打开“服务”窗口。
找到所有以 VMware 开头的服务。
重点重启以下两个服务,选择“重新启动”
VMware NAT Service
VMware DHCP Service

图11 服务界面
2.检查 Ubuntu 内部的网络配置
桌面右键,点击“在终端中打开”

图12 打开终端操作
在终端输入
ip addr show
找到你的主网卡(通常是 ens33 或 eth0)。
查看它是否有一个 inet 地址,格式通常是 192.168.x.x 或 172.16.x.x。
如果只有 inet6(IPv6)地址或者根本没有 inet 地址,
说明它没有从 VMware 的DHCP服务器成功获取IP。
我们可以看到Ubuntu虚拟机已经成功获取到了IP地址 192.168.40.128/24
并且网卡ens33的状态是UP,这说明网络连接在虚拟机内部是正常的

图13 终端界面
既然网络接口和IP地址都正常,那么问题几乎可以肯定是出在 DNS 解析 上
虚拟机可以连接到网关和网络,但无法将域名(如 www.google.com)翻译成IP地址
四、修复 DNS
1. 测试网络连通性
首先,我们 ping 一个公网 IP 地址,来确认网络通道确实是通的。发现一直在发送
ping -c 4 8.8.8.8

图14 ping公网IP
再ping一下百度,回复ping www.baidu.com出现暂时性错误
ping -c 4 www.baidu.com

图15 ping域名
能够ping通IP地址(8.8.8.8),但无法解析域名,确实是DNS问题
2)强制将 DNS 服务器切换为 Google 公共 DNS
eth33是图13显示的网卡名
sudo resolvectl dns eth33 8.8.8.8 8.8.4.4
会输出localomain,再ping一下百度,还是不行
pluton@pluton:$ resolvectl status | grep -A 5
DNS ServersDNs Servers: 8.8.8.8 8.8.4.4
DNS Domain: localdomain
pluton@pluton:$ ping -c 4 www.baidu.com
ping:www.baidu.com:域名解析出现暂时性错误
DNS Domain: localdomain 导致域名解析失败。
说明系统会自动在域名后添加 .localdomain
导致实际解析 www.baidu.com.localdomain(不存在的域名),而非 www.baidu.com
3)清空 DNS 域名后缀
使得去除后缀,直接解析原始域名
sudo resolvectl domain ens33 ~.
检验
resolvectl status | grep -A 5 "DNS Servers"
输出
DNS Servers: 8.8.8.8 8.8.4.4
DNS Domain: ~.
再ping一下域名还是不行
4)配置 systemd-resolved 持久化
输入
sudo nano /etc/systemd/resolved.conf
在resolve修改,记得去掉#号,非常重要
[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.
然后Ctrl+O,按Enter去保存!!!Ctrl+X退出
此时文件已永久写入 /etc/systemd/resolved.conf
接着必须重启systemd-resolved服务
sudo systemctl restart systemd-resolved
然后检验
sudo systemctl restart systemd-resolved
再验证,必须看到 8.8.8.8
cat /run/systemd/resolve/resolv.conf | grep "nameserver"
最后ping百度
如果还是不行,/etc/systemd/resolved.conf 配置未生效
原因可能是 NetworkManager 覆盖了 DNS 设置
5) 终极方案
首先确认:cat /run/systemd/resolve/resolv.conf | grep "nameserver"
若输出 192.168.137.2说明问题存在
# 1. 删除旧配置(避免冲突)
sudo rm -f /etc/systemd/resolved.conf
# 2. 重建正确配置(直接复制执行)
echo -e "[Resolve]\nDNS=8.8.8.8 8.8.4.4\nDomains=~." | sudo tee /etc/systemd/resolved.conf
# 3. 禁用 NetworkManager 的 DNS 管理
echo -e "[main]\ndns=none" | sudo tee /etc/NetworkManager/NetworkManager.conf
然后再重启验证,记得分条复制
sudo systemctl restart systemd-resolved NetworkManager
sudo rm -f /etc/resolv.conf && sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
ping -c 4 www.baidu.com
Ubuntu 将永久使用 Google DNS(8.8.8.8),不再依赖路由器 DNS

图16 ping通了

图17 胜利结算画面
更多推荐


所有评论(0)