Hyper-V 固定内网IP及连外网设置

在路上 2021-12-14 阅读:3068 评论:0
Win10 的 Hyper-V 虚拟机默认安装有一个虚拟交换机,这个交换机不能修改,也不能删除,它默认启用NAT, 可以连接外网。但有一个缺点,每次重启主机系统后它的ip都会随机改变,当有多个虚拟机想组内网时无法使用这个交换机。想要组成内网...

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



    Nat的网关IP

    • 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


  1. 删除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


版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

热门文章
  • 告诉老默,我想换系统了

    告诉老默,我想换系统了
       在电视剧狂飙中,高启强动手时,总会说一句,告诉老默,我想吃鱼了,现在言归正传,改变一下Windows和Linux的使用方式,也可以动手了。      在实际工作中,如果经常用Windows和Linux打交道,可能需要安装虚拟机来解决互相测试访问的问题,这样还面临D版的风险,那么问题来了,能不能不用虚拟机,用Linux的方式使用Windows,老实说这个需求在过去,比买等离子电视还难,但是最近几年,Windows已经做的相当不错了  下面来说说,Windows10,Win...
  • Windows系统鼠标右键菜单添加打开cmd终端

    Windows系统鼠标右键菜单添加打开cmd终端
      当要在某个文件夹下打开cmd终端时,如果没有右键菜单快捷方式,就得打开cmd后,使用cd方式进入 当前目录,很麻烦。 以下的脚本,可以帮你解决这个问题。第一步:新建一个txt文件,名字叫什么无所谓的 第二步:复制以下代码到刚才的txt文件中Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.ex...