一、前言

        作者是刚学习操作系统的小白,安装Ubuntu 20.04.3VMware、且虚拟机搭好之后

发现自己是有线状态(右上角形如“品”的图标)但是不能上网

校园网和个人热点都不行

寻求各种文章方案都以失败而终

最后在人工智能的帮助下解决了问题

本文提供一个思路,希望能帮助各位

图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 胜利结算画面

 

Logo

更多推荐