彻底解决VM ubuntu在虚拟机找不到网卡无法上网的问题
Zeeland 2024-06-28 12:37:03 阅读 70
💖 作者简介:大家好,我是Zeeland,开源建设者与全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland📚 Github主页: Undertone0809 (Zeeland)🎉 支持我:点赞👍+收藏⭐️+留言📝💬介绍:The mixture of software dev+Iot+ml+anything🔥
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 stop
sudo 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:~$ ifconfig
br-d53b2b57ad37: ...
docker0: ...
lo: ...
utun: ...
veth214b03a: ...
可以看到,当前运行的网卡,基本上都是给我的 docker 用的,并没有看到如 eth0, ethe33, enp0s3 这样的网卡信息,那么就说明物理网络接口没有启动,因此没有显示在ifconfig输出中。
ifconfig 并没有显示所有的网络接口。虚拟机被配置为仅使用虚拟网络接口,要获得所有网络接口的完整列表,包括关闭的网络接口,可以使用 ip link 命令:
ip link show
(base) zeeland@zeeland-virtual-machine:~$ ip link show
1: 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 enp2s1
3: 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 无法上网的问题,以及对应的解决方案,希望能够帮助到读者,如果你有更好的解决方案,或者没有解决问题,欢迎留言讨论。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。