云计算,凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新形态;而在云计算中,大量的采用和部署虚拟化是一个基本的技术模式。
服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中不受限制的迁移(如图1-1所示)。实际上,对于数据中心而言,虚拟机迁移已经成为了一个常态性业务。
图1-1 虚拟机迁移
虚拟机数量的快速增长与虚拟机迁移业务的日趋频繁,给传统的“二层+三层”数据中心网络带来了新的挑战:
1、虚拟机规模受网络设备表项规格的限制
对于同网段主机的通信而言,报文通过查询MAC表进行二层转发。服务器虚拟化后,数据中心中VM的数量比原有的物理机发生了数量级的增长,伴随而来的便是虚拟机网卡MAC地址数量的空前增加。
2、VLAN隔离能力不在满足需求
VLAN作为当前主流的网络隔离技术,在标准定义中只有12比特,也就是说可用的VLAN数量只有4000个左右。对于公有云或其它大型虚拟化云计算服务这种动辄上万甚至更多租户的场景而言,VLAN的隔离能力显然已经力不从心。
3、虚拟机迁移范围受限
虚拟机迁移,顾名思义,就是将虚拟机从一个物理机迁移到另一个物理机,但是要求在迁移过程中业务不能中断。要做到这一点,需要保证虚拟机迁移前后,其IP地址、MAC地址等参数维持不变。这就决定了,虚拟机迁移必须发生在一个二层域中。而传统数据中心网络的二层域,将虚拟机迁移限制在了一个较小的局部范围内。
针对传统数据中心面临的问题,VXLAN技术很好的解决上面提到的限制:
1、 这对虚拟机规模受网络规格限制
VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC地址作为外层进行封装,对网络只表现为封装后的参数,因此,极大的降低了大二层网路对MAC地址规格的需求。
2、 针对网络隔离能力的限制
VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标示VNI(VXLANnetwork ID),由24位比特组成,支持多达16M的VXLAN段,从而满足了大量的用户标识。
3、 针对虚拟机迁移范围受网络架构的限制
通过VXLAN构建大二层网络,保证了在虚拟机迁移时虚拟机的IP地址MAC地址等保持不变,保证了在迁移过程中业务不中断。
所以随着数据中心在物理网络基础设施上实施服务器虚拟化的快速的发展,VXLAN技术通过24位比特的VNI可以支持多达16M的VXLAN段的网络隔离,对用户进行隔离和标识不再受到限制,可以满足海量用户;除VXLAN网络边缘设备,网络中的其他设备不需要识别虚拟机的MAC地址,减轻了设备的MAC地址学习压力,提升了设备性能;通过采用MAC inUDP封装来延伸了二层网络,时间了物理网络和虚拟网络的解耦,租户可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制,大大降低了网络管理的难度。
目前,规模化,虚拟化,云计算已经成为数据中心的发展方向,同时数据中心为了更大的业务量并降低维护成本,逐渐向大二层技术及虚拟化迁移,随着数据中心在物理网络基础设施上试试服务器虚拟化的快速发展,作为NVO3技术之一的VXLAN技术具有很强的适应性,为数据中心提供了良好的解决方案。
如果图2-1所示,某企业在不同数据中心(物理上隔离)都有有VM,且位于同一网段,现需要实现不同数据中心相同网段的VM互通。
图 2-1 相同网段不同站点间互通
可将交换机设备作为VXLAN二层网关,交互机设备间建立VXLAN隧道,通过VXLAN二层网关实现同一网段终端用户互通。
如图2-2所示,某企业在不同的数据中心有VM,且位于不同网段,先需要实现该企业不同网段VM之间互通。
图 2-2 不同网段不同站点间互通
可以将Switch-3设备作为VXLAN三层网关,其他交换机作为VXLAN的二层网关,交换机设备之间建立VXLAN隧道,通过VXLAN三层网关实现不同网段的终端用户互通。
当前数据中心网络中企业通过部署服务器虚拟化来达到整合IT资源,提升资源利用率,降低开支的目的,随着虚拟化水平的不断提高,物理服务器上虚拟机的数量在不断增加,虚拟化环境下运行的应用数量也在不断增加,为虚拟网络带来了很大的挑战。
如图2-3,某企业在数据中心有两个集群Cluster,其中工程部门和财务部门都在Cluster1上,营销部门在Cluseter2上。
Cluster1上显示计算资源不足,而Cluster2未充分利用,网络管理员需要将工程部分迁移到Cluster2上,而且不影响业务正常运行。
图2-3 虚拟机在不同站点间迁移
为了保证工程部门在迁移过程中业务不中断,则需要保证工程部门的IP地址,MAC地址等参数保持不变,这就要求两个Cluster属于一个二层网络。为了将工程部门成功迁移到Cluster2上,可以通过VXLAN来实现。VXLAN是MAC in UDP的网络虚拟化技术,只要物理网络支持IP转发,所有IP路由可达的终端用户即可建立一个大范围的二层网络,通过VXLAN隧道,工程部门在迁移过程中可以保证网络无感知。工程部门在从Cluster1迁移到Cluster2后,终端用户会发送免费ARP报文,所有网关设备上保存的原VM对应的MAC地址表项和ARP表项都会将删除,更新为迁移后的VM对应的MAC地址表项和ARP表项。
VXLAN是一种大二层的虚拟技术,主要的技术原理是引入了一个UDP外层隧道,作为数据的链路层,而原有的数据报文内容作为隧道净荷来传输,由于外层采用了UDP作为传出手段,就可以让净荷数据轻而易举的在二三层网络中传送,为了能够支持原有的vlan广播寻址能力,VXLAN还可以引入三层IP组播来代替以太网的广播,让BUM(broadcast广播,unknown unicast未知单播,multicast多播)报文通过广播方式在虚拟网络中传送。
VXLAN技术将已有的三层物理网络作为underlay网络,在其上构建出虚拟的二层网络,即overlay网络,overlay网络通过封装技术,利用underlay网络提供的三层转发路径,实现租户二层报文跨越三层网络在不同站点间传递。对租户来说,underlay网络时透明的,同一租户的不同站点就像工作一个局域网中(如图2-1所示)。
图2-1 VXLAN网络组网模型示意图
(1)VM(VirtualMachine,虚拟机):在一台设备上可以创建多台虚拟机,不同的虚拟机可以属于不同的VXLAN。属于相同的VXLAN的虚拟机处于同一个逻辑二层网络,彼此之间二层互通,属于不同VXLAN的虚拟机之间二层隔离。VXLAN通过VXLANID来标识,又被称为VNI(VXLAN network identifier,VXLAN网络标识符),其长度为24比特。
(2)VTEP(VXLAN tunnelend point,VXLAN隧道端点):VXLAN的边缘设备,针对VXLAN的处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN,基于VXLAN对数据帧进行二层转发、封装/解封装报文等。VTEP可以是一台独立的物理设备也可以是虚拟机所在的服务器。
(3)VXLAN隧道:两个VTEP之间的点到点的逻辑隧道,VTEP为数据帧封装VXLAN头,UDP头和IP头,通过VXLAN隧道将封装后的报文传递到远端VTEP,远端VTEP设备对其进行解封装。
(4)核心设备:IP核心网络中的设备,其核心设备不需要参与VXLAN的处理,仅需根据封装后报文的目的IP地址地报文进行三次转发。
(5)VSI(VirtualSwitch Instance,虚拟交换实例):VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例,可以看做是VTEP设备上一台基于VXLAN进行二层转发的虚拟交换机,它可以具有传统以太网交换机所具有的所有功能,包括源MAC地址的学习、MAC地址老化,洪泛等。VSI与VXLAN一一对应。
图2-2 VXLAN报文封装格式
在原始的二层数据帧外添加8字节的VXLAN头,8字节UDP头和2-字节的IP头。其中UDP头的目的端口号为VXLAN固定UDP端口号(缺省值为4789),VXLAN头主要包含两部分:
(1) 标志位:“I”位为1,表示VXLAN投中的VXLAN ID有效;为0,表示VXLAN ID无效,其他保留未用,设置为0;
(2) VXLAN ID:用来标识一个VXLAN网络,长度为24比特;
主要事项:封装后的报文长度增加了50个字节,所以虚拟机的上行端口以及与上行端口相连的交换机端口,路由器端口都需要配置的比VM虚拟网卡的最大MTU值增加50个字节,如果无法操作的话,可以考虑把VM的最大MTU减小50字节。
图3-1建立VXLAN隧道示意图(1)
如图3-1所示,网络中存在多个VTEP,那么这其中哪些VTEP间需要建立VXLAN隧道呢?
如前所述,通过VXLAN隧道,“二层域”可以突破物理上的界限,实现大二层网络中VM之间的通信。所以,连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。
例如,假设图3-1中VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间需要“大二层”互通,那VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道,如图3-2所示
图3-2建立VXLAN隧道示意图(2)
VXLAN运行机制可以概括为:
(1) 发现远端的VTEP,在VTEP之间建立VXLAN隧道,并将VXLAN隧道与vxla关联;
(2) 识别接收到的报文所属的VXLAN,以便将报文的源MAC地址学习到VXLAN对应的VSI中,并在该VSI内转发报文;
(3) 学习虚拟机的MAC地址;
(4) 根据学习到的MAC地址表项转发报文;
为了将VXLAN报文传递到远端VTEP,需要创建VXLAN隧道,并将VXLAN隧道与VXLAN关联起来。
1、 创建VXLAN隧道
(1) 手工方式:手工配置Tunnel接口,并指定隧道的源和目的IP地址分别为本端和远端VTEP的IP地址;
(2) 自动方式:通过ENDP(Enhance Neighbor Discovery Protocol,增强的邻居发现协议)发现远端VTEP,自动在本端和远端VTEP之间建立VXLAN隧道。
2、 关联VXLAN隧道与VXLAN
(1) 手工方式:手工将VXLAN隧道和VXLAN进行关联;
(2) 自动方式:通过扩展IS-IS协议发布VXLAN ID信息。VTEP在所有的VXLAN隧道上通过IS-IS将本地存在的VXLAN ID通告给远端VTEP,远端VTEP将其与本地的VXLAN进行比较,如果存在相同的VXLAN,则将该VXLAN与接收信息的VXLAN隧道关联。
1、本地站点内接收到数据帧的识别
VETP将连接本地站点的三层接口或以太网服务实例(Service Instance)与VSI关联,VTEP从三层接口或以太网服务实例接收到数据帧后,查找与其关联的VSI,VSI内创建的VXLAN即为该数据帧所属的VXLAN。以太网服务器实例在二层以太网接口上创建,它定义了一系列的匹配规则,用来匹配从该二层以太网接口上接收到的数据帧。主要通过vlan ID来区分从二层以太网接口上接收到的数据帧。
如图3-1所示,VM1属于VLAN 2,在VTEP上配置以太网服务实例1匹配VLAN 2的报文,将以太网服务实例1与VSI A绑定,并在VSI内创建VXLAN 10,则VETP接收到的VM 1的发送的数据帧后,可以判定该数据帧属于VXLAN 10。
图3-1 二层数据帧匹配VXLAN
2、VXLAN隧道上接收报文的识别
对于从VXLAN隧道上接收的数据帧,VTEP根据报文中携带的VXLAN ID判断报文所属的VXLAN。
1、本地MAC地址学习
是指VTEP对本地站点内虚拟机的MAC地址的学习,VETP接收到本地虚拟机发送的数据帧后,判断报文所属的VSI,并将报文中的源MAC地址添加到对应的VSI的MAC表中,该MAC地址对应的接口即为接收到数据帧的接口。
2、远端MAC地址学习
是指VTEP学习远端站点内虚拟机的MAC地址,主要有下面几种方法:
(1) 静态配置:手工指定远端虚拟机的MAC地址所属的VSI(即VXLAN)及其对应的VXLAN隧道接口。
(2) 动态学习:通过报文中的源MAC地址进行动态学习,VTEP从隧道上接收到远端的VETP发送的VXLAN报文后,根据VXLAN ID判断报文所属的VSI,并对报文进解封装,从而还原原始的二层数据帧,并将数据帧的源MAC地址添加到所属的VXLAN对应的VSI的MAC地址表中,该MAC地址对应的接口为其VXLAN隧道接口。
(3) 通过IS-IS协议学习:VXLAN扩展了IS-IS协议来发布本端的MAC地址信息,在VTEP上运行IS-IS协议,通过VXLAN隧道将本地MAC地址及其所属的VXLAN信息通告给远端VTEP,远端VETP接收到该信息后,将其添加到对应的VXLAN所属的VSI的MAC地址表中,该MAC地址对应的接口为其相应的VXLAN隧道接口。
数据报文转发即为虚拟机报文接入VTEP的方式,其主要有两种VLAN接入模式和Ethernet接入模式。
(1) VLAN接入模式:从本地站点接收到和发送给本地站点的以太网帧必须带有VLAN Tag,VTEP从本地站点接收到以太网帧后,删除其携带的所有VLAN Tag,再转发该数据帧;VTEP发送数据帧到本地站点时,为其添加本地的VLAN Tag。该模式下,VTEP不会传递VLAN信息,不同的站点可以独立的规划自己的VLAN,不同站点的不同VLAN之间可以互通。规划比较灵活。
(2) 从本地站点接收到和发送给本地站点的数据帧可以携带VLAN Tag,也可以不携带VLAN Tag,VTEP从本地站点接收到以太网数据帧后,保持该数据帧的VLAN Tag信息不变,转发该数据帧;VTEP接收到以太网到本地站点的数据帧后,不会为期添加任何的VLAN信息。该方式下,VTEP会在不同的站点之间出传递VLAN信息,不同站点间的VLAN需要统一规划,否则无法互通。
流封装类型 |
允许进入VXLAN隧道的报文类型 |
报文进行封装前的处理 |
接收到VXLAN报文并解封装后的处理 |
dot1q |
只允许携带指定VLAN Tag的报文进入VXLAN隧道 |
进行VXLAN封装前,需要先剥掉原始报文的外层VLAN Tag |
进行VXLAN解封装后,如果内层原始报文还带有VLAN Tag,则VLAN Tag替换为指定的VLAN Tag。 如果内层报文没有携带VLAN,则添加上指定额VLAN Tag。 |
Untag |
只允许不携带VLAN Tag的报文进入VXLAN隧道 |
进行VXLAN封装前,不对原始报文进行任何处理,即不添加任何的VLAN Tag |
进行VXLAN解封装后,如果内层原始报文还带有VLAN Tag,则删除VLAN Tag后转发。 如果内层报文没有携带VLAN,则直接转发。 |
Default |
允许所有报文进入VXLAN隧道,不论报文是否携带VLAN Tag |
进行VXLAN封装前不对原始报文进行任何改动 |
进行VXLAN解封装后不对原始二层报文进行任何处理,直接转发 |
如图4-1所示,VM_A、VM_B和VM_C同属于10.1.1.0/24网段,且同属于VNI5000。此时,VM_A想与VM_C进行通信。
图4-1 VXLAN隧道示意图
由于是首次进行通信,VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址。
下面就让我们根据ARP请求报文及ARP应答报文的转发流程,来看下MAC地址是如何进行学习的。
(1)ARP请求流程
图4-2 ARP请求流程图
序号 |
描述 |
1 |
VM_A发送源MAC为MAC_A、目的MAC为全F、源IP为IP_A、目的IP为IP_C的ARP广播报文,请求VM_C的MAC地址。 |
2 |
VTEP_1收到ARP请求后,根据二层子接口上的配置判断报文需要进入VXLAN隧道。也就确定了报文所属的VNI。同时,VTEP_1学习MAC_A、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP_1会根据头端复制列表对报文进行复制,并分别进行封装。 可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_1)的IP地址,外层目的IP地址为对端VTEP(VTEP_2和VTEP_3)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。 封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP |
3 |
报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。同时,VTEP_2和VTEP_3学习VM_A的MAC地址、VNI和远端VTEP的IP地址(IP_1)的对应关系,并记录在本地MAC表中。之后,VTEP_2和VTEP_3根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。 VM_B和VM_C接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址。VM_B发现目的IP不是本机IP,故将报文丢弃;VM_C发现目的IP是本机IP,则对ARP请求做出应答。 |
真实MAC表中记录的不是VTEP远端的IP地址,而是本端的隧道接口,这是只是用VTEP远端IP地址来标示本端隧道接口。 |
(2)ARP应答流程
图4-3 ARP应答流程图
序号 |
描述 |
1 |
由于此时VM_C上已经学习到了VM_A的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A。 |
2 |
VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI(识别过程与步骤2类似)。同时,VTEP_3学习MAC_C、VNI和报文入接口(Port_3)的对应关系,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。
这里封装的外层源IP地址为本地VTEP(VTEP_3)的IP地址,外层目的IP地址为对端VTEP(VTEP_1)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。 封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。 |
3 |
报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时,VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址(IP_3)的对应关系,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。 |
对于同一站点内流程,VTEP判断出报文所属于的VSI后,根据目的MAC地址查找该VSI的MAC地址表,从相应的本地接口转发给目的VM。
图4-4 同站点单播转发流程
如图4-4所示VM1(MAC地址为MAC1)发送以太网帧到VM4(MAC地址为MAC4)时,VTEP1从接口GE1/0/1收到该以太网帧后,判断该数据帧属于VSI A(VXLAN 10),所以查找VSI A的MAC地址表,得到MAC 4的出接口为GE1/0/2,所在VLAN为VLAN 10,则将该以太网帧从接口GE1/0/2的VLAN 10内发送给VM4。
图4-5 站点间单播流量转发流程
如图4-5所示,VM1,MV4和MV7属于一个大二层子网 VXLANID为10(VSI为 A),以VM1与VM7通信为例描述跨站点的二层互通处理流程:
序号 |
描述 |
1 |
VM 1发送以太网数据帧给VM 7,数据帧的源MAC地址为MAC 1,目的MAC为MAC 7,VLAN Tag为2 |
2 |
VTEP1从接口GE1/0/1收到该数据帧后,判断出该数据帧属于VSI A(VXLAN 10),查找VSI A的MAC地址表,得到MAC 7的出接口Tunnel 1 |
3 |
VTEP1为数据帧封装VXLAN头,UDP头,IP头后,将封装好的报文通过VXLAN隧道Tunnel 1经由源三层网络P设备转发给VTEP2。 |
4 |
VTEP2接收到报文后,根据报文中的VXLAN ID判断该报文属于VXLAN 10,并剥离VXLAN头,UDP头,IP头部,还原原始的二层数据帧。 |
5 |
VTEP2查找与VXLAN 10对应的VSI A的MAC地址表,得到MAC 7的出接口GE1/0/1(其vlan为20) |
6 |
VTEP2从接口GE1/0/1的VLAN 20内将数据帧发送给VM 7 |
洪泛流量包括组播、广播、未知单播,根据复制方式的不同,流量洪泛方式分为单播路由方式(头端复制)、组播路由方式(核心复制)和洪泛代理方式(服务器复制)三种。
在单播路由方式下,VTEP负责复制报文,采用单播方式将复制后的报文通过本地接口发送给本地站点,并通过VXLAN隧道发送给VXLAN内所有的远端VTEP站点。
图4-6单播路由转发方式
序号 |
描述 |
1 |
VTEP1接收到本地虚拟机发送的组播,广播,未知单播数据帧后,判断数据帧所属的VXLAN,通过该VXLAN内除接收端口外的所有本地端口和VXLAN隧道转发,通过VXLAN隧道转发时,需要为其封装VXLAN头,UDP头和IP头,将洪泛流量封装在多个单播报文中通过核心交换转发到VXLAN内的所有远端VTEP。 |
2 |
远端VTEP(VTEP2和VTEP3)接收到VXLAN的报文后,解封装报文,将原始数据帧在本地指定的VXLAN内洪泛。 |
为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其洪泛到其他VXLAN隧道。 |
数据中心网络中要通过IP核心网络进行二层网络互连的站点较多时,采用组播路由方式可以节省洪泛流量对核心网络带宽资源的占用。
在组播路由方式下,同一个VXLAN内所有的VTEP都加入同一个组播组内,利用组播路由协议在IP核心网上为该组播组建立转发表项,VTEP接收到洪泛流量后,不仅在本地站点内洪泛,还会为其封装组播目的IP地址,封装后的报文根据已经建立的组播转发表项转发到远端VTEP。
图4-7 组播路由转发方式
序号 |
描述 |
1 |
VTEP1接收到本地站点内虚拟机发送的BUM报文后,判断数据帧所属的VXLAN,不仅通过该VXLAN除接收端口以外的所有本地端口将数据帧转发到本地站点,还会为其封装VXLAN头,UDP头,IP头(目IP地址为组播组IP)通过组播转发表项将其发送到远端VTEP。 |
2 |
IP核心网内,P设备根据建立的组播转发表项复制并转发该组播报文。 |
3 |
远端VTEP(VTEP2和VTEP3)接收到VXLAN报文后,解封装并将原始的数据帧在本地站点的指定VXLAN内洪泛。 |
(1) BUM: B:广播报文;U:未知单播;M:多播 (2)为了避免环路,VTEP从VXLAN隧道上接收到数据报文后,不在为其封装VXLAN和洪泛到其他VXLAN隧道。 |
数据中心网络中需要IP核心网络进行二层互联的站点较多时,采用洪泛代理的方式可以在没有组播协议的参与下,节省洪泛流量对核心网络带宽资源的占用。
在洪泛代理方式下,同一个VXLAN内所有的VTEP都与代理服务器建立隧道,VTEP接收到洪泛流量后,不仅在本地站点内转发,还会将其转发到代理服务器,然后由代理服务器转发到远端的VTEP。
图4-8 洪泛代理转发方式
序号 |
描述 |
1 |
VTEP1接收到本地站点内虚拟机发送的广播,多播,未知单播报文后,判断数据帧所属于的VXLAN,不仅在该VXLAN内除接收端口外的所有端口转发数据帧到本地站点,还会为其封住VXLAN头,UDP头,IP头(IP的目的地址为代理服务的地址)通过指定的隧道将其发送到洪泛代理服务器。 |
2 |
代理服务器接收到报文后,修改报文的源IP地址为服务器本身的IP地址,目的IP地址为其他VTEP(同属于一个VXLAN)的地址,并从不同的隧道转发到远端VTEP。 |
3 |
远端VTEP(VTEP2和VTEP3)接收到VXLAN报文后,解封装报文并将原始的数据帧在指定的VXLAN内洪泛。 |
(1) VTEP站点需要首先与代理服务器建立VXLAN隧道; (2) 为了避免环路,VTEP从VXLAN隧道上接收到数据报文后,不在为其封装VXLAN和洪泛到其他VXLAN隧道。 |
为了避免广播发送ARP流量占用核心网络带宽,VTEP从本地站点或VXLAN隧道接收到ARP请求或应答报文后,根据该报文在本地建立的ARP洪泛抑制表项。后续当VTEP接收到本地站点内虚拟机请求其他虚拟机MAC地址的ARP请求后,优先根据ARP洪泛抑制表项进行应答。如果没有对应的表项,则将ARP请求洪泛到核心网。
图4-9 ARP洪泛抑制
序号 |
描述 |
1 |
虚拟机VM 1发送ARP请求,获取VM 7的MAC地址 |
2 |
VTEP 1根据接收到的ARP请求,建立VM 1的ARP洪泛表项,并在对应的VXLAN内洪泛该ARP请求。 |
3 |
远端VTEP(VTEP2和VTEP3)解封装接收到的VXLAN报文,获取原始的ARP请求报文后,建立VM 1的ARP抑制表项,并在本地站点内指定的VXLAN内洪泛该ARP请求。 |
4 |
VM7 接收到ARP请求后,回复ARP应答报文。 |
5 |
VTEP2接收到ARP应答后,首先建立VM 7的ARP洪泛抑制表项,然后通过相应的VXLAN隧道将ARP应答发送给VTEP 1。 |
6 |
VTEP 1解封装VXLAN报文,获取原始的ARP应答,并根据应答建立VM 7的ARP洪泛抑制表项,然后将原始ARP应答表项转发给VM 1。 |
7 |
在VTEP1上建立ARP洪泛抑制表项后,虚拟机VM 4发送ARP请求后,获取VM 1和VM 7的MAC地址。 |
8 |
VTEP1收到ARP请求后,建立VM 4的ARP洪泛抑制表项,并查找ARP洪泛抑制表,根据已有的表项回复ARP应答报文,不会对ARP请求进行洪泛。 |
9 |
在VTEP3上建立ARP洪泛抑制表项后,虚拟机VM 10发送ARP请求,获取VM 2的MAC地址表项。 |
10 |
VTEP3 接收到ARP请求后,建立VM 10的ARP洪泛抑制表项,并查找ARP洪泛抑制表项,根据已有的表项回复ARP应答报文,不会对ARP进行洪泛处理。 |
VXLAN可以为分散的物理站点提供二层互联,如果要为VXLAN站点内的虚拟机提供三层业务,则需要在网络中部署VXLAN IP网关,以便在站点内的虚拟机通过VXLAN IP网关与外界网络或其他VXLAN网络内的虚拟机三层互联。VXLAN IP网关可以部署在独立的物理设备上,也可以部署在VTEP设备上。VXLAN IP网关部署在VTEP设备上时,又分为集中式VXLAN 网关和分布式VXLAN网关。
图 4-10 独立VXLAN IP网关
VXLAN IP网关部署在独立的物理设备上时,VXLAN IP网关作为物理站点接入VTEP,VXLAN业务对于网关设备透明,虚拟机通过VXLAN IP网关与三层网络中的节点通信时,虚拟机将三层报文封装成二层数据帧发送给VXLAN IP网关。
VTEP对数据帧进行VXLAN封装,并在IP核心网络上将其转发给远端的VTEP(与VXLAN IP网关连接的VTEP)。远端VTEP对VXLAN报文进行解封装并将原始的三层数据帧转发给VXLAN IP网关,VXLAN IP网关去掉原始报文的链路层头后,进行三层转发处理。
图4-11 集中式VXLAN IP网关
集中式VXLAN IP网关进行二层VXLAN业务终结的同时,还对内层封装的IP报文进行三层处理。与独立的VXLAN IP网关相比,该方式除了能节省设备外,VXLAN IP网关功能由VXLAN对应的三层接口承担,三层业务的部署和控制也更加灵活和方便。
网络间的三层通信流程如下:
图4-12 集中式VXLAN IP网关通信流程图
序号 |
描述 |
1 |
虚拟机(10.1.1.11)跨网段进行三层通信时,首先广播ARP请求 报文,用来获取VXLAN IP网关(10.1.1.1)的MAC地址 |
2 |
VTEP1收到ARP请求消息后,添加VXLAN封装并发送给所有的远端VTEP节点。 |
3 |
VTEP 3解封装VXLNA报文后,发现ARP请求的目的IP为VXLAN对应的本地网关IP地址,则学习10.1.1.11的ARP信息,并向虚拟机回应ARP应答消息。 |
4 |
VTEP1收到ARP应答消息后,将该消息转发给虚拟机。 |
5 |
虚拟机获取到网关的MAC地址后,为三层报文添加网关的MAC地址,通过VXLAN网络将数据帧发送给VTEP 3。 |
6 |
VTEP 3解封装VXLAN报文,并去掉联络处头,对内层封装的IP报文进行三层转发,将其发送给最终的目的节点。 |
7 |
目的节点回复的报文到达网关后,网关根据已经学习到的ARP表项,为报文封装链路层头并通过VXLAN网络将其发送给虚拟机。 |
属于不同VXLAN网络的虚拟机之间的通信过程与上述过程类似,不同之处在于一个VXLAN网络的集中式网关需要将报文转发给另一个VXLAN集中式网关,再由该集中式网关将报文转发给本地VXLAN内对应的虚拟机。 |
图4-13 集中式与分布式VXLANIP网关对比图
在不同子网互通(集中式网关)中,同一Leaf(Leaf1)下挂的不同网段VM(VM1和VM2)之间的通信,都需要在Spine上进行绕行,这样就导致Leaf与Spine之间的链路上,存在冗余的报文,额外占用了大量的带宽。同时,Spine作为VXLAN三层网关时,所有通过三层转发的终端租户的表项都需要在该设备上生成。但是,Spine的表项规格有限,当终端租户的数量越来越多时,容易成为网络瓶颈。
分布式网关的出现,很好的解决了这两个问题。
(1) 同Leaf节点下不同部门VM之间的通信
Leaf1作为VXLAN网络的VTEP,在Leaf1上部署VXLAN三层网关,即可实现同Leaf下不同部门VM之间的相互通信。此时,VM1和VM2互访时,流量只需要在Leaf1节点进行转发,不再需要经过Spine节点,从而节约了大量的带宽资源。
(2) 跨Leaf节点不同部门VM之间的通信
Leaf1和Leaf2作为VXLAN网络的VTEP,在Leaf1和Leaf2上部署VXLAN三层网关。两个VXLAN三层网关之间建立VXLAN隧道,从而实现跨Leaf节点不同部门VM之间的相互通信。
分布式VXLAN IP网络中,所有的分布式VXLANIP网关(GW)上都需要创建三层子接口,并在子接口上配置相同的IP地址,作为VXLAN内虚拟机的网关IP地址。在分布式VXLAN IP网关上还需要是时能ARP本地代理功能。边界网关上也需要创建虚接口的,并配置IP地址。
图4.14 分布式VXLAN IP网关流量转发流程图
以上图4-14所示,VM 1访问VM 4为例,说明相同VXLAN内不同站点的虚拟机通信过程(VM1的三层网关接口为VXLAN 10子接口,VM 4的网关接口为GW2上的VXLAN10子接口):
序号 |
描述 |
1 |
VM 1发送ARP请求消息,获取VM 4的MAC地址。 |
2 |
GW 1接收到ARP请求后,学习VM 1的ARP信息,并代理应答ARP请求,向VM1发送ARP应答,应答的MAC地址为虚接口的10的MAC地址。 |
3 |
VM 1学习到VM 4的MAC地址为GW 1的VXLAN10虚接口的MAC地址。 |
4 |
GW 1将接收到的ARP请求消息中的源MAC地址修改为VXLAN 10的虚接口的MAC地址,对消息进行VXLAN封装后,将其发送给VXLAN内所有的远端VTEP。 |
5 |
GW 2对VXLAN消息进行解封装后,学习VM 1的ARP消息(IP为10.1.1.11 MAC地址为GW 1上VXLAN 10虚接口的MAC地址, 出接口为其对应的Tunnel接口),并经ARP请求消息中的源MAC地址修改本地VXLAN 10子接口的MAC地址,在VXLAN 10的本地站点内进行广播。 |
6 |
VM 2收到ARP请求后,学习VM 1的ARP信息(IP为10.1.1.11 MAC地址为GW2上的VXLAN 10子接口的MAC地址),并发送ARP应答消息给GW 2。 |
7 |
GW 2从VM 4接收到ARP应答消息后,学习VM 4的ARP信息,将ARP应答消息总的源MAC地址修改本地VXLAN 10的子接口的MAC地址,并根据学习到ARP表项,为ARP应答消息封装VXLAN头后发送给GW 1。 |
8 |
GW 1对VXLAN报文进行解封装后,根据接收到的ARP应答消息学习VM 4的ARP信息(IP为10.1.1.12 MAC地址为GW 2上VXLAN 10子接口的MAC地址,出接口为其对应的Tunnel子接口)。 |
9 |
通过上述步骤完成ARP信息的学习,VM 1发送给VM 4的报文,根据ARP表项,首先发送给GW 1,GW 1对其进行VXLAN封装后发给GW 2;GW 2对其解封装,并将其发送给VM 4。 |
虚拟机想要为外部网络进行三层通信,需要在接入虚拟机的本地分布式VXLAN IP 网关上指定流量的下一跳为Border,可以通过静态路由或者策略路由来实现。
(1)在本地分布式VXLANIP网关上配置静态路由,指定路由的下一跳为Border上同一个VXLAN对应的虚接口的IP地址;
(2)在本地分布式VXLANIP网关上配置策略路由,指定下一跳为Border上同一个VXLAN对应的虚接口的IP地址;
序号 |
描述 |
1 |
VM 1广播发送ARP请求消息,获取网关10.1.1.1的MAC地址。 |
2 |
GW 1收到ARP请求消息后,学习VM 1的ARP信息,并向VM 1发送ARP应答,应答的MAC地址为VXLAN 10的虚接口MAC地址。 |
3 |
VM 1将访问外部网络的报文发送给GW 1。 |
4 |
GW 1收到报文后,根据路由判断报文的下一跳为10.1.1.2,GW 1在VXLAN 10内向本地站点和远端站点发送广播ARP请求消息,获取10.1.1.2的MAC地址。 |
5 |
Border对VXLAN报文进行解封装,学习GW 1的ARP信息,并通过VXLAN隧道回复ARP应答消息。 |
6 |
GW 1对VXLAN报文进行解封装,并获取到10.1.1.12的ARP信息。 |
7 |
GW 1根据获取到的信息为VM 1发送的报文封装链路层地址(10.1.1.12对应的MAC地址,并通过VXLAN隧道将报文发送给Border)。 |
8 |
Border对接收到的报文进行解封装后,对报文进行三层转发。 |
H3C针对VXLAN的实现方案在虚拟防火墙、路由器、交换机上略有差别,但是大体实现思路还是一致的,VXLAN的运行机制可以概括为:
(1) 发现远端VTEP,在VTEP之间建立VXLAN隧道,并将VXLAN隧道与VXLAN关联;
(2) 识别接收到的报文所属的VXLAN,以便将报文的源MAC地址学习到VXLAN对应的VSI,并在该VSI内转发报文;
(3) 学习虚拟机的MAC地址;
(4) 根据学习到的MAC地址表项转发报文。
进入系统视图 |
System-view |
|
开启L2VPN |
L2 enable |
|
创建VSI,进入VSI视图 |
Vsi vsi-name |
缺省情况下,不存在VSI |
创建VXLAN,并进入VXLAN视图 |
VXLAN VXLAN-id |
缺省情况下,不存在VXLAN,在一个VSI只能创建一个VXLAN,不同VSI下创建的VXLAN,其VXLAN ID不能相同。 |
创建VXLAN隧道,用户可以手工创建VXLAN隧道,也可以通过ENDP发现远端的VTEP后,自动创建VXLAN隧道。这里只是介绍手工方式创建VXLAN隧道。
手工方式创建VXLAN隧道时,隧道的源端地址和目的端地址需要分别手工指定为本端和远端VTEP接口的地址。在同一台设备上,VXLAN隧道模式下不同的Tunnel接口建议不要配置相同的远端地址和远端目的地址。
进入系统视图 |
System-view |
|
配置隧道的全局源地址 |
tunnel global source-address ip-address |
如果隧道下未配置源地址或源接口,则隧道会使用全局源地址作为隧道的源地址 |
创建模式为VXLAN隧道的Tunnel接口,并进入Tunnel接口视图 |
Interface tunnel tunnel-number mode VXLAN |
需要在Tunnel接口隧道两端配置相同的隧道模式,否则会造成报文传输失败。 |
配置隧道的源端地址或源接口 |
source { ipv-address | interface-type interface-number} |
如果设置的是隧道的源端地址,则该地址作为封装后的VXLAN报文额源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后的VXLAN报文的源地址。 |
配置隧道的目的端地址 |
destination ipv4-address |
缺省情况下,未指定隧道的目的端地址 隧道的目的端地址是对端设备上接口的IP地址,该地址将作为封装后VXLAN报文的目的地址。 |
VXLAN隧道和VXLAN为N:N的关系,一个VXLAN可以关联多条VXLAN隧道,一条VXLAN隧道可以关联多个VXLAN,这些VXLAN公用一条VXLAN隧道。VTEP根据VXLAN报文中的VXLAN ID来识别隧道传递报所属于的VXLAN。VTEP接收到某个VXLAN的洪泛流量后,如果采用单播路由洪泛方式,则VTEP将在与该VXLAN关联的所有VXLAN隧道上发送该流量,以便将流量转发给所有的远端VTEP;如果采用的是洪泛代理方式,VTEP通过与该VXLAN关联,通过flooding-proxy参数开启了洪泛代理功能的VXLAN隧道将洪泛流量转发给代理服务器,代理服务器再将流量转发给具体相应的VTEP设备。
进入系统视图 |
system-view |
|
进入VSI视图 |
vsi vsi-name |
|
进入VXLAN视图 |
VXLAN VXLAN-id |
|
配置VXLAN与VXLAN隧道关联 |
tunnel tunnel-numbrer 【flooding-proxy】 |
缺省情况下,VXLAN未关联VXLAN隧道,VTEP必须与相同的VXLAN内其他的VTEP建立VXLAN隧道,并与该VXLAN关联 如果指定了flooding-proxy参数,则VXLAN广播,组播,未知单播流量将通过该隧道洪泛到代理服务器,由代理服务器进行复制转发到其他远端VTEP。 |
将三层接口与VSI关联,从该接口上收到的报文,将通过查找关联VSI的MAC地址表进行转发。
进入系统视图 |
system-view |
|
进入三层接口视图 |
Interface interface-type interface-number |
|
将三层接口与VSI关联 |
xconnect vsi vsi-name |
缺省情况下,三层接口未关联VSI |
针对交换机,这点实现与路由器不同,在交换机上H3C提出了以太网服务实例的概念,将以太网服务实例与VSI关联,从接口收到的符合以太网服务实例匹配规则的报文,才通过查找关联VSI的MAC地址表进行转发,而其他不匹配报文按原有的转发流程进行转发。
以太网服务实例提供了多种报文匹配规则(包括接口接收到所有报文,根据VLAN Tag指定和Untag报文)。
进入系统视图 |
system-view |
|
|
进入二层接口视图 |
Interface interface-type interface-number |
|
|
创建以太网服务实例,并进入以太网服务实例视图 |
service-instance instance-id |
缺省情况系,不存在任何的以太网服务实例 |
|
配置以太网服务实例的报文匹配规则 |
匹配接口的所有报文 |
encapsulation default |
|
匹配任意VLAN标签或不携带VXLAN标签的报文 |
encapsulation {tagged | untagged} |
||
匹配携带指定外层VLAN标签的报文 |
Encapsulation s-vid vlan-id |
||
匹配指定外层和内层VXLAN标签 |
Encapsulation s-vid vlan-id c-vid vlan-id |
||
将以太网服务实例与VSI关联 |
xconnect vsi vsi-name 【access-mode {Ethernet | vlan}】 |
|
RouterA、RouterB、RouterC为与服务器连接的VTEP设备,虚拟机VM 1、 VM2、VM3同属于VXLAN 10。通过VXLAN实现不同站点的二层互联,确保虚拟机在站点之间进行迁移时用户流量不会中断。
图 5-1 VXLAN二层互通
Router A配置 |
||
1 |
给各接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 1.1.1.1 255.255.255.255 |
5 |
在Router A与B之间建立VXLAN隧道 |
Interface tunnel 1 mode VXLAN Source 1.1.1.1 Destination 2.2.2.2 |
6 |
Router A与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 1.1.1.1 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterA】vsi a 【RouterA-vsi-a】VXLAN 10 【RouterA-vsi-VXLAN-10】tunnel 1 【RouterA-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上关联VSI实例a |
【RouterA】interface ge1/0/1 【RouterA-ge1/0/1】vconnect vsi a |
Router B配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 2.2.2.2 255.255.255.255 |
5 |
在Router B与A之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 2.2.2.2 Destination 1.1.1.1 |
6 |
Router B与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 2.2.2.2 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterB】vsi a 【RouterB-vsi-a】VXLAN 10 【RouterB-vsi-VXLAN-10】tunnel 1 【RouterB-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上关联VSI实例a |
【RouterB】interface ge1/0/1 【RouterB-ge1/0/1】vconnect vsi a |
Router C配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 3.3.3.3 255.255.255.255 |
5 |
在Router C与A之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 3.3.3.3 Destination 1.1.1.1 |
6 |
Router C与B之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 3.3.3.3 destination 2.2.2.2 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterC】vsi a 【RouterC-vsi-a】VXLAN 10 【RouterC-vsi-VXLAN-10】tunnel 1 【RouterC-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上关联VSI实例a |
【RouterC】interface ge1/0/1 【RouterC-ge1/0/1】vconnect vsi a |
Router A,Router C为与服务器连接的VTEP设备,Router B为与广域网连接的集中式VXLANIP网关设备,Router E为广域网内的三层设备,虚拟机VM 1、VM2同属于VXLAN 10,通过VXLAN实现不同站点间的二层互联,并通过VXLAN IP网关与广域网三层互联。
图 5-2 VXLAN三层互通
配置IP地址和单播路由协议,并在VM1、VM2上指定网关地址10.1.1.1;在Router B和Router E上配置OSPF协议,并发布10.1.1.1/24和20.1.1.1/24的网段路由。
Router A配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 1.1.1.1 255.255.255.255 |
5 |
在Router A与B之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 1.1.1.1 Destination 2.2.2.2 |
6 |
Router A与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 1.1.1.1 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterA】vsi a 【RouterA-vsi-a】VXLAN 10 【RouterA-vsi-VXLAN-10】tunnel 1 【RouterA-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上关联VSI实例a |
【RouterA】interface ge1/0/1 【RouterA-ge1/0/1】vconnect vsi a |
Router B配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 2.2.2.2 255.255.255.255 |
5 |
在Router B与A之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 2.2.2.2 Destination 1.1.1.1 |
6 |
Router B与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 2.2.2.2 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterB】vsi a 【RouterB-vsi-a】VXLAN 10 【RouterB-vsi-VXLAN-10】tunnel 1 【RouterB-vsi-VXLAN-10】tunnel 2 |
8 |
创建VSI虚接口vsi-interface 1并为其配置IP地址,该IP地址作为VXLAN 10内虚拟机的网关地址 |
【RouterB】interface vsi-interface 1 【RouterB-vsi-interface1】ip address 10.1.1.1 255.255.255.0 |
9 |
VXLAN 10对应的VSI a实例与vsi-interface 1关联 |
【RouterB】vis a 【RouterB-vsi-a】getway vsi-interface 1 |
Router C配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 3.3.3.3 255.255.255.255 |
5 |
在Router C与A之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 3.3.3.3 Destination 1.1.1.1 |
6 |
Router C与B之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 3.3.3.3 destination 2.2.2.2 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterA】vsi a 【RouterA-vsi-a】VXLAN 10 【RouterA-vsi-VXLAN-10】tunnel 1 【RouterA-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上关联VSI实例a |
【RouterA】interface ge1/0/1 【RouterA-ge1/0/1】vconnect vsi a |
VTEP与虚拟机进行连接,需要识别从本地虚拟机内接收到的数据帧,在这点上H3C针对二层交换与路由器和虚拟防火墙上的实现不太一致。
(1) 在路由器和防火墙上VTEP将连接本地站点的三层接口或三层接口的子接口与VSI关联,VTEP从三层接口或三层子接口上接收数据帧后,查找与其关联的VSI,从而确定该数据帧关联的VXLAN。
(2) 在二层交换机上,提出了以太网服务实例(Server instance)的概念,将以太网服务实例与VSI关联,从而确认数据帧关联的VXLAN;在二层以太网接口上创建以太网服务实例,并定义一系列的匹配规则,用来匹配从二层以太网接口上接收到的数据帧。
将以太网服务实例与VSI关联后,从该接收接收到的,符合以太网服务实例报文匹配规则的报文,将通过查找关联VSI的MAC地址表进行转发。
进入系统视图 |
system-view |
|
进入二层以太网接口视图 |
Interface interface-type interface-number |
|
创建以太网服务实例 |
service-instance instance-id |
缺省情况下,不存在任何以太网服务实例。 |
匹配当前端口接收的所有报文 |
encapsulation default |
缺省情况下,未配置任何报文匹配规则,用户需要选择一种匹配规则进行匹配。 |
匹配携带任意VLAN标签或不携带VLAN标签的报文 |
encapsulation {tagged | untagged} |
|
匹配携带指定外层VLAN标签的报文 |
Encapsulation s-vid vlan-id |
|
匹配携带指定外层和内存VLAN标签的报文 |
Encapsulation s-vid vlan-id c-vid vlan-id |
|
将以太网服务实例与VSI关联 |
Xconnect vsi vsi-name 【access-mode {Ethernet | vlan}】 |
缺省情况下,以太网服务实例没有与VSI关联 如果通过encapsulate 命令配置的匹配规则为default,tagged,untagged,则本命令指定的接入模式不会生效,均按照ethernet接入模式处理报文。 |
Switch-A、Switch-B、Switch-C为与服务器连接的VTEP设备,虚拟机VM1,VM2,VM3同属于VXLAN 10.通过VXLNA实现不同站点的二层互通,确保虚拟机在站点间迁移时用户流量不会中断。
图 5-3 服务实例交换示例
Switch A配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 1.1.1.1 255.255.255.255 |
5 |
在Router A与B之间建立VXLAN隧道 |
Interface tunnel 1mode VXLAN Source 1.1.1.1 Destination 2.2.2.2 |
6 |
Router A与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 1.1.1.1 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterA】vsi a 【RouterA-vsi-a】VXLAN 10 【RouterA-vsi-VXLAN-10】tunnel 1 【RouterA-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上创建以太网服务实例1000,该实例用来匹配VLAN 2的数据帧 |
【SwitchA】interface ge1/0/1 【SwitchA -ge1/0/1】service-instance 1000 【SwitchA -ge1/0/1-srv1000】encapsulate s-vid 2 |
8 |
配置以太网服务实例1000与VSI实例a关联 |
【SwitchA -ge1/0/1-srv1000】xconnect vsi a |
Switch B配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 2.2.2.2 255.255.255.255 |
5 |
在Router B与A之间建立VXLAN隧道 |
interface tunnel 1 mode VXLAN source 2.2.2.2 destination 1.1.1.1 |
6 |
Router B与C之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 2.2.2.2 destination 3.3.3.3 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterB】vsi a 【RouterB-vsi-a】VXLAN 10 【RouterB-vsi-VXLAN-10】tunnel 1 【RouterB-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上创建以太网服务实例1000,该实例用来匹配VLAN 2的数据帧 |
【SwitchB】interface ge1/0/1 【SwitchB -ge1/0/1】service-instance 1000 【SwitchB -ge1/0/1-srv1000】encapsulate s-vid 2 |
8 |
配置以太网服务实例1000与VSI实例a关联 |
【SwitchB -ge1/0/1-srv1000】xconnect vsi a |
Switch C配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例和VXLAN 10 |
vsi a Vlxan 10 |
4 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 3.3.3.3 255.255.255.255 |
5 |
在Router C与A之间建立VXLAN隧道 |
interface tunnel 1 mode VXLAN source 3.3.3.3 destination 1.1.1.1 |
6 |
Router C与B之间建立VXLAN隧道 |
Interface tunnel 2 mode VXLAN source 3.3.3.3 destination 2.2.2.2 |
7 |
配置Tunnel1和Tunnel2与VXLAN10关联 |
【RouterC】vsi a 【RouterC-vsi-a】VXLAN 10 【RouterC-vsi-VXLAN-10】tunnel 1 【RouterC-vsi-VXLAN-10】tunnel 2 |
8 |
在接入服务器接口ge1/0/1上创建以太网服务实例1000,该实例用来匹配VLAN 2的数据帧 |
【SwitchC】interface ge1/0/1 【SwitchC -ge1/0/1】service-instance 1000 【SwitchC -ge1/0/1-srv1000】encapsulate s-vid 2 |
8 |
配置以太网服务实例1000与VSI实例a关联 |
【SwitchC -ge1/0/1-srv1000】xconnect vsi a |
在VXLAN网络中,ENDP(EnhancedNeighbor Discovery Protocol,增强的邻居发现协议)用来自动发现VXLAN网络中的VTEP,并在各个VTEP之间自动创建VXLAN隧道。
ENDP可以划分为多个实例,ENDP实例通过NetworkID来标示,只有属于同一个ENDP实例的VTEP之间才可以相互发现,创建VXLAN隧道。
ENDP协议定义了两个角色:
(1) ENDS(EnhanceNeighbor Discovery Server,增强的邻居发现服务器):用来维护同一个ENDP实例中的所有邻居信息(IP地址等)。
(2) ENDC(Enhance NeighborDiscovery Client,增强的邻居发现客户端):通过ENDS完成邻居的学习,并与邻居建立VXLAN隧道。
其基本工作原理:ENDS通过接收ENDC的注册请求报文来学习ENDC的信息,同时通过应答报文来向ENDC发布同一个ENDP实例中的所有的ENDC信息,ENDC收到应答后报文后,与同一个ENDP实例中的其他ENDC建立VXLNA隧道。ENDS同时也作为一个ENDC,与其他ENDC建立VXLAN隧道。
ENDP协议中用到了3个定时器:探测定时器、注册定时器、老化定时器
(1) 探测定时器:ENDC请求加入VXLAN网络时会启用探测定时器,该定时器以5秒的时间间隔定时向ENDS发送注册报文,收到ENDS应答报文后会停止探测定时器,开启注册定时器。
(2) 注册定时器:ENDC加入VXLAN网络后,为了通告自己正常工作,会定时向ENDS发送注册报文,该定时器的默认时间间隔为15秒,用户可以根据实际需要来进行调整。如果ENDC连续发送5个ENDC报文,都未收到ENDS的应答,则认为网络故障,此时需要清除之前学习到的邻居信息,同时重启探测定时器。
(3) 老化定时器:ENDC在向ENDS发送注册报文中携带注册时间间隔,ENDS会记录该时间间隔。ENDC加入VXLAN网络后,如果ENDS在5倍的注册时间间隔未收到ENDC注册报文,则认为ENDC出现了故障,需要把ENDC对应的VTEP从VXLAN网络清除去。
为了提供网络安全,防止恶意站点注册到VXLAN网络中,可以使能ENDP认证功能来防止恶意站点加入VXLAN网络,只有本端与对端设备上都未配置ENDP认证功能,或者两端都配置了认证功能,并且认证秘钥相同,才能在两端之间建立VXLAN隧道。
使能ENDP认证功能后,发送ENDP报文的设备会使用配置的秘钥和MD5算法对报文进行摘要运算,然后把运算结果放到报文的认证字段,对端设备收到ENDP报文后,利用本端配置的秘钥和MD5算法对报文进行摘要运算,然后比较运算结果与报文认证字段携带的信息是否一致,如果一致则认为报文是合法的,否则认为是非法报文。
(1)配置ENDS
进入系统视图 |
system-view |
|
创建模式为NVE隧道的Tunnel接口,并进入Tunnel接口视图 |
Interface tunnel tunnel-number mode nve |
缺省情况下不存在Tunnel接口。 |
配置隧道的Network ID |
network-id network-id |
缺省情况下,未配置隧道的network Id |
配置隧道的源IP地址或接口 |
source {ipv4-address | interface-type interface-number} |
缺省情况下,未设备隧道的源地址或源端口, NVE隧道的源地址作为本地ENDC的地址注册到ENDS,如果设置的是源接口,则隧道的源地址为接口的主IP地址。 |
开启ENDS功能 |
VXLAN neighbor-discovery server enable |
缺省情况下,未开启ENDS功能, 开启接口的ENDS功能,会同时开启该接口的ENDC功能(该ENDC对应的ENDS地址为该接口的源地址) |
开启NEDP认证功能 |
VXLAN neighbor-discovery authentication {cipher | simple} string |
|
(2)配置ENDC
进入系统视图 |
system-view |
|
创建模式为NVE隧道的Tunnel接口,并进入Tunnel接口视图 |
interface tunnel tunnel-number mode nve |
缺省情况下不存在Tunnel接口。 |
配置隧道的Network ID |
network-id network-id |
缺省情况下,未配置隧道的network id |
配置隧道的源IP地址或接口 |
source {ipv4-address | interface-type interface-number} |
缺省情况下,未设备隧道的源地址或源端口, NVE隧道的源地址作为本地ENDC的地址注册到ENDS,如果设置的是源接口,则隧道的源地址为接口的主IP地址。 |
开启接口的ENDC功能,并指定ENDS的地址 |
VXLAN neighbor-discovery client enable server-ip |
缺省情况下,ENDC功能处于关闭状态。 |
开启ENDP认证功能 |
VXLAN neighbor-discovery authentication { cipher | simple } string |
缺省情况下,处于未使能状态 |
配置ENDC向ENDS注册的时间间隔 |
VXLAN neighbor-discovery client register-interval interval |
缺省情况下,ENDC向ENDS注册的时间间隔为15秒 |
VXLAN IS-IS协议主要有自动关联VXLAN隧道和VXLAN,VXLAN MAC地址同步以及VXLAN主机路由信息(ARP)同步功能。
(1)为VXLAN IS-IS指定预留VXLAN
进入系统视图 |
system-view |
|
配置IS-IS协议使用的保留VXLAN |
reserved vxlan vxlan-id |
缺省情况下,未指定IS-IS协议使用的保留VXLAn。 |
(2)自动关联VXLAN与VXLAN隧道
VTEP将在所有VXLAN隧道上通告VXLANIS-IS发布的VXLAN ID信息,以便将VXLAN和VXLAN隧道关联。
进入系统视图 |
system-view |
|
创建VXLAN IS-IS进程,并进入VXLAN IS-IS视图 |
vxlan-isis |
缺省情况下,未创建VXLAN IS-IS进程。 |
开启VXLNA IS-IS自动协商功能 |
negotiate-vni enable |
|
(3)VTEP可以通过VXLANIS-IS 协议发布本地的MAC地址信息,并能接收其他VTEP发布的远端MAC地址信息。
进入系统视图 |
system-view |
|
创建VXLAN IS-IS进程,并进入VXLAN IS-IS视图 |
vxlan-isis |
缺省情况下,未创建VXLAN IS-IS进程。 |
开启VXLNA IS-IS MAC地址同步功能 |
mac-synchronization enable |
缺省情况下,VXLAN IS-IS的MAC地址同步功能处于关闭状态。 |
通过VXLAN IS-IS发布本地MAC地址信息时,一个LSP报文携带了本地所有的MAC地址信息,如果LSP报文长度超过了1400字节,LSP报文需要分片后在发送,这些LSP分片构成了一个LSP分片集,每个LSP分片集最多有256个LSP分片,所能携带的最大MAC地址数目为55X2(10)。如果本地MAC地址数目超过55X2(10)时,可以创建VXLANIS-IS虚拟系统来扩展LSP分片数量,以此来增加系统所能发布的MAC地址数量。
(4)VXLAN IS-IS同步主机路由
进入系统视图 |
system-view |
|
创建VXLAN IS-IS进程,并进入VXLAN IS-IS视图 |
vxlan-isis |
缺省情况下,未创建VXLAN IS-IS进程。 |
开启VXLNA IS-IS 主机路由信息同步功能 |
host-synchronization enable |
缺省情况下,VXLAN IS-IS的主机路由信息同步功能处于关闭状态。 |
Device-A Device-B、Device-C为与服务器连接的VTEP设备,VM1和VM5属于VXLAN 10000和VLAN2,VM2和VM6属于VXLAN10001和VLAN3,VM3和VM7属于VXLAN10002和VLAN4,VM4和VM8属于VXLAN10003和VLAN 5。通过VXLAN实现不同站点间的二层互联,确保虚拟机在站点之间进行前移时用户的访问流量不会中断。
图 6-1 VXLAN自动发现举例
Router A配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例a和VXLAN 10000 |
vsi a vlxan 10000 |
4 |
创建VSI实例b和VXLAN 10001 |
vsi b vxlan 10001 |
5 |
创建VSI实例c和VXLAN 10002 |
vsi c vxlan 10002 |
6 |
创建VSI实例d和VXLAN 10003 |
vsi c vxlan 10003 |
7 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 1.1.1.1 255.255.255.255 |
8 |
创建模式为NVE的隧道接口Tunnel 0,指点远端地址为1.1.1.1,network ID为 1,并开启ENDS功能 |
【DeviceA】Interface tunnel 0 mode nve 【DeviceA-Tunnel0】source 1.1.1.1 【DeviceA-Tunnel0】network-id 1 【DeviceA-Tunnel0】vxlan neighbor-discovery server enable |
9 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.1,该子接口用来处理VLAN2的数据帧,并将其余a关联 |
【DeviceA】interface ge1/0/1.1 【DeviceA-GE1/0/1.1】vlan-type dot1q vid 2 【DeviceA-GE1/0/1.1】xconnect vsi a |
10 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.2,该子接口用来处理VLAN3的数据帧,并将其余b关联 |
【DeviceA】interface ge1/0/1.2 【DeviceA-GE1/0/1.2】vlan-type dot1q vid 3 【DeviceA-GE1/0/1.2】xconnect vsi b |
11 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.3,该子接口用来处理VLAN3的数据帧,并将其余c关联 |
【DeviceA】interface ge1/0/1.3 【DeviceA-GE1/0/1.3】vlan-type dot1q vid 4 【DeviceA-GE1/0/1.3】xconnect vsi c |
12 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.4,该子接口用来处理VLAN3的数据帧,并将其余d关联 |
【DeviceA】interface ge1/0/1.4 【DeviceA-GE1/0/1.4】vlan-type dot1q vid 5 【DeviceA-GE1/0/1.4】xconnect vsi d |
13 |
启动VXLNA IS-IS进程,开启VXLAN IS-IS的VXLAN隧道自动协商和MAC地址同步功能 |
【DeviceA】vxlan-isis 【DeviceA-vxlan-isis】negotiate-vni enable 【DeviceA-vxlan-isis】mac-synchronization enable |
Router B配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例a和VXLAN 10000 |
vsi a vlxan 10000 |
4 |
创建VSI实例b和VXLAN 10001 |
vsi b vxlan 10001 |
5 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 2.2.2.2 255.255.255.255 |
6 |
创建模式为NVE的隧道接口Tunnel 0,指点远端地址为1.1.1.1,network ID为 1,并开启ENDS功能 |
【DeviceB】Interface tunnel 0 mode nve 【DeviceB-Tunnel0】source 2.2.2.2 【DeviceB-Tunnel0】network-id 1 【DeviceB-Tunnel0】vxlan neighbor-discovery client enable 1.1.1.1 |
7 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.1,该子接口用来处理VLAN2的数据帧,并将其余a关联 |
【DeviceB】interface ge1/0/1.1 【DeviceB-GE1/0/1.1】vlan-type dot1q vid 2 【DeviceB-GE1/0/1.1】xconnect vsi a |
8 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.2,该子接口用来处理VLAN3的数据帧,并将其余b关联 |
【DeviceB】interface ge1/0/1.2 【DeviceB-GE1/0/1.2】vlan-type dot1q vid 3 【DeviceB-GE1/0/1.2】xconnect vsi b |
9 |
启动VXLNA IS-IS进程,开启VXLAN IS-IS的VXLAN隧道自动协商和MAC地址同步功能 |
【DeviceB】vxlan-isis 【DeviceB-vxlan-isis】negotiate-vni enable 【DeviceB-vxlan-isis】mac-synchronization enable |
Router C配置 |
||
1 |
给个接口配置IP地址和子网掩码,并在IP核心网络内配置OSPF协议。 |
|
2 |
开启L2VPN的能力 |
system-view l2 enable |
3 |
创建VSI实例a和VXLAN 10000 |
vsi a vlxan 10002 |
4 |
创建VSI实例b和VXLAN 10001 |
vsi b vxlan 10004 |
5 |
配置接口loopback0的IP地址,作为隧道的源IP地址 |
Interface loopback 0 ip address 3.3.3.3 255.255.255.255 |
6 |
创建模式为NVE的隧道接口Tunnel 0,指点远端地址为1.1.1.1,network ID为 1,并开启ENDS功能 |
【DeviceB】Interface tunnel 0 mode nve 【DeviceB-Tunnel0】source 3.3.3.3 【DeviceB-Tunnel0】network-id 1 【DeviceB-Tunnel0】vxlan neighbor-discovery client enable 1.1.1.1 |
7 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.1,该子接口用来处理VLAN2的数据帧,并将其余a关联 |
【DeviceB】interface ge1/0/1.1 【DeviceB-GE1/0/1.1】vlan-type dot1q vid 4 【DeviceB-GE1/0/1.1】xconnect vsi a |
8 |
在接入服务器接口GE1/0/1上创建子接口GE1/0/1.2,该子接口用来处理VLAN3的数据帧,并将其余b关联 |
【DeviceB】interface ge1/0/1.2 【DeviceB-GE1/0/1.2】vlan-type dot1q vid 5 【DeviceB-GE1/0/1.2】xconnect vsi b |
9 |
启动VXLNA IS-IS进程,开启VXLAN IS-IS的VXLAN隧道自动协商和MAC地址同步功能 |
【DeviceB】vxlan-isis 【DeviceB-vxlan-isis】negotiate-vni enable 【DeviceB-vxlan-isis】mac-synchronization enable |
目前主要有两种方式:单机方式和控制器方式两种来部署VXLAN网络。
(1) 单机方式:传统网络部署方式,按照网络规划登陆到每台设备上进行部署,云计算数据中心中,此方式无法协同云平台实现网络的自动化部署。
(2) 控制器方式:在大二层网络中,为了方便控制与部署引入了控制器,控制器是统一的网络控制平台,实现网络资源统一协调和管理,协同云平台实现业务和网络的自动化部署。
略
SNC控制器方式是指通过SNC控制器动态的建立VXLAN隧道,并通过Openflow协议向转发器下发相应的流表,以指导转发生成VXLAN隧道,来控制报文在隧道中的转发,这种方式下,设备仅作为转发器,设备只需要与控制器建立openflow通道,而无需进行任何的VXLAN配置。
图 8-1 SNC控制器+ VXLAN解决方案
SNC控制器北向通过NetMatrix与Neutron连接,获得用户虚拟网络的信息,控制器根据用户虚拟网络信息,进行动态的计算生成网络相关的配置信息及流表信息,并自动映射到物理网络。
业务呈现层 |
面向运营商、企业,租户,提供业务灵活定制界面,租户通过Portal定制业务,包括网络业务和主机业务。 |
协同层 |
Nova、Neutron、Cinder属于云平台,是标准开发的OpenStack框架,可以实现存储,计算,和网络资源的协同。 网络业务:Neutron负责分配Network ID,子网ID,VNI等资源,并保存至Neutron DB。 主机业务: Nova负责虚拟网络的管理,确定VM IP和VM MAC以及VM所属的服务器ID,并通告给Neutron。 Neutron实现业务与网络ID的关联,确定VM IP和VM MAC和VNI,port VM所属的服务器ID,NVEIP映射关系。 Cinder负责分配存储资源。 |
网络控制层 |
由NetMatrix网络系统和控制器组成,完成网络建模和网络实例化。 NetMatrix通过NETCONF协议与控制器建立通信通道,实现网络配置,信息采集和规划结果下发,通过API连接Neutron实现业务快速定制和自动发放。 控制器:通过openflow协议与转发器建立通信通道,负责集中管理转发,实现统一管理物理和虚拟网络,所有的路径计算与管理都是由控制独立完成。 |
基础网络 |
物理网络和虚拟网络统一规划: 支持基于硬件的VXLAN网络提高业务性能; 支持对传统VLAN网络的兼容 转发器只负责数据报文转发 |
通过云平台,控制器可以及时感知终端租户的状态,获得用户虚拟网络信息。如图8-2所示,终端租户上线后,控制器根据从云平台获得虚拟网络信息进行计算,生成网络相关配置信息和流表,并自动映射到物理网络。
图8-2 控制器与转发器数据同步
控制器通过NETCONF协议与NMS建立连接后,用户可以通过NMS配置控制器,在控制器上创建NVE,指定VTEP的源,目的IP地址,配置静态MAC地址和ARP表项。由此在控制器上生成静态MAC地址表项或ARP表项。
转发器和控制之间通过openflow通道建立连接后,转发器会主动将自身节点信息,接口信息上报给控制器。而控制器将静态MAC地址表项和ARP表项下发给转发器,控制器通过openflow管理转发器上的静态MAC地址和ARP表项。