Vmware Workstation 嵌套 Vmware Vsphere Hypervisor(ESXI)部署后虚拟机无法上网的问题

【背景】

现有日常机器配置结构:NUCmini主机(硬件)->Deepin Linux(物理机操作系统,日常办公用)->Vmware Workstation 16->N多虚拟机

最近Vmware发布了Vsphere Hypervisor 8,也就是我们常说的ESXI 8,想要测试下新的系统,后面把自己的服务器从ESXI 7迁移到ESXI 8。手头没有其他多余物理机,就像在Vmware Workstation里搭一个跑跑看。

Vmware Workstation 16现在已经可以支持ESXI部署和二次虚拟化。如图1

 

图1

 

部署好后得到的ESXI 主机网络如图2所示(这个ESXI虚拟机所在网段是172.16.250.0/24,分配到的IP是172.20.16.250.197,网关是172.16.250.2,按照Vmware Workstation的默认配置,DNS地址和网关相同,DHCP和虚拟交换机由Workstation内置)

这里有个知识点:Workstation的虚拟网卡和内置虚拟交换机默认不支持混杂模式(准确说不允许root用户以外的用户使用混杂模式),后面会用到

 

图2

 

这里一切正常,ssh登录ESXI服务器,可以ping通网关172.16.250.2和百度(* SSH默认不开启,需要在ESXI的系统配置界面-Troubleshooting Options-Enable SSH开启,这里不是web ui的后台,是在vmware部署esxi虚拟机的操作界面) 

然后就是登录ESXI Web UI,上传镜像并部署了一台windows 10的虚拟机(这里的win10就是接下来出问题地方)这里的win10是一个二次虚拟化系统,因为ESXI 8本身就是从物理机用workstation虚拟化出来的,然后win10又是从ESXI 8虚拟出来的。

折腾过ESXI的小伙伴都知道ESXI和Workstation在网络配置上有一个很大的不同。

Workstation里虚拟网卡有三种默认模式,桥接、NAT、Host。这三种模式除了桥接是复用物理网络设备获取上网地址外。NAT和Host模式都是直接利用了Workstation内置的三层交换(等同家用路由器)处理网络分配和对外路由。这个内置的三层交换对用户是不可见的,一般情况下不需要用户去手工干预

ESXI中没有这种内置的免配置三种网络模式(也就是没有内置的三层交换),ESXI里的虚拟机需要上网的话,是需要通过ESXI宿主机所在网络环境内的第三方交换机或路由器(如果ESXI是物理机,一般是物理机直连的交换和路由)获取网络信息,并通过进行外部路由 ,这也就是通过ESXI折腾NAS或其他私有云服务过程中,一会在ESXI上搞一个软路由的原因。

两者的区别,可以用一个不太恰当的说法来表明:Workstation本身是一个家用路由器,用它创建的虚拟机默认连在这个路由器上,可以直接使用网络。ESXI是一个纯虚拟化工具,它创建的机器需要像其他物理机一样连在外部路由器交换机上才能使用网络。

【遇到的问题】

部署好了win 10后,发现这个二次虚拟化的win10无法上网。简单检查后发现无法自动获取IP。按照上面的知识背景,我可以尝试配置静态IP来验证网络联通性。上面提到ESXI创建的虚拟机的IP信息来自EXSI所连接的路由交换。如图2所示,我们需要配置一个同网段的IP地址。

【解决方案】

所以我给win10配置了IP/掩码:172.16.250.130/255.255.255.0,网关/DNS:172.16.250.2。但是这个时候系统依然提示“无法识别的网络”,这个提示显然现在机器无法和网络进行互通。那么是否能ping通EXSI呢?理论上win10现在配置的网络和他的宿主机EXSI在同网段。但是这里发现还是无法ping通。经过一番搜索,网上折腾过NAS/软路由的同学提示:有些情况下需要对ESXI的虚拟交换机开启混杂模式才可以,可能是因为esxi的虚拟交换机不支持物理交换机的点对点转发。(https://blog.csdn.net/weixin_42221254/article/details/103697660)

来到ESXI的Web UI,找到win10虚拟机的网络配置,如图所示:当前网络配置的端口组是默认的“VM Network”(图3),并且是已连接状态。找到这个端口组,看到它挂的是虚拟交换是默认的“vSwitch0”(图4),找到这个虚拟交换机配置,确认他的上行链路是ESXI的物理网卡,然后在安全选项里吧混杂模式的三个选项都打开(图5)

 

 

 图3

 

 

 图4

图5

配置好了混杂模式,这次回到win10虚拟机,执行ping命令发现还是无法ping通网关,但是配置静态ip后可以ping通ESXI这个宿主机(172.16.250.197)了。到这里说明win10虚拟机(二次虚拟化)到ESXI这个宿主机(一层虚拟化)的网络是互通的了,这个地方说明ESXI的虚拟交换是正常的了,这个虚拟交换机是二层交换,还起不到路由的作用,所以只能网内通信,还不能通道外网。

【知识点】之前的背景里讲过,ESXI没有路由和交换的功能,但这里为什么又出现了虚拟交换机呢?其实从网络技术和网络架构上讲,EXSI这个虚拟交换机不是一个真正的交换机,更多的是起到一个网桥的作用,桥接到了ESXI所在网络,由于是桥接,这里配置好了混杂模式,就可以和ESXI所在的网络进行内部通信。

到这里其实还没有解决问题,因为我们需要win10可以正常上网。

但这里就很纠结了,总不能为了这个东西单独配置一个软路由来实现上网。那样就背离了我们测试的目的。还是需要能让这个二次虚拟化系统直接请求到vmware内置的三层交换,这样可以使用DHCP和路由功能,但是为什么win10无法直接请求呢?知道看到了这篇文章:https://blog.51cto.com/gjr0512/1626409。文章里,这个小伙伴是ESXI嵌套了Workstation,他的架构是ESXI->Workstation->虚拟机,相当于把一层虚拟化的网卡改成了混杂模式,用来支撑二层虚拟化的网络互通。举一反三,我们也需要把一层网络置于混杂模式,也就是我们要把Workstation放在混杂模式。

就遇到第二个问题,ESXI是面向企业用户的,可配置项比较多,但Workstation本身是面向终端用户的,大部分都是内部预制好的,避免用户的复杂操作,所以根本就没有混杂模式选项。搜索后在Vmware官网找到了答案(https://docs.vmware.com/cn/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-089D2595-26C5-433B-9DA4-D2A94C63B7B5.html),如图6

 

 图6

只有root用户可以自行开启混杂模式。这里用:sudo vmware命令,通过root启动vmware,然后打开ESXI虚拟机和ESXI里面的win10虚拟机,现在发现无论是静态IP还是动态DHCP,都可以很顺利的在Vmware内置三层交换上获取IP并通过Vmware进行路由上网。这里已经完整的解决问题了,唯一的麻烦是需要通过root用户启动vmware,不太安全。

好在下面的示例中提供了给虚拟网卡加驱动的方式,使得普通用户启动的vmware也可以跑在混杂模式下。先查看下自己的虚拟网卡有哪些,如图7

 

图7 

vmnet 0是桥接,vmnet1是HOST,vmnet8是NAT。我们这里ESXI在Vmware中使用的是NAT模式,所以给vmnet8增加用户组权限:chgrp username /dev/vmnet8 && chmod g+rw /dev/vmnet8。配置vmnet8网卡可以被root和普通用户进行读写。但是发现还是不太行。需要给vmnet8加上其他用户有rw权限才可以。所以最后直接执行chmodo a+rw /dev/vmnet8,然后重启vmware所有服务:/etc/init.d/vmware restart就可以了

*这个点挺奇怪的,无论分配组是哪一个,都需要组权限和其他权限。

 

所以总结下来,如果需要用到多层嵌套部署虚拟机,需要在两层虚拟化的网络配置上都开启混杂模式才可能保证多层虚拟化都可以路由到互联网

posted @ 2022-10-13 18:22  隐念笎  阅读(3884)  评论(0编辑  收藏  举报