由于Hyper-V的特殊性,为了实现嵌套虚拟化,必须虚拟机也使用Windows+Hyper-V。
由于微软留下的大坑:
Virtualization applications other than Hyper-V are not supported in
Hyper-V virtual machines, and are likely to fail. This includes any
software that requires hardware virtualization extensions.
无法在Hyper-V的虚拟机内使用vmware/solusvm等其他虚拟化软件,之前在这里纠结了半天,明明实体机/vmware上的centos正常运行,在虚拟机内就行不通了。
因此我需要使用Windows+Hyper-V来实现嵌套虚拟化。其效果如下:
以下是实现的流程
开启嵌套虚拟化
在第一层母鸡创建虚拟机,然后以管理员身份运行:
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
使用:
Get-VMProcessor -VMName test | fl
查看ExposeVirtualizationExtensions
显示为True
即可。
然后在小鸡的Windows里开hyper-v虚拟机正常的话,说明嵌套虚拟化开启成功。
在小鸡的linux内使用lsmode
查看是否有kvm来确认是否开启了嵌套虚拟化。只不过hyper-v只能嵌套hyper-v,而hyper-v只能在Windows上使用,所以linux开嵌套虚拟化没有意义。
nat交换机
因为我只有一个公网ip,因此需要Hyper-V+nat交换机,才能正常上网。
微软官方文档中有介绍Hyper-V配置NAT网络的详细步骤:
打开设备管理器,选择添加过时硬件——选择“安装我手动从列表选择的硬件”,在“常见硬件类型”中选择“网络适配器”——厂商选择“Microsoft”,型号选择“Microsoft KM-TEST回环适配器”,单击下一步,按照所给出的提示Windows将自动安装这个设备。
打开Hyper-v ——点击——虚拟机交换机管理器选项,选择——外部——虚拟交换机,再点击创建虚拟交换机——指定虚拟交换机名称——“外网交换机”——使用“Microsoft KM-TEST回环适配器”,就可以在使用虚拟机时使宿主机和虚拟机在同一个虚拟的局域网内,并且由宿主机模拟出的交换机访问外网。
打开“网络和共享中心”,——“更改适配器选项”。选择你现在能连接网络的网卡(也就是装Hyper-V之前的网卡),右键“属性”——“共享”一栏,勾选上“允许其他网络用户通过此计算机的Internet连接来连接”。家庭网络连接——选择刚才新建的那个“外网交换机”。我的Windows server 2019已经没有家庭网络连接这个选项了。可以不用。
到时候可以直接创建虚拟机的时候选择这个网卡,类似VMware的nat网络。
端口映射
虽然netsh是可以端口映射,但为了开机自启可用,还是使用Windows防火墙吧,Windows防火墙也是可以实现端口映射的,配合端口映射+hyper-v开的小鸡是可以实现开nat小鸡的目标。
Windows server2019的防火墙已经删掉这个功能了,最少我没找到。
幸好我找到一个国人写的工具,感觉不错。(我不用netsh就是因为没法可视化)
https://github.com/zmjack/PortProxyGUI
下载,打开用就行。
监听本地端口 - 虚拟机内系统的ip即可,例如192.168.137.49
,二层Windows虚拟机应该能ping通nat网卡下的三层ip.
最后效果如下所示:
参考:
Run Hyper-V in a Virtual Machine with Nested Virtualization
借助嵌套虚拟化在虚拟机中运行 Hyper-V
Hyper-v 开启嵌套虚拟化的方法
Hyper-V桥接方法和NAT网络地址转换配置方法
Set up a NAT network
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/132.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。