hyper-v实战系列:创建NAT网络共享主机上网

分类: 365bet官网体育娱乐 时间: 2025-10-02 17:25:45 作者: admin 阅读: 1145

1. 实现目标

hyper-v中的所有虚拟机通过NAT网络的方式来共享主机的网络与IP,其中包括创建相应的hyper-v虚拟交换机,DHCP服务器,防火墙配置与端口转发等。

2. hyper-v网络概述

2.1 几种网络模式

hyper-v有3种网络模式(即虚拟交换机),如下图所示:

外部交换机:类似于vmware workstation中的桥接网络,最简单直接的网络连接方式,虚拟机与宿主机都处是同一个局域网中。内部交换机:用于宿主机与虚拟机之间的连接。使用场景包括我这篇写的NAT网络和hyper-v自带的默认交换机。专用交换机:用于虚拟机与虚拟机之间连接。实话说我并没怎么用过,可能的使用场景是构建与物理机隔离的虚拟机间专用内网。

2.2 默认虚拟交换机(default switch)

hyper-v自带默认虚拟交换机(default switch),正常情况下,用它来给虚拟机联网就足够了。

但该虚拟交换机(本质上是一个由微软预定义的内部交换机)也有几个明显的缺点:

无法进行配置:即无法指定网段、dns等信息,对于高级用户来说比较鸡肋。无法进行重置:一旦出了问题,无从下手修复,只能通过在控制面板中重置hyper-v功能来解决。系统特定:只有消费级别的windows10, windows 11等系统有,windows server中的hyper-v并没有。

2.3 虚拟交换机之-----外部交换机

2.3.1 外部交换机优点

外部交换机(即我们经常提及的桥接网络),使用最简单,首要推荐。一般家里、公司里网络都是dhcp方式直接获取ip上网, 使用外部交换机后虚拟机就直接有了新的ip, 且与宿主机处于同一个子网,使用远程桌面什么的都非常方便。

2.3.2 外部交换机缺点

无法在主机需要固定ip的情况下使用:例如主机是一个机房服务器,需使用专线网络提供的固定ip、dns手动设定好。 无线网卡兼容性差:对于笔记本电脑用户,好多人都是直接用wifi上网的,不使用有线上网。但对于现在很多新型号的wifi网卡(比如大部分的wifi6无线网卡),使用它来创建外部交换机时会报错(大概率是驱动不兼容之为类的原因)。这个问题其实也比较好解决(我就经常建议客户这么做,简单省事):买一个几十块的普通的usb无线网卡(记得越普通越好,越新的反而不支持)来专门给hyper-v创建外部交换机使用。

因为外部交换机及默认虚拟交换机的以上缺点,所以有时候就需要自定义一个NAT网络来实现联网,于是有了下文。

3. 如何创建NAT网络

hyper-v管理器并不提供创建自定义NAT网络的界面操作,所以只能在powershell脚本下进行

我这里要创建的一个名为【NATNetwork】的NAT网络(本质上是一个hyper-v的内部交换机),子网为192.168.88.0/24,网关为192.168.88.1

3.1 创建自定义内部交换机

交换机名字叫:NATNetwork

New-VMSwitch -SwitchName "NATNetwork" -SwitchType Internal

3.2 获取交换机接口索引

执行Get-NetAdapter命令

Get-NetAdapter

然后找到name列为NATNetwork的行,记录其ifIndex列的值,此处为:10,如下图所示:

3.3 配置 NAT 网关

配置nat网关的powershell命令大概如下:

New-NetIPAddress -IPAddress -PrefixLength -InterfaceIndex

这里我们按照前面说定的网关ip、子网和ifIndex填入上述命令,然后执行即可,具体命令如下:

New-NetIPAddress -IPAddress 192.168.88.1 -PrefixLength 24 -InterfaceIndex 10

3.4 配置 NAT 网络

这里主要就是设定子网的范围,具体命令如下:

New-NetNat -Name MyNATNetwork -InternalIPInterfaceAddressPrefix 192.168.88.0/24

3.5 查看刚创建的网络

4. 如何使用NAT网络

4.1 设置客户虚拟机的网络适配器

在虚拟机设置里,将网络适配器配置为前面创建的NATNetwork交换机即可,如下图所示:

上述步骤只是将网卡连上到NATNetwork这个交换机去而已(其实更准确地说,应该是一个虚拟路由器),并不是马上就能成功联网的!

4.2 手动设置客户虚拟机的IP相关信息

启动虚拟机,进入到系统后,在网卡配置里,配好以下信息

ip: 192.168.88.5(该NAT子网段任意一个可用的ip皆可)

子网掩码:255.255.255.255

网关:192.168.88.1(前述创建的网关地址)

dns:114.114.114.114 (我这里设置的是一个公共的dns,当然在公司或家里等环境下,可能是192.168.1.1之类的更近一级的dns)

具体配置如下所示,完成后保存即可

4.3 成功联网

设置成功后,稍等一会,应该就能愉快地上网了,如下图所示

4.4 使用dhcp服务器动态设置客户虚拟机的IP等信息

对于只运行一两台虚拟机的主机,使用手动配置ip的方式简单方便。

但如果在工作室或公司环境下,服务器主机上面运行几十个虚拟机是十分常见的事情,手动配置ip的方式一来繁琐,二来维护麻烦。

这种情况下,就需要一个dhcp服务器来做动态ip的分配工作了。

4.4.1 dhcp服务器选择

dhcp服务器在linux和windows下都有很多选择,我这里不会展开再说。由于我对dhcp服务器的功能需求非常简单:在普通windows下能使用,配置简单方便即可。

所以这里我推荐使用dhcpserver,一个非常小巧,大部分windows系统都能适用,而且配置起来十分简单明了,从可这里下载:Download | DHCP Server for Windows

4.4.2 dhcp服务器操作系统配置

新建一个虚拟机(这里叫nat_dhcp)用于安装dhcpserver,具体操作系统按自己喜好即可,虚拟机的安装步骤我也不再赘述,完成安装后,做以下两步:

(1). 配置nat_dhcp虚拟机的网络适配器为前述的NATNetwork交换机,如下图所示:

(2) 配置nat_dhcp虚拟机的IP相关信息,这里ip为192.168.88.2,子网掩码为255.255.255.0,默认网关为192.168.88.1,dns服务器为192.168.1.1(这里我没有像前述那样设置一个公共的dns,而是设置为我上一级的dns,也即我家里的路由器ip)如下图所示:

(3) 配置成功后,nat_dhcp虚拟机即可正常上网,如下图所示:

4.4.3 配置dhcpserver软件

(1) 双击dhcpwiz.exe进入配置,如下图所示:

(2) 配置dns

(3) 配置IP分配策略,我这里将分配的ip段限制为192.168.88.50~192.168.88.200

(4) 保存配置文件

(5) 启动dhcp服务

至此,dhcp服务器配置完成

4.4.5 客户虚拟机配置

新建一个客户虚拟机(名叫win11_24h2),将网络适配器连接到NATNetwork交换机,如下图所示:

备注:dhcp服务原理简要解析:因为客户虚拟机与dhcp服务器虚拟机处于同一个网段(即NATnetwork下),所以客户虚拟机的dhcp客户端(系统自带功能)会发出广播获取dhcp配置,而dhcp服务器虚拟机获取该广播请求后,会给这个客户虚拟机的mac地址分配ip、dns、网关信息。这个过程是全自动的,无论人工参与。

所以客户虚拟机在开机后,就能自动联网,且获取的IP地址是在之前配置dhcp服务器的ip段内,如下图所示:

4.4.6 成功联网

5. 网络连接问题

5.1 两台虚拟机之间互ping

一般情况下,由于系统防火墙没有开启ICMP响应,一台计算机ping不通另一台计算机的,这里以虚拟机win11_24h2(ip为192.168.88.105)向虚拟机win11_ltsc(ip为192.168.88.5)发出ping为例,会报请求超时的错误,如下图所示:

解决办法:在192.168.88.5虚拟机的防火墙打开ICMP响应(在高级防火墙中的入站规则里),如下图所示:

回到虚拟机192.168.88.105再次发出ping请求,能正常收到响应了,如下图所示:

从虚拟机win11_ltsc(ip为192.168.88.5)向win11_24h2(ip为192.168.88.105)发出ping请求也是同样的设置方法,这里不再赘述。

5.2 远程桌面连接(MSTSC)

下面各案例中提到的主机名称及其IP,在这里先统一记录:

虚拟机win11_24h2 192.168.88.105

虚拟机win11_ltsc 192.168.88.5

hyper-v宿主机 192.168.1.237

win10_dev 192.168.1.33

以下被远程桌面连接的主机都是虚拟机win11_ltsc

5.2.1 案例(1) 从NATNetwork网络下发起连接

从虚拟机win11_24h2发起远程桌面到虚拟机win11_lstc,只需要在win11_lstc上开启远程桌面功能即可即可(因为两台主机都同在NATNetwork下),具体如下:

(1) 虚拟机win11_lstc打开远程桌面功能

备注:开启远程桌面后,系统会自动配置防火墙允许远程桌面访问,对于一些老点的系统,可能需要手动将3389端口加入到防火墙规则才行

(2) 虚拟机win11_24h2发起远程桌面连接

(3) 成功连上

5.2.2 案例(2) 从hyper-v宿主机里面发起连接

如果要从hyper-v宿主机使用远程桌面连到win11_lstc,直接发起连接是不行的。

因为win11_lstc所在网段(192.168.88.x)是宿主机所在网段的(192.168.1.x)的下一级网段。

(1) 宿主机做端口转发

所以这里需要在宿主机做端口转发,这里以55555端口为例。也即把宿主机上55555端口的流量转发到win11_lstc的3389端口上。

具体的powershell命令如下(在管理员模式下执行):

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=55555 connectaddress=192.168.88.5 connectport=3389

(2) 宿主机发起远程桌面连接

所以现在需要由原来连接到win11_ltsc的3389端口改为连接到宿主机本地的55555端口,也即:127.0.0.1:55555,如下图所示:

(3) 成功连上

5.2.3 案例(3) 从hyper-v宿主机外部发起连接

这里的hyper-v宿主机外面指的是与他同一网段下的另一台机器,叫win10_dev, ip为192.168.1.33

(1) hyper-v宿主机防火墙开放55555端口

win10_dev要想访问到hyper-v宿主机上面的55555端口,必须手动在宿主机防火墙上开放该端口(注意:是宿主机!!!),我这里直接通过powershell来执行:

New-NetFirewallRule -DisplayName "Allow TCP Port 55555" -Direction Inbound -Protocol TCP -LocalPort 55555 -Action Allow -Enabled True

(2) 外部主机(win10_dev)发起连接

(3) 成功连上

备注:如果需要转发其他端口,例如mysql中的3306,也是一样的做法。

6. 参考

界面端口代理的 Netsh 命令 | Microsoft Learn

设置 NAT 网络 | Microsoft Learn

相关文章

365bet官网体育娱乐

柠檬树掉叶子一碰就掉怎么办,先找准原因再治理

365bet亚洲版官

火影忍者手游乌鸦通灵满级攻略:151级养成成本与资源规划全解析

365bet亚洲版官

捕捉蝴蝶的网叫什么网