Win10 的 Hyper-V 虚拟机默认安装有一个虚拟交换机,这个交换机不能修改,也不能删除,它默认启用NAT, 可以连接外网。但有一个缺点,每次重启主机系统后它的ip都会随机改变,当有多个虚拟机想组内网时无法使用这个交换机。
想要组成内网又要连接外网,目前有两个方案可供选择。
1.新建一个内网交换机,然后每台虚拟机都添加默认交换机和新建的这个内网交换机,组成双网卡。缺点是双网卡情况下可能需要指定路由策略。
2.新建一个内网交换机,并为它新建NAT,然后每台虚拟机都仅使用这个交换机。缺点是ip,网关,dns等需要手动指定,当主机切换网络环境后可能需要更改dns设置才能连外网。
针对第二个方案,需要在 powershell 中输入命令创建NAT.
1 2 3 4 5 6 7 8 9 10 11 |
#新建内网交换机,此步可在 Hyper-V 交换机管理界面中创建 New-VMSwitch -SwitchName '内部网络 NAT' -SwitchType Internal -Verbose #获取上一步创建的交换机的接口索引,字段为 ifindex 的值就是索引 Get-NetAdapter #假设上一步中获得的接口索引为20,为接口指定ip和子网 New-NetIPAddress 192.168.10.1 -PrefixLength 24 -InterfaceIndex 20 -Verbose #新建NAT,名称为HyperV-NatNetwork, 网段为 192.168.10.0 New-NetNat -Name HyperV-NatNetwork -InternalIPInterfaceAddressPrefix 192.168.10.0/24 -Verbose |
可以写一个简单的 powershell 脚本,保存为 Hyper-V-Nat.ps1
1 2 3 4 5 6 7 8 9 10 11 |
##### $Natswitchname ="内部网络 NAT" $NATNetwork ="192.168.10.0" $NATrouteraddress ="192.168.10.1" $NATPrefixLength ="24" ##### New-VMSwitch -SwitchName $Natswitchname -SwitchType Internal -Verbose $natswitch = Get-NetAdapter | where-object {($_.name -like '*$Natswitchname*')} New-NetIPAddress $NATrouteraddress -PrefixLength $NATPrefixLength -InterfaceIndex $natswitch.interfaceindex -Verbose $NATNetworkFull = $NATNetwork + "/" + $NATPrefixLength New-NetNat -Name HyperV-NatNetwork -InternalIPInterfaceAddressPrefix $NATNetworkFull -Verbose |