Windows Server 2012R2超级虚拟化之十一软件定义网络之网络虚拟化 随着虚拟化数据中心的成功使用,IT组织和托管提供商(提供主机代管或物理服务器出租的提供商)已经开始提供灵活的虚拟基础结构,从而可以轻松地根据客户需要向其提供服务器实例。这种新的服务

Windows Server 2012&R2超级虚拟化之十一软件定义网络之网络虚拟化
随着虚拟化数据中心的成功使用,IT组织和托管提供商(提供主机代管或物理服务器出租的提供商)已经开始提供灵活的虚拟基础结构,从而可以轻松地根据客户需要向其提供服务器实例。这种新的服务类别称为“基础结构即服务 (IaaS)”。Windows Server 2012 提供让公司客户建立私有云所需的所有平台能力,并且能作为一种服务操作模式实现向 IT的转变。WindowsServer 2012也能让主机建立公共云,以及为客户提供 IaaS解决方案。当结合系统中心来管理 Hyper-V网络虚拟化策略时,微软可提供强大的云解决方案。Windows Server 2012 Hyper-V网络虚拟化可提供基于策略以及由软件控制的网络虚拟化,能减少企业在扩大专用 IaaS云时面临的管理开销,以及能为云主机管理虚拟机提供更多的灵活性和扩展性,以实现更高的资源利用率。包含来自不同组织部门(专用云)或不同客户(托管云)的多个虚拟机的 IaaS方案需要安全隔离。当前虚拟局域网 (VLAN)的解决方案在这种情况下呈现明显的劣势。
VLAN是大多数组织用于支持地址空间重复使用以及租户隔离的机制。VLAN在以太网框架报头中使用显式标记 (VLAN ID),它依靠以太网交换机来强制实施隔离并限制有同一 VLAN ID 的网络节点的流量。
VLAN的主要劣势如下:

无论何时将虚拟机或隔离边界移动到动态数据中心,由于生产交换机的重新配置比较复杂,因此会加大意外中断的风险。

由于标准交换机支持的 VLAN ID不会超过 1000个(最大数量为 4094),因此扩展性会受到限制。

受限于一个 IP子网内,从而会限制单个 VLAN内的节点数量并且会基于物理位置限制多个虚拟机的放置。即使 VLAN可以在多个网络间扩展,整个 VLAN也必须全部位于同一子网上。

IP地址分配问题

在数据中心网络基础结构中的物理位置决定了虚拟机的 IP地址。因此,移至云中通常需要给服务工作负荷重新编号(改变 IP地址)。

策略是与 IP地址绑定的,如防火墙规则、资源发现以及目录服务等等。改变 IP地址则需要更新所有相关的策略。

虚拟机部署以及流量隔离都依赖于拓扑。

当数据中心网络管理员计划数据中心的物理布局时,他们必须决定子网的物理位置和路由。这些决定是基于 IP和以太网技术的,这一技术会影响这些 IP地址:允许用于在连接到数据中心特定机架上的特定服务器或服务器刀片上运行的虚拟机。在数据中心中配置并放置虚拟机时,该虚拟机必须遵守有关 IP地址的这些选择和限制。因此,结果通常是数据中心管理员会给虚拟机分配新的 IP地址。这种需求的问题在于,除了作为一个地址外,一个 IP地址还有相关联的语义信息。例如,一个子网可能包含给定服务或者位于不同的物理位置。防火墙规则、访问控制策略以及 IPsec安全关联性通常会与 IP地址相关联。改变 IP地址会迫使虚拟机拥有者去调整所有基于原有 IP地址的策略。由于此重新编号操作开销非常高,因此很多企业仅将新的服务部署到其云,保留旧的应用程序不动。Hyper-V网络虚拟化将客户虚拟机的虚拟网络与物理网络基础结构脱耦。因此,它能让客户虚拟机维持原有的 IP地址,同时能让数据中心管理员将客户虚拟机布置在数据中心的任何地方,而不用重新配置物理 IP地址或者 VLAN ID。

Hyper-V网络虚拟化概念

在 Hyper-V网络虚拟化中,客户被定义为一组部署在数据中心的虚拟机的“拥有者”。客户可以是多租户公共数据中心中的一家公司或私有数据中心中的一个部门或业务单位。每位客户可以在该数据中心有一个或者多个客户网络,每个客户网络由多个带有虚拟子网的网络组成。

客户网络:每个客户网络包包含一个或多个虚拟子网。一个客户网络组成一个独立边界,在一个客户网络中的虚拟机可相互交流。因此,在同一个客户网络中的虚拟子网必须不能使用重叠的 IP 地址前缀。每个客户网络有一个识别客户网络的路由域。识别客户网络的路由域 ID (RDID),由数据中心管理员或者数据中心管理软件(如 System Center Virtual Machine Manager (VMM))分配。RDID具有 GUID格式 — 如“{11111111-2222-3333-4444-000000000000}”。

虚拟子网(VirtualSubnets):虚拟子网是有点像的VLAN,但VirtualSubnet的ID比VLAN更多(相比VLAN的4095上限,VSID自编号4096至16,777,215,)。一个虚拟机的网卡在任何时候只能有一个Virtual Subnet ID(VSID),VSID可以跨数据中心使用,因此每个客户/租户必须用自己独特的VSID。VSID只能通过PowerShell的或WMI设置。虚拟子网为同一个虚拟子网中的虚拟机实行第三层 IP 子网语义。虚拟子网是一个广播域(与 VLAN相类似)。尽管一个虚拟子网能同时兼容一个 IPv4和一个 IPv6前缀,在同一个虚拟子网中的虚拟机必须使用相同的 IP前缀。每个虚拟子网都属于一个客户网络 (RDID),并分配有唯一的虚拟子网 ID (VSID)。

客户网络和路由域的主要优点是能让客户将网络拓扑带到云中。在下图的示例中,蓝方公司有两个不同的网络:研发网络和销售网络。由于这些网络有不同的路由域ID,因此彼此之间不能进行交互。即是,蓝色研发网络与蓝色销售网络相互独立,尽管它们都属于蓝方公司。蓝色研发网络包含三个虚拟子网。注意:一个数据中心内的 RDID 和 VSID都是唯一的。

WindowsServer2012&R2超级虚拟化之十一软件定义网络之网-LMLPHP

在图中,VSID为 5001的虚拟机能通过 Hyper-V网络虚拟化将其数据包路由或转发到 VSID为5002或 5003的虚拟机中。在将数据包送往 Hyper-V交换机之前,Hyper-V网络虚拟化将把进入的数据包的 VSID更新为目标虚拟机的 VSID。这只有在两个 VSID 都属于一个 RDID的情况下才能实现。如果数据包上的 VSID与目标虚拟机的 VSID不匹配,数据包会被丢弃。因此,带有 RDID1的虚拟网络适配器不能将数据包发送到带有 RDID2的虚拟网络适配器。通常一台虚拟机只有一个虚拟网络适配器。在这种情况下,虚拟机和虚拟网络适配器具有相同的含义。由于一台虚拟机可以有多台虚拟网络适配器,这些虚拟网络适配器可以有不同的虚拟子网 ID (VSID) 和唯一的路由域 ID (RDID),Hyper-V网络虚拟特别侧重虚拟网络适配器之间发送和接收的数据包。

每个虚拟子网定义一个第三层 IP子网以及一个类似于 VLAN的第二层 (L2)广播域边界。当虚拟机广播数据包时,广播只限于与 VSID相同的交换机端口相连接的虚拟机。每个 VSID可与 PA的多播地址相关联。VSID的所有广播流量均通过此多播地址进行发送。Hyper-V网络虚拟化不依赖广播或多播。这些是选择性功能,需要 Hyper-V 网络虚拟策略中的数据中心管理员进行明确配置。默认情况下,不允许虚拟机多播和广播。本地主机自动支持 ARP这个广播协议,并且 ARP不会广播到其他物理主机上。

除作为一个广播域外,VSID也能提供隔离。Hyper-V网络虚拟化的一个虚拟网络适配器与具有一个 VSID ACL的 Hyper-V交换机端口相连接。如果数据包到达这个具有不同 VSID的 Hyper-V交换机端口,该数据包会被丢弃。只有数据包的 VSID与交换机端口的 VSID相匹配,数据包才能被送到 Hyper-V交换机端口。如果 Hyper-V交换机端口没有 VSID ACL,那么附加在该交换机的虚拟网络适配器就不在 Hyper-V 网络虚拟化虚拟子网之内。从虚拟网络适配器发出的数据包如果没有VSID ACL,就会通过 Hyper-V网络虚拟化而不会发生更改。虚拟机发送数据包时,Hyper-V交换机端口的 VSID与这个在带外 (OOB)数据中的数据包相关联。封装数据包的 GRE密钥字段中包含 VSID。在接收端,Hyper-V网络虚拟化将 OOB中的 VSID以及解封的数据包发送到 Hyper-V交换机。在接收端,Hyper-V网络虚拟化执行策略寻找,并在数据包送达 Hyper-V交换机之前,将 VSID添加到 OOB数据中。Hyper-V交换机扩展在客户地址(CA)空间中运作。但是,VSID适用于交换机扩展。这可使交换机扩展能感知多租户。例如,防火墙交换机扩展可将带有 VSID为 5001的 OOB的 CA IP地址 10.1.1.5和 VSID为 6001的相同 CA IP地址区分开来

Windows Server 2012中 Hyper-V 网络虚拟化的重要功能、优势和能力:

可实现灵活的工作负荷放置 – 无需 VLAN的网络隔离以及 IP地址的重新使用。

Hyper-V 网络虚拟化可将客户虚拟网络与主机物理网络基础结构脱耦,因此提供数据中心内的自由的工作负荷放置。虚拟机工作负荷放置不再受限于 IP地址分配或者物理网络的 VLAN隔离要求,因为其是在 Hyper-V主机内基于软件定义的多租户虚拟策略上执行。

拥有重叠 IP地址的不同客户的虚拟机现在可以部署在同一台主机服务器上,而不需繁琐的 VLAN配置或者违反 IP地址的层次结构。这样可以简化客户工作负荷向共享 IaaS托管提供商的移动,允许客户在不用更改的条件下移动这些工作负荷,如不用更改虚拟机 IP地址。对于托管提供商而言,支持大量想要将现有网络地址空间延伸到共享 IaaS数据中心的客户是一项为每个客户配置和维持独立 VLAN的复杂操作,以便确保可能重叠的地址空间的共存。Hyper-V网络虚拟化可使支持重叠地址更加简单,并可减少托管提供商进行网络重新配置的需要。

除此之外,也能在不造成客户工作负荷停滞的基础上,进行物理基础结构的维持和升级。使用 Hyper-V网络虚拟化,特定主机、机架、子网、VLAN或者整个集群上的虚拟机可以进行移动,而不需重新编号或者进行大型的重新配置。

能更简单地将工作负荷移动到共享的 IaaS云中。

使用 Hyper-V网络虚拟化,IP地址和虚拟机配置可保持不变。这可使 IT组织更简单地将工作负荷从其数据中心移至共享的 IaaS托管提供商,而只需最少的工作负荷或者其基础结构工具以及策略的重新配置。在两个数据中心相连的情况下,IT管理员可继续使用其工具而不用对其进行重新配置。

可实现跨子网实时迁移

传统的虚拟机工作负荷实时迁移一直仅限于同一 IP子网或 VLAN中,因为跨子网需要虚拟机的客户操作系统更改 IP地址。地址更改会中断现有通信,干扰在虚拟机运行的服务。使用 Hyper-V网络虚拟化,工作负荷可从一个子网中运行着 Windows Server 2012的服务器实时迁移到不同子网中运行着 Windows Server 2012的服务器中,而不用改变工作负荷的 IP地址。Hyper-V网络虚拟化可保证因实时迁移而带来的虚拟机位置变化在与被转移的虚拟机有持续通信的主机中得到更新并且同步。

能更简单地管理脱耦的服务器以及网络管理

服务器工作负荷安排得到简化,原因是工作负荷的迁移和安排独立于底层物理网络配置。服务器管理员可以侧重于管理服务和服务器,网络管理员则可以侧重于整体网络基础结构和流量管理。这能让数据中心服务器管理员在不用对虚拟机重新编号的基础上对虚拟机进行部署和迁移。能减少开销,因为 Hyper-V网络虚拟化能让虚拟机放置与网络拓扑独立进行,减少网络管理员参与到可能改变隔离边界的放置过程的需要。

简化网络,提高服务器或者网络资源的利用率

VLAN 的僵化以及虚拟机放置对物理网络基础结构的依赖会导致过度配置以及利用不足。通过打破这种依存关系,虚拟机工作负荷安排灵活性的提高可以简化网络管理并提高服务器和网络资源利用率。注意:Hyper-V网络虚拟化支持物理数据中心背景下的 VLAN。例如,某一数据中心可能想要所有 Hyper-V网络虚拟化流量在一个特定的 VLAN内进行。

与现有基础结构和新兴技术兼容

Hyper-V 网络虚拟化可部署在当前的数据中心中,但也与新兴的数据中心“扁平网络”技术兼容。

为互操作性以及生态体系准备创造基础

Hyper-V 网络虚拟化支持与现有资源进行通信的多个配置,如跨组织连接、存储区域网 (SAN)以及非虚拟化资源访问等。微软致力于与生态体系合作伙伴一道共同在性能、扩展性以及管理性方面支持和改进 Hyper-V网络虚拟化。

使用 Windows PowerShell以及 WMI

Hyper-V 网络虚拟化支持 Windows PowerShell以及 Windows ManagementInstrumentation (WMI)对网络虚拟化和隔离策略进行配置。Hyper-V网络虚拟化的 Windows PowerShell cmdlet能让管理员建立命令行工具或者自动化的脚本来为网络隔离策略进行配置、监控以及故障排除。

网络虚拟化的实现方式:

在 Hyper-V网络虚拟化中的每个虚拟网络适配器都与两个 IP地址相关:

客户地址 (CA)由客户基于其内部网络基础结构所指定的 IP 地址。通过这一地址,客户可与虚拟机交流网络流量,如同未移到一个公有或私有云中一般。CA对虚拟机是可见的,并且可由客户访问。

提供商地址(PA)由主机或数据中心管理员基于其物理网络基础结构所指定的 IP地址。PA出现在网络上的数据包中,这些数据包可与托管虚拟机的 Hyper-V服务器进行交换。PA在物理网络上是可见的,但在虚拟机上不可见。Hyper-v网络虚拟化机制旨在将虚拟机使用的网络地址虚拟化,也就是微软网络虚拟化重点所在。

将每台虚拟机的 CA映射到物理主机的 PA。

根据映射,将虚拟机在 CA空间中发送的数据包放置在一个含有 PA源和目标对的“封套”中。

CA-PA 映射必须允许主机为不同的客户虚拟机区分数据包。

Hyper-V网络虚拟化策略实施以及 IP虚拟化都由名为 Windows网络虚拟化 (WNV)的网络驱动程序接口规格 (NDIS)轻型筛选器 (LWF)执行。在下图中,WNV筛选器位于 Hyper-V交换机之下。

WindowsServer2012&R2超级虚拟化之十一软件定义网络之网-LMLPHP

每台虚拟机网络适配器都配有一个 IPv4和/或一个 IPv6 地址。这些是虚拟机用来相互交流的 CA,并置于虚拟机的 IP 包中。基于网络虚拟化策略,Hyper-V网络虚拟化将 CA虚拟化成 PA。

虚拟机发出一个源地址为 CA1的数据包,该数据包已基于 Hyper-V交换机下面的 WNV筛选器策略予以虚拟化。对 Hyper-V 交换机以及任何 Hyper-V交换机可见的 IP地址是 CA地址,而不是 PA地址。基于 VSID的特殊网络虚拟化访问控制列表能将虚拟机从其他不属于同一虚拟子网或同一路由域的虚拟机独立出来。

微软包含两个地址转换机制实现网络虚拟化,即包重写IP-Rewrite(NAT)和数据包封装(GRE基本路由封装)。

A、包重写IP-Rewrite(NAT)这种方法是不推荐使用的,当数据包离开主机时,使用IP-Rewrite技术,将源和目标的CA IP地址重写成适当的PA地址,同样,当虚拟子网的数据包进入目的主机,PA被重写成适当的CA。IP-Rewrite技术要求每台虚拟机的CA对应一个唯一的PA,以便隔离从不同客户的虚拟机使用重叠的IP地。 IP重写是NAT技术,因此它需要一个单PA的IP为每个虚拟机的CA。这将要求一个大的PA池和一个同样大的查找表。并且需要网络基础设施去学习大量的IP和MAC地址,其结果是巨大的。

B、GRE基本路由封装 是主要IP虚拟化的机制,此网络虚拟化机制将基本路由封装 (NVGRE) 用作通道报头的一部分。虚拟机的数据包是通过使用CA的IP地址在另一个封装使用PA的IP地址,随着VSID和虚拟机的发送复制分组接口的MAC地址。这种地址虚拟化机制的模式是专为大多数部署 Hyper-V 网络虚拟化的数据中心而设计的。在 NVGRE中,虚拟机的数据包被封装在另一个数据包中。如图所示,新的数据包报头含有合适的源和目标 PA IP地址,另外还有存储在 GRE报头密钥字段中的虚拟子网 ID。

WindowsServer2012&R2超级虚拟化之十一软件定义网络之网-LMLPHP

包含在 GRE报头中的虚拟子网 ID可让主机为任何指定的数据包确定客户虚拟机,尽管数据包上的 PA和 CA出现重叠。这可让同一台主机上的所有虚拟机分享一个 PA(如图 3 所示)。共享 PA对网络可扩展性产生很大的影响。网络基础设施必须知悉的 IP和 MAC地址数量得以大幅减少。例如,如果每台终端主机平均有 30台虚拟机,网络基础设施需要知悉的 IP和 MAC地址数量将减少到三十分之一,数据包中嵌入式虚拟子网 ID还能轻易地将数据包与实际客户联系起来。使用 Windows Server 2012,Hyper-V网络虚拟化完全支持即开即用的 NVGRE;不需要升级或购买新的网络硬件,如 NIC(网络适配器)、交换机或路由器。因为在线 NVGRE包是 PA空间中的常规 IP包,可与当前的网络基础结构相兼容。Windows Server 2012优先考虑运作标准。在与主要的产业合作伙伴(Arista、BroadcomArista、Dell、Emulex、Hewlett Packard 和 Intel)的共同努力下,Microsoft发行了一份介绍基本路由封装 (GRE) 使用情况的 RFC草案,它是现有的 IETF标准并且是网络虚拟化封装协议的一部分。

Hyper-V网络虚拟化的适用环境:

1、多租户部署,通过NVGRE虚拟化映射以及转化将虚拟网络构架从物理网络基础结构中脱离出来,这意味着通过 Hyper-V 网络虚拟化,可以进行跨子网虚拟机配置和动态迁移

2、Hyper-V网络虚拟化网关:大多数客户部署将需要 Hyper-V 网络虚拟化环境与不属于 Hyper-V网络虚拟化环境的资源进行交流。这就需要网络虚拟化网关来实现两种环境之间的交流。需要Hyper-V 网络虚拟化网关的方案包括私有云以及混合云。一般而言,VPN和路由都需要 Hyper-V网络虚拟化网关。网关可以有不同的实体构成元素。网关可基于 Windows Server 2012而建,可整合至顶架 (TOR)交换机、负载平衡器中,或放入到另一个现有的网络设备中,或构成一个新的独立网络设备。

3、私有云(路由):大型公司可能不愿意,或者出于合规原因不能将其一些服务和数据转移到一个公有云主机中。但是,公司仍然想要通过将数据中心资源整合到一个私有云中,来享受由 Hyper-V 网络虚拟化提供的云所带来的好处。在私有云部署中,可能不需要重叠的 IP地址,因为公司一般有足够的不可路由的内部地址(如 10.x.x.x或 192.x.x.x)空间。在这种情况下,Hyper-V网络虚拟化网关提供 公司网络 和 公有云之间的路由。

4、混合云(站到站 VPN):Hyper-V网络虚拟化的主要优点是,能将本地数据中心无缝地延伸到基于 Windows Server 2012的云数据中心。这就是混合云模式,在这种情况下,内部子网(如含有 web、ad、dns服务器的子网),将从公司网络转移到云主机的数据中心。利用由主机提供的“带上自己的 IP 地址”,公司无需改变 Web服务器虚拟机或者任何其他引用该 Web服务器的网络端点的网络配置。主机通过 Hyper-V网络虚拟化网关设备提供一个安全的链接。公司管理员只需配置带有合适 IP地址的本地 VPN。Web服务器虚拟机不会察觉其已经被移至云中。它仍然保持域与活动目录 (AD)相结合的状态,并且使用公司的 DNS服务器。 Web服务器虚拟机还继续与公司其他的服务器(如 SQL Server)进行交互。这三种服务(AD、DNS、SQL)仍然在本地。网络诊断工具(如计算网络跃点数目的路径跟踪程序),表明 Web 服务器虚拟机与 SQL之间的网络流量不再是在本地而是在整个 Internet上进行路由。Hyper-V网络虚拟化网关可支持多个站对站 (S2S) VPN隧道,注意SCVMM是 Hyper-V 网络虚拟化部署所必需的。

实验一:网络虚拟化之虚拟子网(Virtaul Subnet),单一主机

准备一台Windows Server 2012 R2的物理主机,并且安装Hyper-v角色。

在主机上创建四台虚拟机分别为Blue1,Blue2,Red1,Red2,并且网络都连接到外部的虚拟交换机vswitch上。注意它们的MAC是不一样.

设置Blue1的IP为10.10.10.10/24,Blue2的IP为10.10.10.20/24

设置Red1的IP为10.10.10.10/24,Red2的IP为10.10.10.20/24

每台虚拟机的防火墙先关闭,以免影响测试

查看虚拟环境网络设置,并测试虚拟机之间的联通性。因为每个客户的虚拟机都使用相同的IP地址范围,我们会得到Red与Blue租户的IP地址冲突,此时Red租户无法使用。

#查看各虚拟机的网络设置

Get-VMNetworkAdapter* |Format-table

VMName,SwitchName,VirtualSubnetID,MACAddress,IPAddresses,status–autosize

使用虚拟子网(Virtual Subnet)隔离多租户环境下的IP重叠问题,设置Blue1与Blue2在5010虚拟子网,Red1与Red2在5020虚拟子网

Get-VMNetworkAdapter Blue* | Set-VMNetworkAdapter-VirtualSubnetId 5010

Get-VMNetworkAdapter Red* | Set-VMNetworkAdapter-VirtualSubnetId 5020

Get-VMNetworkAdapter* |Format-table

VMName,SwitchName,VirtualSubnetID,MACAddress,IPAddresses,status–autosize

重新连接Red和Blue租户的虚拟机网络,使配置生效.此时IP冲突没有了

Disconnect-VMNetworkAdapter –VMName Red*,blue*

Connect-VMNetworkAdapter –VMName Red*,blue* –SwitchName “vswitch”

Get-VMNetworkAdapter* |Format-table

VMName,SwitchName,VirtualSubnetID,MACAddress,IPAddresses,status-autosize

查看现有网络的联通性,达到租户隔离的目的。

Blue1与Blue2互通

Red1与Red2互通

9、删除配置,还原环境

Get-VMNetworkAdapter Blue* | Set-VMNetworkAdapter-VirtualSubnetId 0

Get-VMNetworkAdapter Red* | Set-VMNetworkAdapter-VirtualSubnetId 0

Disconnect-VMNetworkAdapter–VMNameRed*,blue*

Connect-VMNetworkAdapter –VMNameRed*,blue* -SwitchName vswitch

注意:此时我们只局限在一台主机上实现隔离与连通,但是如果跨主机跨网络还有迁移之后就不能连通了。请看下一实验

实验二:网络虚拟化之IP-Rewrite (两台主机)

注意此实验在Windows server 2012 R2中无法实现,因为已经移除IP-Rewrite这个功能,在R2中只使用NVGRE封装。此实验演示

1、准备一台windows server 2012 的物理主机名为host1,host1主机有两个PA IP 214.214.51.42/14.214.51.43 在host1上有两1台虚拟机分别为blue1和red1,IP地址都是10.10.10.11,两台虚拟机都链接到桥接外部网络的同一个虚拟交换机上.。为了方便测试虚拟机的防火墙都关闭了

2、准备另外一台windows server 2012 的物理主机名为host2,Host2有两个PA IP 214.214.51.44/214.214.51.45。在host2上有两台虚拟机分别为blue2和red2,IP地址都是10.10.10.12,两台虚拟机都链接到桥接外部网络的同一个虚拟交换机上。为了方便测试虚拟机的防火墙都关闭了

3、在Host1上为blue1和red1虚拟机的虚拟交换机所绑定的物理网卡上启用网络虚拟化功。

#清除之前宿主机的所有网络适配器启用了的网络虚拟化功能和虚拟机所属于的虚拟子网

Disable-NetAdapterBinding* -ComponentID "ms_netwnv"

Set-VMNetworkAdapter-VMName * -VirtualSubnetId "0"

#针对blue1,red1虚拟机的虚拟交换机所绑定的物理网卡启用网络虚拟化功能

$switch1=Get-VMNetworkAdapterblue*,red*| Select-Object @{Name="Name";Expression={$_.SwitchName}}-Unique

$NIC=Get-VMSwitch-Name$switch1.Name| Select-Object @{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

Enable-NetAdapterBinding-Name$NIC.Name-ComponentID"ms_netwnv"

4、在Host2上为blue2和red2虚拟机的虚拟交换机所绑定的物理网卡上启用虚拟化功能。

#清除之前宿主机的所有网络适配器启用了的网络虚拟化功能和虚拟机所属于的虚拟子网

Disable-NetAdapterBinding* -ComponentID "ms_netwnv"

Set-VMNetworkAdapter-VMName * -VirtualSubnetId "0"

#针对blue1,red1虚拟机的虚拟交换机所绑定的物理网卡启用网络虚拟化功能

$switch1=Get-VMNetworkAdapterblue*,red*| Select-Object @{Name="Name";Expression={$_.SwitchName}}-Unique

$NIC=Get-VMSwitch-Name$switch1.Name| Select-Object @{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

Enable-NetAdapterBinding-Name$NIC.Name-ComponentID"ms_netwnv"

5、在Host1上查看blue1和red1虚拟机的虚拟网络适配器的MAC地址并记录下来

Get-VMNetworkAdapterblue*,red*| Select VMName,MacAddress,IPAddresses,VirtualSubnetID,SwitchName,Status| Format-Table–AutoSize

6、在Host2上查看blue2和red2虚拟机的虚拟网络适配器的MAC地址并记录下来

Get-VMNetworkAdapterblue*,red*| Select VMName,MacAddress,IPAddresses,VirtualSubnetID,SwitchName,Status| Format-Table–AutoSize

7、在Host1和Host2宿主机上建立基于NAT规则的IP-Rewrite虚拟化查找表

New-NetVirtualizationLookupRecord -CustomerAddress"10.10.10.11" -MACAddress "000000000011" -ProviderAddress"214.214.51.42" -Rule TranslationMethodNat -VirtualSubnetID"5010" -VMName blue1

New-NetVirtualizationLookupRecord -CustomerAddress"10.10.10.11" -MACAddress "000000000021" -ProviderAddress"214.214.51.43" -Rule TranslationMethodNat -VirtualSubnetID"5011" -VMName red1

New-NetVirtualizationLookupRecord -CustomerAddress"10.10.10.12" -MACAddress "000000000012" -ProviderAddress"214.214.51.44" -Rule TranslationMethodNat -VirtualSubnetID"5010" -VMName blue2

New-NetVirtualizationLookupRecord -CustomerAddress"10.10.10.12" -MACAddress "000000000022" -ProviderAddress"214.214.51.45" -Rule TranslationMethodNat -VirtualSubnetID"5011" -VMName red2

8、在Host1上为使用网络虚拟化功能的blue1和red1虚拟机的虚拟网络适配器设置相应虚拟网络ID

Set-VMNetworkAdapter -VMName blue1-VirtualSubnetId "5010"

Set-VMNetworkAdapter -VMName red1 -VirtualSubnetId "5011"

9、在Host2上为使用网络虚拟化功能的blue2和red2虚拟机的虚拟网络适配器设置相应虚拟网络ID

Set-VMNetworkAdapter-VMName blue2 -VirtualSubnetId "5010"

Set-VMNetworkAdapter-VMName red2 -VirtualSubnetId"5011"

10、在host1上针对用来创建Red1和Blue1所使用的虚拟机交换机的物理网卡设置相应的PA地址

$switch2=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$index=Get-VMSwitch -Name $switch2.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.42" -PrefixLength 24

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.43" -PrefixLength 24

11、在host2上针对用来创建Red2和Blue2所使用的虚拟机交换机的物理网卡设置相应的PA地址

$switch2=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$index=Get-VMSwitch -Name $switch2.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.44" -PrefixLength 24

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.45" -PrefixLength 24

12、在Host1和Host2上执行下面命令重新连接Red和Blue租户的虚拟机网络,使配置生效.

Disconnect-VMNetworkAdapter –VMName Red*,blue*

Connect-VMNetworkAdapter –VMName Red*,blue* –SwitchName “vswitch”

13、在Host1和Host2使用下面命令查询所有的配置。

Get-NetVirtualizationLookupRecord| Format-Table VirtualSubnetID ,CustomerAddress,Provideraddress -AutoSize

Get-NetVirtualizationProviderAddress|Format-TableInterfaceIndex,Provideraddress,PrefixLength,VlanID -AutoSize

Get-VMNetworkAdapter* | Format-tableVMName,SwitchName,VirtualSubnetID,MACAddress,IPAddresses,status –autosize

14、测试虚拟机的连通性,还有在两台主机之间在线迁移虚拟机时网络连通性。

15、测试完成后在所有宿主机上还原配置

Set-VMNetworkAdapter -VMName * -VirtualSubnetId 0

Disable-NetAdapterBinding* -ComponentID "ms_netwnv"

Get-NetVirtualizationLookupRecord| Format-Table VirtualSubnetID ,CustomerAddress,Provideraddress -AutoSize

Get-NetVirtualizationProviderAddress|Format-TableInterfaceIndex,Provideraddress,PrefixLength,VlanID -AutoSize

Get-VMNetworkAdapter* | Format-tableVMName,SwitchName,VirtualSubnetID,MACAddress,IPAddresses,status –autosize

注意:此时我们已经可以跨网络连通和迁移虚拟机,并达到隔离效果。但是我们此时浪费了很多的PA地址,因为IPRewrite设置一个NAT规则。这就要求每个CA一个PA。因此,每个虚拟机具有一个IP地址(CA)和一个相应的PA,这就像在一个路由器里没有端口重定向而是直接IP转换。请看下一节实验。

实验三:网络虚拟化之NVGRE封装(对比IP-Rewrite,推荐使用)

1、准备一台windows server 2012 R2的物理主机名为host1, host1主机有一个PA IP 214.214.51.42 在host1上有两台虚拟机分别为blue1和red1,IP地址都是10.10.10.11,两台虚拟机都链接到桥接外部网络的同一个虚拟交换机上.为了方便测试虚拟机的防火墙都关闭了

2、准备另外一台windows server 2012 R2的物理主机名为host2,Host2有一个PA IP 214.214.51.43在host2上有两台虚拟机分别为blue2和red2,IP地址都是10.10.10.12,两台虚拟机都链接到桥接外部网络的同一个虚拟交换机上。为了方便测试虚拟机的防火墙都关闭了

3、在Host1上为blue1和red1使用的虚拟交换机所绑定的物理网卡上启用网络虚拟化功能.此步骤在 Windows server 2012 R2不用做,因为网络虚拟化功能集成在虚拟交换机上默认开启。只针对windowsserver 2012需要执行以下动作:

#清除之前宿主机的所有网络适配器启用了的网络虚拟化功能和虚拟机所属于的虚拟子网

Disable-NetAdapterBinding* -ComponentID "ms_netwnv"

Set-VMNetworkAdapter-VMName * -VirtualSubnetId "0"

#针对blue1,red1虚拟机的虚拟交换机所绑定的物理网卡启用网络虚拟化功能

$switch1=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$NIC=Get-VMSwitch -Name $switch1.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

Enable-NetAdapterBinding -Name $NIC.Name -ComponentID"ms_netwnv"

4、在Host2上为blue2和red2虚拟机的虚拟交换机所绑定的物理网卡上启用虚拟化功能。此步骤在 Windows server 2012 R2不用做,因为网络虚拟化功能集成在虚拟交换机上默认开启。只针对windowsserver 2012需要执行以下动作

#清除之前宿主机的所有网络适配器启用了的网络虚拟化功能和虚拟机所属于的虚拟子网

Disable-NetAdapterBinding* -ComponentID "ms_netwnv"

Set-VMNetworkAdapter-VMName * -VirtualSubnetId "0"

#针对blue2,red2虚拟机的虚拟交换机所绑定的物理网卡启用网络虚拟化功能

$switch1=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$NIC=Get-VMSwitch -Name $switch1.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

Enable-NetAdapterBinding -Name $NIC.Name -ComponentID"ms_netwnv"

5、在Host1上查看blue1和red1虚拟机的虚拟网络适配器的MAC地址并记录下来

Get-VMNetworkAdapter blue*,red* | SelectVMName,MacAddress,IPAddresses,VirtualSubnetID,SwitchName,Status | Format-Table–AutoSize

6、在Host2上查看blue2和red2虚拟机的虚拟网络适配器的MAC地址,并记录下来

Get-VMNetworkAdapter blue*,red* | SelectVMName,MacAddress,IPAddresses,VirtualSubnetID,SwitchName,Status | Format-Table–AutoSize

7、在Host1和Host2宿主机上建立相应的网络虚拟化查找记录和虚拟机之间建立路由信息

New-NetVirtualizationLookupRecord-VirtualSubnetID"5010"-CustomerAddress"10.10.10.11" -MACAddress "000000000011"-ProviderAddress"214.214.51.42" -Rule TranslationMethodEncap

New-NetVirtualizationLookupRecord-VirtualSubnetID"5011"-CustomerAddress"10.10.10.11" -MACAddress "000000000021"-ProviderAddress"214.214.51.42"-Rule TranslationMethodEncap

New-NetVirtualizationLookupRecord-VirtualSubnetID"5010"-CustomerAddress"10.10.10.12" -MACAddress "000000000012"-ProviderAddress"214.214.51.43" -Rule TranslationMethodEncap

New-NetVirtualizationLookupRecord-VirtualSubnetID"5011"-CustomerAddress"10.10.10.12" -MACAddress "000000000022"-ProviderAddress"214.214.51.43"-Rule TranslationMethodEncap

New-NetVirtualizationCustomerRoute-RoutingDomainID "{11111111-2222-3333-4444-000000005010}" -VirtualSubnetID"5010" -DestinationPrefix"10.10.10.0/24"-NextHop "0.0.0.0"-Metric255

New-NetVirtualizationCustomerRoute-RoutingDomainID "{11111111-2222-3333-4444-000000005011}" -VirtualSubnetID"5011" -DestinationPrefix"10.10.10.0/24"-NextHop "0.0.0.0"-Metric255

8、在Host1上为使用网络虚拟化功能的Red1和Blue1虚拟机的虚拟网络适配器设置相应虚拟网络ID

Set-VMNetworkAdapter -VMName blue1-VirtualSubnetId "5010"

Set-VMNetworkAdapter -VMName red1 -VirtualSubnetId"5011"

9、在Host2上为使用网络虚拟化功能的Red2和Blue2虚拟机的虚拟网络适配器设置相应虚拟网络ID

Set-VMNetworkAdapter-VMName blue2 -VirtualSubnetId "5010"

Set-VMNetworkAdapter-VMName red2 -VirtualSubnetId "5011"

10、在host1上针对用来创建Red1和Blue1所使用的虚拟机交换机的物理网卡设置相应的PA地址

$switch2=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$index=Get-VMSwitch -Name $switch2.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.42" -PrefixLength 24

11、在host2上针对用来创建Red2和Blue2所使用的虚拟机交换机的物理网卡设置相应的PA地址

$switch2=Get-VMNetworkAdapter blue*,red* | Select-Object@{Name="Name";Expression={$_.SwitchName}} -Unique

$index=Get-VMSwitch -Name $switch2.Name | Select-Object@{Name="InterfaceDescription";Expression={$_.NetAdapterInterfaceDescription}}|Get-NetAdapter

New-NetVirtualizationProviderAddress -InterfaceIndex $index.ifIndex-ProviderAddress "214.214.51.43" -PrefixLength 24

12、在Host1和Host2上使用下面命令查询所有的配置。

Get-NetVirtualizationLookupRecord | Format-TableVirtualSubnetID ,CustomerAddress,Provideraddress -AutoSize

Get-NetVirtualizationProviderAddress |Format-TableInterfaceIndex,Provideraddress,PrefixLength,VlanID -AutoSize

Get-NetVirtualizationCustomerRoute | Format-Table

Get-VMNetworkAdapter blue*,red* | SelectVMName,MacAddress,IPAddresses,VirtualSubnetID,SwitchName,Status | Format-Table–AutoSize

13、在Host1和Host2上执行下面命令重新连接Red和Blue租户的虚拟机网络,使配置生效.此时IP冲突已经解决

Disconnect-VMNetworkAdapter –VMName Red*,blue*

Connect-VMNetworkAdapter –VMName Red*,blue* –SwitchName “vswitch”

14、测试虚拟机的连通性,和在线迁移网络连通性。

15、在host1和host2上清除所有配置,还原环境

Set-VMNetworkAdapter-VMName * -VirtualSubnetId 0

Remove-NetVirtualizationCustomerRoute-VirtualSubnetID 5010,5011

Remove-NetVirtualizationLookupRecord-VirtualSubnetID 5010,5011

Remove-NetVirtualizationProviderAddress-ProviderAddress "214.214.51.43","214.214.51.42"

Disconnect-VMNetworkAdapter –VMNameRed*,blue*

Connect-VMNetworkAdapter –VMName Red*,blue* –SwitchName “vswitch”

注意:使用NVGRE封装,你可以灵活的定义它,正如你可以使用一个PA的多个CA。再次,你可以节省更多的PA地址,减轻网络复杂性。另一种可能性是每个虚拟网络一个PA。这将使在管理不同租户共享的Hyper-VServer的一些灵活性。同样,这将只支持使用NVGRE(封装)。

再次展现powershell无穷的威力你值得拥有

09-18 11:57