Introduction
本文将介绍如何解决VM ubuntu在虚拟机找不到网卡无法上网的问题,并给出一些排查思路,旨在帮助读者快速定位问题。
最近 vm ubuntu 用的比较多,因为 ubuntu 里面要跑一个 k8s,需要比较大的内存,于是给 VM 分配了 30G 的内存,分配完内存后,发现 VM 里面的 ubuntu 无法上网了,于是就有了这篇文章。Ubuntu 网卡消失的问题我不是第一次遇到了,之前已经预见过好几次了,有的时候重启 ubuntu 就没网卡了,有时候分配完内存就没网卡了,触发机制十分奇怪,我至今也没搞懂。之前各种遇到这个问题之后每次的处理方案都不一样,有点头疼,正好很久没写文章了,趁此机会好好总结一下问题。
Problem
在此,重新描述一下问题:VM ubuntu 无法上网,这是问题的表征,问题的本质是 VM ubuntu 找不到对应的网卡,从而导致无法上网。
网络环境:
VM ubuntu 22.04 LTS宿主机: windows 11内存分配: 30G网络连接: NAT在我实践中,该问题的发生有两种原因:
给 VM Ubuntu 分配的内存大小发生改变时,可能会触发该问题VM Ubuntu 重启时,可能会触发该问题Solution
该问题的解决方式比较多样,因为每个人的发生问题不唯一,因此下面将从最简单的解法开始介绍,读者可以根据自己的情况,逐步尝试,直到解决问题为止。
方法一
遇事不决先重启,重启电脑重启 VM,接着再进行下一步的排查。
在这个问题下,可以再尝试重启一下 Ubuntu 的 network-manager 服务,命令如下:
sudo service network-manager stopsudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start
如果你是使用 systemd 进行管理,可以使用下面的命令:
sudo systemctl restart NetworkManager
有的时候 vmware 找不到网卡不一定是没有网卡,可能只是因为你禁用了,所以用上面的方式可以解决。
Restart 之后,你可以 curl 一下百度或者 google(if you can),看看能不能上网了,如果不能,那么就需要进一步排查了,命令如下所示。
curl www.baidu.com# curl www.google.com
方法二
笔者有一次网络无法使用,就是因为 windows 下把 vmware 的 nat 服务给关闭了,导致无法上网,然而这个服务当初是我手动关闭的,因为当初对其没有概念,因此,如果你没有手动对 vmware 的 nat 服务进行关闭,那么这个方法就不适用于你了。
检查一下 windows 下是否运行了 vmware 的 nat 服务,在任务管理器中可以查看到,如果没有运行,可以手动运行一下,如下图所示:
最后重启 ubuntu 即可。
方法三
如果上面两种方法都不行,那么就需要进一步排查了,首先,我们需要查看一下 ubuntu 的网卡信息,命令如下所示:
ifconfig
如下所示:
(base) zeeland@zeeland-virtual-machine:~$ ifconfigbr-d53b2b57ad37: ...docker0: ...lo: ...utun: ...veth214b03a: ...
可以看到,当前运行的网卡,基本上都是给我的 docker 用的,并没有看到如 eth0, ethe33, enp0s3 这样的网卡信息,那么就说明物理网络接口没有启动,因此没有显示在ifconfig输出中。
ifconfig 并没有显示所有的网络接口。虚拟机被配置为仅使用虚拟网络接口,要获得所有网络接口的完整列表,包括关闭的网络接口,可以使用 ip link 命令:
ip link show
(base) zeeland@zeeland-virtual-machine:~$ ip link show1: lo: <LOOPBACK,UP,LOWER_UP>...2: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 00:0c:29:fa:5a:57 brd ff:ff:ff:ff:ff:ff altname enp2s13: br-d53b2b57ad37: ...4: docker0: ...6: veth214b03a@if5: ...7: utun: ...
可以看到,在我的 Ubuntu 中,ens33 这个网卡应该是我 NAT 服务所需要使用的网卡,但是它的状态是 DOWN,因此,我们需要手动启动它,命令如下所示:
每个人的网卡名字可能不一样,eth0, ethe33, enp0s3 等等,因此,需要根据自己的情况进行调整。
sudo ip link set ens33 up
启动接口后,您可能还需要将其配置为通过DHCP获取IP地址或设置静态IP地址,具体取决于您的网络设置。如果使用DHCP,则可以使用dhclient命令:
sudo dhclient ens33
重启一下 NetworkManager 服务,命令如下所示:
sudo systemctl restart NetworkManager# sudo service network-manager restart
这个时候,你可以再次使用 ifconfig 命令查看一下网卡信息,正常状态下,你应该可以看到对应的 ens33 网卡信息了,尝试 ping 或者 curl 一下。
curl www.baidu.com
至此,问题应该已经解决了。
Conclusion
本文介绍了 VM ubuntu 无法上网的问题,以及对应的解决方案,希望能够帮助到读者,如果你有更好的解决方案,或者没有解决问题,欢迎留言讨论。