编者按:对于Hyper-V 中的虚拟机来说,可以使用VLAN/PVLAN 等方法,来实现网络隔离。但是,这必然存在两个基本的限制,其一是其最大的VLAN/PVLAN的ID 只能是4096 个,即其支持的网络类型和个数是有限的。其二是当在虚拟机中配置好了VLAN ID 后,想让其和其他Hyper-V主机中具有相同VLAN ID的虚拟机通讯,还需要在物理的交换机上设置端口VLAN ID,才可以保证虚拟机之间网络隔离的有效性。
基于以上缺点,决定了VLAN 这种网络隔离方式,无法适用于大规模的网络应用场景(例如对于公有云等)。对于企业的数据中心来说,当需要使用一个新的VLAN来实现新的隔离网络时,管理员既要在Hyper-V的虚拟机中进行配置,也需要在物理交换机上进行配置。当虚拟机移动到其他的数据中心时,管理员也需要在其他数据中心的物理网络进行重复的配置操作。
综上所述,使用传统的网络隔离方式,大大增加了管理员的工作负担。
利用Hyper-V的网络虚拟化功能,可以很好的解决以上问题,该功能具有很好的灵活性,当对其配置完成后,管理员无需在物理网络上进行变更操作,就可以实现虚拟机的灵活移动。
管理员能够在Azure 等公有云平台中创建一个网络,并使其可以和本企业数据中心的网络进行对接。这样,管理员就可以根据需求,在公有云中部署相应的资源,将公有云公有云和数据中心进行打通,来实现混合云的应用。
即将重要数据和系统保存在数据中心,把其他的资源保存到公有云,并且让管理员感觉是在管理一套数据中心。
对于Hyper-V 网络虚拟化功能来说,其包含Windows Server,System Center(即SCVMM)和Azure Pack/Stack等组件。
对于Azure Pack/Stack来说,可以理解为Azure 公有云的用于企业部署的版本,便于管理员在企业中部署类似于Azure的私有云平台。
注意:这是一个可选的组件。
在本例中,存在名为“dc.xxx.com”域控主机,在名 为“vmm1.xxx.xom”的主机上部署SCVMM,在“hvsrv1.xxx.com” 和“hvsrv2.xxx.com”主机上部署Hyper-V 服务,在“gw1.xxx.com”的主机上部署网络虚拟化网关服务,在“db1.xxx.com”主机上部署SCVMM 所需的数据库。
在“db1.xxx.com”主 机安装SQL Server 2016 SP2,在安装之前,在PowerShell中执行“Install-WindowsFe ature NET-Framework-Core-Source F:sourcesxs”命令,来安装.NETFrame 3.5 组件,其中的“F”盘为WinServer 2016 光盘。
SQL Server的安装比较简单,这里就不在赘述了。值得说明的是,需要事先准备好一个普通的域账户,作为SQL Server的服务账户。在SQL Server 安装界面中打开“服务器配置”窗口,分别针对SQL Server 代理和SQL Server 数据库引擎选择该账户,并输入其密码。为了便于使用,将当前的域管理员指定了SQL Server的管理 员。在“vmm1.xxx.com”的主机上先安装Windows 评估和部署工具包ADK,这里使用的是其1803 版本。
注意,在其安装界面中只选择“部署工具”和“Windows预安装环境(Windows PE)”项即可。
之后安装SCVMM2016-180 1 版本,其安装过程非常简单,在其中的数据库配置窗口中的“数据库名称”栏中输入“db1.xxx.com”,来连接上述数据库服务器,并在其中创建名为“VirtualManagerDB”的数据库。点击“下一步”按钮,选“域账户”项,输入预先创建的域账户(例如“xxxvmmsvc”)和密码。该账户是普通的域账户,但是其必须是本地管理员组的账户。
在CMD 窗口中执行“net localgroup administrators xxxvmmsvc/add”命令,来完成添加操作。当安装完成后,在PowerShell 中执行“Enter-PSSession hvsrv1.xxx.com”命令,远程登录到“hvsrv1.xxx.com”主 机上,执 行“Get-NetAdapter”命令,查看该机的网卡信息,这里显示“vSwitch1”,“Vswitch2”和“Mamagement”等设备。
使用同样的方法,可以查看“hvsrv2.xxx.com”的 网卡信息。
在SVCMM 管理界面左下角选择“设置”项,在左侧选择“常规”项,在右侧选择“网络设置”项,在打开窗口中取消“自动创建逻辑网络”项的选择状态。在左下角选择“构造”项,在左侧的“服务器”→“所有主机”项的右键菜单上点击“创建主机组”项,创建新的主机组(例如“Hostgrp”)。
在该组的右键菜单上选择“添加Hyper-V 主机和群集”项,在向导界面(如图1)中选择“受信任的Active Directory 域中的Windows Server 计算机”项,点击“下一步”按钮,选择“使用现有运行方式账户”项,点击“浏览”按钮,在打开窗口中点击“创建运行方式账户”按钮,在打开窗口中输入账户名称(例 如“Domain Admin”),在“用户名”栏中输入合适的域账户(例 如“xxx/admibistrator”)和密码。
图1 添加Hyper-V 主机
因为SCVMM 需要使用该账户的身份,来目标Hyper-V主机中安装相应的Azure 程序。之后点击“下一步”按钮,输入“hvsrv1.xxx.com”和“hvsrv2.xxx.com”两 台Hyper-V 主机名,点击下一步按钮,在“主机组”列表中选择上述新建的主机组,在“添加以下路径”栏中输入新的存储路径,点击“添加”按钮,添加该路径。点击“完成”,完成Hyper-V 主机添加操作。
为了提高效率,可以使用户模板来创建虚拟机。在左下角选择“库”项,在左侧选择“库服务器”→“vmm1.xxx.com” →“MSSCVMMLIbra ry”→“VHDs”项,在右侧显示可用的VHD/VHDX 模板。
当然,也可以将更多的模板复制进来。在左下角选择“VM 和服务”项,点击工具栏上的“创建虚拟机”按钮,在向导界面中选择已经存在的模板,点击“下一步”按钮,输入虚拟机名称和描述信息,在“代”列表中选择“第二代”项。在下一步窗口中配置虚拟机的CPU 和内存信息,点击“下一步”按钮,将其存储到上述“Hostgrp”主机组中。点击“下一步”按钮,选择目标Hyper-V 主机。
再选择操作系统版本信息,其余设置保持默认,点击创建按钮,创建该虚拟机。同理,可以创建更多的虚拟机。例如,在“hvsrv1.xxx.com” 主机上创建“vcomputer1”的虚拟机,在“hvsrv2.xxx.com”主机上创建“vcomputer2”的虚拟机。
对于Hyper-V的网络虚拟化来说,其主要包括VSID(Virtual Subnet ID)、CA(C ustomer Address)、PA(Pro vider Address) 和Packet Encapsulation Format NVGRE/VXLAN 等部件。网络虚拟化使用VSID 来实现网络隔离,其范围从4096到224-2。这意味着可以在Hyper-V的虚拟网络中扩展出几千万个不同的网络。当对某个隔离的网络指定了VSID 之后,就需要为其中的所有虚拟机配置IP,便于其进行通讯。
利用CA 可以为指定了VSID的隔离网络分配IP,不同的VSID 中可以使用相同的IP,彼此之间不会造成影响,这很适用于公有云的环境。为了保证在不同Hyper-V 主机之间的具有相同SVID的虚拟机之间进行通讯,就需要得到PA的支持。PA 是在Hyper-V 主机上的虚拟交换机上进行配置的,因为不同Hyper-V 主机中的虚拟机,必须依靠Hyper-V 主机的虚拟交换机进行连接。正因为如此,虚拟机进行通讯时,其地址也必须进行相应的转换,即将其封装到PA的数据包中。
在Windows Server 2016中,支 持NVGRE 和VXLAN 两种封装格式。对于CA 和PA来说,其地址可以任意定义的。在不同Hyper-V 主机中虚拟机进行通讯时,会先数据包发送给其所属的默认网关,默认网关会将其投递给PA,PA 会将虚拟机的数据包进行封装,之后通过PA的网络,将其发送给目标Hyper-V主机,之后该主机会对其进行解封装操作,并将数据包发送给目标虚拟机。整个通讯过程完全和物理网络没有任何关系,仅仅是PA 利用了物理的链路而已。
在SCVMM 左下角选择“构造”项,在左侧选择“网络”→“逻辑网络”项,在其右键菜单上点击“创建逻辑网络”项,在向导界面中输入其名称(例如“PAwz”),该逻辑网络就是PA的网络,其需要承载虚拟机的数据封装和投递。所以,需要在下一步窗口中选择“一个链接的网络”和“允许在此逻辑网络上创建新的VM 网络以使用网络虚拟化”项。
点击“下一步”按钮,选择所有的主机组。在“关联的IP 和子网”栏中输入所需的IP 子网(例如“192.168.2.0/24”),在“网络站点名称”栏中可以修改其名称,点击“完成”按钮,创建该逻辑网络。
当定义了所需的PA 网络后,Hyper-V 服务器是需要通过其获取IP的。在该逻辑网络的右键菜单上点击“创建IP 池”项,在向导界面中输入地址池名称(例如“pool1”)。
点击“下一步”按钮,选择“使用现有网络站点”项,在下一步窗口中设置IP的起始和结束的范围。
点击“下一步”按钮,在“默认网关”栏中点击“插入”按钮,输入具体的地址(例如“192.168.2.1”)。
在下一步窗口中的“要附加的DNS 搜索后缀”栏中点击“插入”按钮,输入合适的后缀,例如“xxx.com”。
点击“完成”按钮,创建该地址池。
在左侧选择“网络”→“端口配置文件”向,在其右键菜单上点击“创建Hyper-V端口配置文件”项,在打开窗口中输入其名称(例如“UPLink”),选择“上行端口配置文件”项,点击“下一步”按钮。选择上述名为“PAWz”的站点名称,选择“启用Hyper-V 网络虚拟化”项,点击完成按钮,创建该配置文件。在左侧选择“网络”→“逻辑交换机”项,在其右键菜单上选择“创建逻辑交换机”项,在向导窗口中输入其名称(例如“vswitch”),在“上行模式”列表中选择“团队”项,启用NIC 聚合模式。
点击“下一步”按钮,在虚拟端口窗口中点击“添加”按钮,在打开窗口中点击“浏览”按钮,在列表中选择“高带宽”类别。选择“包括此虚拟端口中的Hyper-V 虚拟网络适配器端口配置文件”项,点击浏览按钮,在列表中选择“高带宽适配器”项。在虚拟端口窗口中选择该端口分类项目,点击“设置默认值”项,将其设置为默认状态。点击“下一步”按钮,点击“添加”→“现有上行端口配置文件”项,选择上述名为“UPLink”的配置文件。其余设置保持默认,点击“完成”按钮,创建该虚拟交换机。
在SCVMM 左侧依次选 择“构 造”→“所有主机”→“Hostgrp”项,在右侧分别选择名为“hvsrv1.xxx.com”和“hvsrv1.xxx.com”的Hyper-V 主机,点击工具栏上的“通过RDP 连接”项,远程登录到该主机上,确保“vSwitch1”和“Vswitch2”等网卡处于启用状态。在上述两台主机的右键菜单上点击“刷新”项,使其处于最新的状态。
分别选择上述Hyper-V主机,在工具栏上单击“属性”,打开窗口左侧选择“虚拟交换机”项,点击“新建虚拟交换机”→“新建逻辑交换机”项,在“适配器”列表中依次点击“添加”,选择上述“vSwitch1”和“Vswitch2”网卡,在“逻辑交换机”列表中选择“vswitch”项,为其分配上述逻辑交换机。点击“确定”,保存配置信息。
当虚拟机连接到上述虚拟交换机时,需要获得CA的地址。在SCVMM 左侧依次选择“VM 和服务”→“VM 网络”项,在工具栏上点击“创建VM网络”按钮,在向导界面中输入其名称(例如“VM01”),在“逻辑网络”列表中选择上述“PAWz”网络,使其和该逻辑网络绑定。点击“下一步”按钮,在VM 子网窗口中点击“添加”按钮,输入子网名称(例如“vnet1”)和子网地址(例如“172.16.0.0/24”),这些网段是可以随意定义的。
点击“完成”按钮,创建该VM 网络。在该VM 网络项目的右键菜单上点击“创建IP 池”项,在向导界面中输入其名称(例如“vmpool”),设置可以分配的IP 范围,输入合适的网关(例如172.16.0.1),以及DNS服务器(这里为DC的地址)和DNS 后缀名(例 如“xxx.com”)。点击完成按钮,创建该地址池。
在SCVMM 中分别选择上述名为“vcomputer1”和“vcomputer2”的虚拟机,在工具栏上点击“属性”按钮,在打开窗口左侧选择“硬件配置”→“网络适配器1”项,在右侧选择“连接到VM 网络”项,可以看到,其可以通过上述逻辑交换机连接到“VM01”的虚拟网络中。在“分类”列表中选择“高带宽”项目。点击确定按钮,保存配置信息。
如果出现更新失败的情况,可以在SCVMM 中选择目标虚拟机机,点击工具栏上的“连接或查看”按钮,可以登录到该主机上,先将其关闭,之后重新启动,再次进行配置即可。
这样,两台虚拟机之间是可以正常通讯的。如果使用WireShark 等专业的抓包工具,就可以发现在两者进行通讯时,实际上是借助了PA的网络来实现的。经过以上操作,就实现虚拟机之间的网络隔离功能。
但是,如果在虚拟机中试图访问Internet的话,是无法进行的。因为虚拟机是借助于PA(即虚拟交换机)进行数据包的封装和发送的,而虚拟交换机此时的状态状态是只能和其他的虚拟交换机交换机进行通讯,并不能和外部的Internet 网络进行通讯。为了解决以上问题,就必须在虚拟化环境中配置网关的角色,将虚拟机和Internet 之间的通讯需求进行重新封装和解封到物理的网络中,实现虚拟机和Internet 之间的正常联系。
对于网络虚拟化网关来说,其最主要的作用是帮助虚拟机连接到物理网络中。如果物理的交换机支持Hyper-V的虚拟网关功能,就可以直接在其中进行配置。也可以准备一台新的Hyper-V 主机,在其中安装一台虚拟机,并安装和配置其路由和远程访问角色,来实现虚拟网络和物理网络之间的地址转换功能。在该Hyper-V 主机上一般需要安装三块物理网卡,一块网卡连接到物理网络,来形成前端网络。一块网卡用于连接网络虚拟化网络,来形成后端网络。另外的一块网卡用于网络管理,用来接受SCVMM的远程管理。
在名为“gw1.xxx.com”的主机上配置三块网卡,名称分别为“Management”,“Production”和“Virtual”。在该机上安装好Hyper-V角色。在SCVMM 中按照上述方法,将该机加入到名为“Hostgrp”的主机组中。按照上述方法,创建名为“wlwl”的逻辑网络,用来连接到物理网络。
注意,仅仅选择“一个连接的网络”项即可。
并输入物理网络中的相应的IP 网段,例如172.16.10.0/24。针对该逻辑网络,为其配置IP 地址池。将其默认网关设置为物理网络中的网关地址,例如172.16.1.254。将DNS 服务器地址设置为物理网络中的DNS 服务器地址,例如172.16.10.179。
选择“网络”→“端口配置文件”项,在右侧双击“UPLink”项,在打开窗口左侧选择“网络配置”项,在右侧选择“Production Network”项。按照上述方法,创建名为“wlswitch”的虚拟交换机,用来连接到物理网络,添加现有的名为“UPLink”的上行端口。按照上述方法,创建名为“wlvm”的VM 网络。双击“gw1.xxx.com”主机,在其属性窗口作则选择“主机访问”项,在右侧选择“此主机是专用网络虚拟化网关,因此不可用于放置需要网络虚拟化的虚拟机”项。
在左侧选择“虚拟交换机”项,在右侧点击“新建虚拟交换机”→“新建逻辑交换机”项,在“逻辑交换机”列表中选择上述“wlswitch”逻辑交换机,在“物理适配器”列表中选择名为“Production”的网卡,用来连接物理网络。点击确定按钮保存配置信息。点击“新建虚拟交换机”→“新建逻辑交换机”项,在“逻辑交换机”列表中选择上述“vswuitch”的逻辑交换机,在“物理适配器”列表中选择名为“Virtual”的网卡,用来连接虚拟化网络。点击确定按钮,保存配置信息。按照上述方法,在“gw1.xxx.com”主机中创建名为“rcomputer”的虚拟机。
注意,需要在其向导界面中选择“配置硬件”项,依次点击“新建”→“网络适配器”项,分别创建两块虚拟网卡。
远程登录到该虚拟机中,将其名称修改为“rcomputer”,即使其和SCVMM 中的名称保持一致。在该虚拟机中打开服务管理器,选择“添加角色和功能”项,在向导界面中选择“远程访问”项,点击“下一步”按钮,选 择“DirectAccess 和VPN”和“路由”项,点击“安装”按钮,安装该角色。安装完毕后,关闭该虚拟机。
在SCVMM 中双击该虚拟机,在其属性窗口左侧选择“硬件配置”→“网络适配器1”项,在右侧选择“连接到VM 网络”项,点击“浏览”按钮,选择上述“wlvm”的VM网络,用来连接道物理网络。在其窗口左侧选择“硬件配置”→“网络适配器2”项,在右侧选择“连接到VM网络”项,点击“浏览”按钮,选择上述“VM01”的VM 网络,用来连接到虚拟网络。
注意,需要点击“清除选定内容”按钮,清除选定的内容。
之后选择“标准交换机”项,在列表中选择名为“vswitch”的虚拟交换机。之后重启该虚拟交换机,在SCVMM 左侧依次选择“构造”→“网络”→“网络服务”项,在其右键菜单上选择“添加网络服务”项,在向导界面中输入其名称(例如“ycfw”),点击“下一步”按钮,在“型号”列表中选择“Microsoft Windows Serevr Gataway”项。点击“下一步”按钮,点击“浏览”按钮,选择合适的运行账户,其实际上是该虚拟机中本地管理员的账户,例如“rcomputer/administrator”。可以预先创建的普通的域账户,该账户可以在虚拟机中配置路由和远程访问功能。
点击下一步按钮,输入连接字符串,例如“VMHOST=gw1.xxx.com;GatewayVM=rcomputer”。在下一步窗口中点击“扫描提供程序”按钮,来检测当前的配置是否正确。点击“下一步”按钮,选择合适的主机组,表示该网关应用于该组中的所有虚拟机。点击“下一步”按钮,选择“启用前端连接”和“启用后端连接”项,分别选择对应的网卡,来连接物理网络和虚拟网络。点击“完成”按钮,创建该网络服务。
在SCVMM 左侧依次选择“VM 和服务”→“VM 网络”项,在右侧选择上述“VM01”的虚拟网络,在其属性窗口左侧选择“连接性”项,在右侧选择“直接连接到其他逻辑网络”和“网络地址转换”项,在“网关设备”列表中选择“rcomputer”虚拟机,来利用虚拟化网关实现地址转换操作。点击“确定”,就完成后了虚拟化网关角色的配置。
进入上述虚拟机(例如“vcomputer1”),就可以顺利访问Internet 了。经过以上操作,不仅实现网络隔离功能,让每一台虚拟机或者租户拥有自己可以定义的网络,还可以让其正常访问到物理网络。