Win10 的 Hyper-V 虚拟机默认安装有一个虚拟交换机,这个交换机不能修改,也不能删除,它默认启用NAT, 可以连接外网。但有一个缺点,每次重启主机系统后它的ip都会随机改变,当有多个虚拟机想组内网时无法使用这个交换机。
想要组成内网又要连接外网,目前有两个方案可供选择。
1.新建一个内网交换机,然后每台虚拟机都添加默认交换机和新建的这个内网交换机,组成双网卡。缺点是双网卡情况下可能需要指定路由策略。
2.新建一个内网交换机,并为它新建NAT,然后每台虚拟机都仅使用这个交换机。缺点是ip,网关,dns等需要手动指定,当主机切换网络环境后可能需要更改dns设置才能连外网。
针对第二个方案,需要在 powershell 中输入命令创建NAT.
#新建内网交换机,此步可在 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
##### $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
最后附上一些常用命令
创建一个内部网络
模板:New-VMSwitch -SwitchName "SwitchName" -SwitchType In
ternal 案例:New-VMSwitch -SwitchName "nat" -SwitchType Internal
这个SwitchType Internal
对应
这个SwitchName
对应
查看当前已拥有的虚拟交换机。
Get-NetAdapter
NATOutsideName外部名,随便填,这个名字用于后面删除用 NAT subnet prefixNAT网络的子网前缀。然后就可以改了。 NAT Gateway IP
子网掩码是多少位,这里就不用你填写计算子网掩码了。我填的30位。两台机子。
NAT Subnet Prefix Length
ifIndex
这个是上面通过Get-NetAdapter
命令查看的输出,对应ifindex
。删除交换机
Remove-VMSwitch "nat"
建立
Nat
的内部网段模板:New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex> 案例::New-NetIPAddress -IPAddress 10.1.1.1 -PrefixLength 30 -InterfaceIndex 66
为当前主机的某个接口创建
NAT
模板:New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix> 实例:New-NetNat -Name vmnat -InternalIPInterfaceAddressPrefix 10.1.1.0/30 删除NetNat Remove-NetNat
删除
NAT
删除用对应的指令删除,将
Get New Remove
配套的,然后根据对应参数,或者名字删除。查看
Get-NetNat
删除
Get-NetNat | Remove-NetNat
获取内部的交换机
Get-VMSwitch
#查看某个地址池
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"
之前创建的
vEthernet (nat)
列表可以通过Get-NetAdapter
指令查看删除地址池
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>
删除虚拟交换机
Remove-VMSwitch "QoS Switch"
更多可以参考微软官方文档
https://docs.microsoft.com/en-us/powershell/module/hyper-v/remove-vmswitch?view=windowsserver2022-ps&viewFallbackFrom=win10-ps
Nat的网关IP
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。