深入浅出Hyper-V网络虚拟化(序)

服务器虚拟化已经越来越普及,很多企业也都在尝试着将现有业务转换成虚拟化的方式来运行,即在一个物理服务器上虚拟出多个实例,而每个实例彼此隔离,就好像在使用一台真实主机一样;网络虚拟化也同样如此,在同一条物理链路上虚拟出若干网络环境,且彼此隔离;不光如此,网络虚拟化还打破了传统VLAN以及IP地址分配方面的不便捷性,使用网络虚拟化可以把现有业务直接无缝的托管到IaaS中,而整个过程甚至无需考虑IP地址的重复性,现有应用的访问也不需要做任何修改

那么说到网络虚拟化就不得不提到“软件定义网络(SDN)”,这里摘取一段Baidu百科的介绍

【举个不恰当的例子,SDN技术就相当于把每人家里路由器的的管理设置系统和路由器剥离开。以前我们每台路由器都有自己的管理系统,而有了SDN之后,一个管理系统可用在所有品牌的路由器上。如果说网络系统是功能机,系统和硬件出厂时就被捆绑在一起,那么SDN就是Android系统,可以在很多智能手机上安装、升级,同时还能安装更多更强大的手机App(SDN应用层部署)】

由于传统的网络设备(交换机、路由器)的固件是由设备制造商锁定和控制,所以SDN希望将网络控制与物理网络拓扑分离,从而摆脱硬件对网络架构的限制

#######################################################################################

在windows server 2012中就提供了网络虚拟化的支持,而在R2中又得以升华,下图是基于windows server 2012 R2的hyper-v管理器,我以test01和02为例,首先将两台虚机的IP设置成一样

test01的IP为10.10.1.122/16,没有问题

test02使用同样的地址(10.10.1.122/16)后出现了IP冲突的问题,由于在同一个广播域或者同一VLAN内出现了IP重复的情况,所以虚机test02被分配了一个169.254.x.x的IP;显然这种情况下是无法正常使用的

那么如何通过软件定义网络,而不去牵扯硬件设备来实现网络的隔离呢?先来看一下当前的配置环境,下图是当前虚机所绑定的vm network,即虚拟网络TDIv2;环境基于system center 2012 R2 VMM

我们来看一下这个虚拟网络所依赖的逻辑网络资源,同样也叫TDIv2,这个是添加主机时自动捕获到的,也就是平常所说的默认设置;可以看到TDIv2这个逻辑网络勾选了“允许使用网络虚拟化”

再来看一下虚机所连接的vm network “TDIv2”,虚机会借由vm network来与逻辑网络连接,如下图位置;有些朋友可能会被逻辑网络与虚拟网络搞晕了头,实际没那么复杂

那么要实现网络虚拟化的隔离,就要在当前基础上创建新的vm network,如下图所示

我们输入AAA这个名称,另外选择这个即将创建的vm network是基于相同的逻辑网络之上的,即TDIv2

接下来可以看到R2的改进之处,原先是没有隔离选项的,上面的“使用hyper-v网络虚拟化”就是我们要实现的功能,而下面的“no isolation”就是以前那种“1对1”的模式,可以看到下方的描述“使用非隔离模式,每个逻辑网络只能创建一个虚拟网络”

接下来我们暂时不创建子网

在网关这里由于我们还没有配置好网关所以没得可选,在最后我会做简短说明

至此我们的AAA虚拟网络就创建好了

接下来我们把刚才的虚机拿出来一台,给它换个“网卡”,如下图所示,从TDIv2改成AAA

发现报错了~看一看log,哦~原来说我没有子网

那就加个子网呗,如下图所示10.10.0.0/16,子网名称test

再次修改虚机配置,咦?又报错了。。。看看log,哦~光有子网不行,还得有地址池

那就在AAA这个vm network上创建个地址池

输入地址池的名称CA Pool,地址池基于我们刚才创建的子网“test”

键入地址池范围,这里以“10.10.1.100~10.10.1.130”为例

返回到vm network可以看到已经成功的创建了地址池

再一次修改虚机配置,这里可以看到vm subnet这里已经出现了名为“test”的子网了

这次终于成功了呢~

我们如法炮制,再创建一个叫做BBB的vm network,另外也给它一个名为CA Pool的地址池,同样也是10.10.0.0/16的网络地址;这里或许就会有疑问了,一样的IP地址段没关系么?是的,完全没有问题,因为它们是绝对隔离的

我们把另外一台虚机的vm network改成BBB,子网同样也叫test

######################################################################################

下面就回到虚机里看一下情况,test01上的IP通过自动获取已经变为10.10.1.100;同样自动拿到了一个10.10.0.1的网关和192.0.2.253的dhcp服务器地址

test02上也拿到了10.10.1.100的IP和一样的网关以及dhcp地址;但是这次并没有出现IP地址重复的问题,也就是说现在test01和02两台虚机虽然IP相同,但是彼此绝对隔离,不受印象

但是这里要特别说明一点,由于test01和02现在分别处于AAA和BBB两个vm network下,所以网关默认是由虚拟子网的第一个IP来承担,如果想访问外网或者其他外部访问,就需要SCVMM中的gateway来实现了

下面来重点说一下hyper-v网络虚拟化方面的一些重要概念,如下图所示,通过执行-module netwnv模块下的powershell来查看当前网络虚拟化路由;可见有两个10.10.0.0/16的路由条目,即我们刚才创建的AAA与BBB,注意两个参数:

RoutingDomainID

VirtualSubnetID

同一个RDID下可包含一个或多个VSID,这些VSID间是可以相互访问的;但是无法跨越RDID,也就是说不同的RDID是绝对隔离的

这里转载微软官方说明如下:

在图中,VSID 为 5001 的虚拟机能通过 Hyper-V 网络虚拟化将其数据包路由或转发到 VSID 为5002 或 5003 的虚拟机中。在将数据包送往 Hyper-V 交换机之前,Hyper-V 网络虚拟化将把进入的数据包的 VSID 更新为目标虚拟机的 VSID。这只有在两个 VSID 都属于一个 RDID 的情况下才能实现。如果数据包上的 VSID 与目标虚拟机的 VSID 不匹配,数据包会被丢弃。因此,带有 RDID1 的虚拟网络适配器不能将数据包发送到带有 RDID2 的虚拟网络适配器

然后再来看一些参数,同样使用netwnv模块下的powershell来调取test01的网络虚拟化记录,如下图所示:

CustomerAddress

ProviderAddress

CA和PA的意义是非常非常重要的,正是有了这两个地址,才可以实现租户的跨子网迁移,例如企业用户将现有环境中的资源直接上传到公有云上,而不需要修改IP;那么它的原理是怎样的呢?

CA即为用户已有的IP,是可见的;而PA顾名思义,是提供商IP,或者说叫运营方的IP,也就是对用户不可见的,在将现有资源上传到公有云或者混合云环境后,通过CA与PA之间的相互转换来实现数据的通信,在下图中,CA即为我们AAA这个vm network中地址池所分配的IP,而PA是我system center这套基础架构所在的网段,这里虽然显示上看似一个IP段,但其实不然

【Hyper-V 网络虚拟化支持基本路由封装实现网络虚拟化作为一种机制来虚拟化 IP 地址:】

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

【包含在 GRE 报头中的虚拟子网 ID 可让主机为任何指定的数据包确定客户虚拟机,尽管数据包上的 PA 和 CA 出现重叠。这可让同一台主机上的所有虚拟机分享一个 PA(如图所示)】

之前test01和test02都是位于host16这台主机上,而在实施了网络虚拟化之后,依然可以进行虚机的迁移,例如下图将test01迁移至host15上

通过下图可见,之前在host15上执行get-netvirtualizationcustomerroute是没有返回信息的,而将test01迁移过来之后,便可查询到当前主机上的“网络虚拟化路由条目”

附上teched2013视频:

http://www.tudou.com/programs/view/vhaLwmRYcjk/

#######################################################################################

接下来我们在AAA这个vmnetwork下再创建一个子网,取名test02,并且基于test02创建地址池172.16.0.0/16

这个操作的效果就相当于在同一个RoutingDomainID(AAA)下创建了两个VirtualSubnetID(test、test02),那么按照这样的结构,这两个VSID之间应该是可以无限制访问,下面就来验证一下

我们将一台虚机保留AAA和test子网不变,另外一台修改为AAA和test02子网

之后再通过powershell查看路由信息,可以看到两条路由的RDID是一致的

在172.16.0.0/16的子网上去ping 10.10.0.0/16,完全没有问题噢~,见下图

####################################################################################

以上是借助SCVMM来介绍的一些网络虚拟化基本概念,其实体验过Windows Azuer Pack的朋友应该了解,在门户上申请一个VM Network其实就是在SCVMM上创建了一个“虚拟网络”,就像我们的AAA或BBB一样,以此来将不同的租户进行隔离,实现网络虚拟化

那么如果没有VMM来做管理的话,单纯使用hyper-v可否实现呢?也是没问题的,只不过需要借助powershell来做:

# Topology:

#

#    +---------+  +---------+          +---------+  +---------+

#    |  Blue1  |  |  Red1   |          |  Blue2  |  |  Red2   |

#    |10.0.0.5 |  |10.0.0.5 |          |10.0.0.7 |  |10.0.0.7 |

#    +---------+  +---------+          +---------+  +---------+

#        | VSID       | VSID               | VSID       | VSID

#        | 5001       | 6001               | 5001       | 6001

#    +======================+          +======================+

#    #        Host 1        #          #        Host 2        #

#    #                      #          #                      #

#    +======================+          +======================+

#    PA=         |                                  | PA=

#    192.168.4.11|                                  | 192.168.4.22

#                +----------------------------------+

上面这个拓扑是一个非常简单的环境,两台主机,四台虚机,一个blue网络,一个red网络,借由这些资源来实现网络虚拟化,只需几条简单的powershell即可

# Add the locator records for Blue&Red subnet

New-NetVirtualizationLookupRecord -VirtualSubnetID "VSID" -CustomerAddress "ip" -ProviderAddress"ip" -MACAddress "mac" -Rule "TranslationMethodEncap"

New-NetVirtualizationLookupRecord -VirtualSubnetID "VSID" -CustomerAddress "ip" -ProviderAddress"ip" -MACAddress "mac" -Rule "TranslationMethodEncap"

# Add the customer route records for Blue&Red subnet

New-NetVirtualizationCustomerRoute -RoutingDomainID "RDID" -VirtualSubnetID "VSID" -DestinationPrefix "ip" -NextHop "0.0.0.0"

# 附上脚本下载链接:

http://gallery.technet.microsoft.com/scriptcenter/Simple-Hyper-V-Network-d3efb3b8

http://gallery.technet.microsoft.com/scriptcenter/Simple-Hyper-V-Network-6928e91b

#####################################################################################

最后再来转载官网的介绍来说一说网关的意义:

1. 私有云环境下(路由)

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

【注意,在下图中,虚拟子网的客户地址为 157.x 地址,而网络中非网络虚拟部分 (Corp Net) 的 IP 地址也为 157.x 地址。在此示例中,数据中心中的虚拟子网的 PA 地址为 10.x IP 地址。这一部署能让公司利用 Hyper-V 网络虚拟化的一项功能,使数据中心结构中的虚拟机位置和跨子网动态迁移有一定的灵活性。这就提高了数据中心的效率,从而减少了操作支出 (OpEx) 和资本支出 (CapEx)。在这种情况下,Hyper-V 网络虚拟化网关提供 10.x 和 157.1 IP 之间的路由】

2. 混合云环境下(VPN)

【Hyper-V 网络虚拟化的主要优点是,能将本地数据中心无缝地延伸到基于 Windows Server 2012 的云数据中心。这就是混合云模式,如下图所示:】

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

【Hyper-V 网络虚拟化网关可支持多个站对站 (S2S) VPN 隧道,如下图所示。注意,VMM 虽没有显示在图中,但却是 Hyper-V 网络虚拟化部署所必需的】

#####################################################################################

Hyper-V网络虚拟化就简单说到这里,本人也在摸索之中,相信在未来的发展中,软件定义XX将会越来越被普及,欢迎在微软网络虚拟化方面有经验的朋友来交流,谢谢:)

本文出自 “技术不宅” 博客,请务必保留此出处http://maomaostyle.blog.51cto.com/2220531/1346900

时间: 2024-10-21 15:30:32

深入浅出Hyper-V网络虚拟化(序)的相关文章

Hyper v 单网卡 外部网络

先说一下环境: WIN 8.1 单网卡(有 无线 和 有线网卡, 但是没有多余的网络接口可插,还是等于单网卡) Hyper V 有3种虚拟交换机类型: 专用 / 内部 / 外部 各有各的用处, 我理解也不多,不多嘴误导大家. 今天说这个,是因为要做CSS和JS兼容调试, 开发用的都是IE11,用IE11的调试工具将文档模式调为 IE8 ,发现 jQuery.Validation 不能常运行. 但是用虚拟机装的 XP上直接用IE8 ,却没有任何问题,真的很蛋疼. 工作用的有两台电脑,一台装的是WI

win8/win10 自带Hyper V虚拟机

为什么是hyperV而不是vmware workstation或者virturalBox? 萝卜白菜,各有所爱.这里不比较数据,不深究技术,我选择的理由很简单:系统自带,不用安装额外的软件,而且性能也还可以. hyperV最早集成于win8中,win7及更老版本是没有此功能的.打开"任务管理器",在"性能"选项卡"虚拟化"中可到启用状态.可在BIOS设备.安全或CPU选项卡中找到虚拟化选项. BIOS中开启硬件支持后,可在"添加删除程序

Hyper - V (四)

安装虚拟机 新建虚拟机 为新建的虚拟机起名,默认保存路径为前面设置的默认路径 指定虚拟机内存大小 指定虚拟机网卡连接到外部网络还是内部网络(或专用网络) 创建虚拟硬盘,指定硬盘存储路径及硬盘大小 选择安装文件的引导路径,支持光盘安装,ISO安装等方式. 这里我们选择通过光驱引导的方式来安装系统 完成虚拟机设置. 右键点击新建的虚拟机,设置可以更改虚拟机的配置选项. 将ISO文件加载到虚拟机中,即可以实现光盘引导功能. 启动虚拟机-- 安装系统 Hyper - V (四),布布扣,bubuko.c

Hyper - V (三)

创建内部网络及专用网络 内部网络:不与外部通讯的网络,仅与物理机及虚拟机之间通讯. 专用网络:不与外部及物理机通讯的网络,仅支持虚拟机之间的通讯. 添加内部网络 单击虚拟网络管理器 2. 点击新建虚拟网络 -- 内部 -- 添加 3. 此时将新建立一个内部的虚拟网卡 在添加内网通信的IP地址即可. Hyper - V (三),布布扣,bubuko.com

[转]数据中心网络虚拟化 隧道技术

http://www.sdnlab.com/12077.html SDNLAB 如何实现不同租户和应用间的地址空间和数据流量的隔离是实现数据中心网络虚拟化首先需要解决的几个问题之一.所谓地址空间的隔离是指不同租户和应用之间的网络(ip)地址之间不会产生相互干扰.换句话说,两个租户完全可以使用相同的网络地址.所谓数据流量的隔离是指任何一个租户和应用都不会感知或捕获到其他虚拟网络内部的流量.为了实现上述目的,我们可以在物理网络上面为租户构建各自的覆盖(overlay)网络,而隧道封装技术则是实现覆盖

53 kvm及libvirt、使用virsh管理kvm虚拟机、网络虚拟化技术基础、网络名称空间netns用法详解

01 kvm及libvirt [[email protected] ~]# yum install libvirt libvirt-client python-virtinst virt-manager virt-install -y [[email protected] ~]# yum -y install qemu-kvm [[email protected] ~]# systemctl start libvirtd.service #创建桥 [[email protected] ~]# v

数据中心网络虚拟化-隧道技术

如何实现不同租户和应用间的地址空间和数据流量的隔离是实现数据中心网络虚拟化首先需要解决的几个问题之一.所谓地址空间的隔离是指不同租户和应用 之间的网络(ip)地址之间不会产生相互干扰.换句话说,两个租户完全可以使用相同的网络地址.所谓数据流量的隔离是指任何一个租户和应用都不会感知或捕 获到其他虚拟网络内部的流量.为了实现上述目的,我们可以在物理网络上面为租户构建各自的覆盖(overlay)网络,而隧道封装技术则是实现覆盖网络的 关键.本节我们将针对目前较为流行的构建覆盖网络的隧道封装技术展开讨论

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2 1. 基本命令 安装集群故障转移角色 Install-WindowsFeature -name Failover-Clustering -IncludeManagementTools 关闭防火墙 netsh advfirewall set allprofiles state off 关闭IPv6 New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSe

【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(五)NVGRE 网关实现VPN (Site to Site) 下篇

VPN 企业对端 1.环境描述 一台VPNserver ,两个网卡 一个外网卡配置模拟公网地址:10.10.2.200 一个内网卡配置内网地址:10.10.9.100 在VPNserver上搭建一台模拟企业内网测试虚拟机,1个网卡 网卡配置内网地址:10.10.9.222,网关 10.10.9.100 2.VPNServer 部署&配置 步骤一: 安装装相关角色 步骤二: 至此建立完成,下面自动弹出配置端口 步骤三: 此处应该写之前的scvmm上的分配给租户的vpn 公网端点 10.10.2.5