任何时候你都可以开始做自己想做的事

搜索|
win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法
发布时间:2024-08-01 00:07:12

因为直接使用GUI界面给hypuer-v内部交换机 共享网络的方式,会出现莫名的不稳定,经常失效,导致虚拟机无法上网,
解决方法:使用powershell方式创建NAT网络。

以管理员身份打开 PowerShell 控制台。

创建内部交换机。(也可在hyper-v管理器里可视化的方式创建一个内部交换机)

    New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal


3.查找刚创建的虚拟交换机的接口索引。

      可以通过运行 Get-NetAdapter 来查找接口索引

      你的输出应类似下面的形式:

   win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法(图1)

   内部交换机的名称将类似于 vEthernet (neibu110),接口描述将为 Hyper-V Virtual Ethernet Adapter。 请记下其 ifIndex 以便在下一步中使用。

   4 .使用 New-NetIPAddress 配置 NAT 网关。

    若要配置网关,你将需要一些有关你的网络的信息:

  • IPAddress - NAT 网关 IP 指定要用作 NAT 网关 IP 的 IPv4 或 IPv6 地址。 常规形式将为 a.b.c.1(例如 172.16.0.1)。 尽管最后一个位置不一定是 .1,但通常是 1(基于前缀长度)。 此 IP 地址位于来宾虚拟机使用的地址范围。 例如,如果来宾 VM 使用 IP 范围 172.16.0.0,则可以使用 IP 地址 172.16.0.100 作为 NAT 网关。

  • 通用网关 IP 为 192.168.0.1

  • PrefixLength -- NAT 子网前缀长度定义的 NAT 本地子网大小(子网掩码)。 子网前缀长度将介于 0 到 32 之间的一个整数值。

  • 0 将映射整个 Internet,32 则只允许一个映射的 IP。 常用值范围从 24 到 12,具体要取决于多少 IP 需要附加到 NAT。

  • 常用 PrefixLength 为 24 -- 这是子网掩码 255.255.255.0

  • InterfaceIndex -- ifIndex 是你在上一步中确定的虚拟交换机的接口索引。


    运行以下内容来创建 NAT 网关:   
    New-NetIPAddress -IPAddress 192.168.13.1 -PrefixLength 24 -InterfaceIndex 17


win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法(图2)

使用 New-NetNat 配置 NAT 网络

若要配置网关,你将需要提供一些有关网络和 NAT 网关的信息:

  • Name - NATOutsideName 描述 NAT 网络的名称。 将使用此参数删除 NAT 网络。

  • InternalIPInterfaceAddressPrefix - NAT 子网前缀同时描述上述 NAT 网关 IP 前缀和上述 NAT 子网前缀长度。

常规形式将为 a.b.c.0/NAT 子网前缀长度

综上所述,对于本示例,我们将使用 192.168.13.0/24

对于我们的示例,运行以下命令以设置 NAT 网络:

New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.13.0/24

win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法(图3)

虚拟机网络对应配置IP和网关掩码:
win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法(图4)

至此完成 对使用内部交换机的虚拟机共享公网网络的配置!

请留意:如果虚拟机还使用了物理机端口映射的,需配置内部交换机的ip在NAT网段,不然端口映射会失效

不支持多个 NAT 网络

本指南假设主机上没有其他 NAT。 但是,应用程序或服务将要求使用一个 NAT,并且有可能创建一个 NAT,使之作为安装的一部分。 由于 Windows (WinNAT) 仅支持一个内部 NAT 子网前缀,因此尝试创建多个 NAT 将使系统处于未知状态。

若想知道这是否是个问题,请确保你只有一个 NAT:

Get-NetNat
如果已存在一个 NAT,请将其删除:
Get-NetNat | Remove-NetNat
-------------------------------------
请确保应用程序或功能(例如 Windows 容器)仅有一个“内部”vmSwitch。 记录 vSwitch 的名称
Get-VMSwitch

-----------------
检查是否仍存在从旧 NAT 向适配器分配的专用 IP 地址(例如 NAT 默认网关 IP 地址 – 通常为 x.y.z.1)
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"

如果旧专用 IP 地址仍在使用中,请将其删除
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>

----------------------------------------------------------

相关知识:hyper-v作为windows10原生支持的虚拟机,安装使用起来是很方便的,但是它最大的问题就是网络不够傻瓜化,不像vmware提供了桥接、NAT、hostonly等多样的组网需求,hyper-v只提供了虚拟交换机这一种网络设备。如果想要虚拟机上外网,hyper-v提供了一种Internet连接共享的方案来实现(网上大部分教程都是使用这一方式)。而这个方案依赖ICS(Internet Connection Sharing)服务的支持,一旦改服务被禁用,那这个方式也将变得不可用,而很不幸的是,因为安全问题,ICS服务禁用了。

win2016、win10 共享公网网络给使用内部交换机的虚拟机的方法(图5)



更多关于NAT网络设置的文档请查看微软官方文档:
https://learn.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-guide/setup-nat-network