参考资料:华三的VXLAN配置指导http://www.h3c.com/cn/d_202001/1257198_30005_0.htm#_Toc28608881
VXLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)是基于IP网络、采用“MAC in UDP”封装形式的二层VPN技术。VXLAN可以基于已有的服务提供商或企业IP网络,为分散的物理站点提供二层互联,并能够为不同的租户提供业务隔离。VXLAN主要应用于数据中心网络。
VXLAN具有如下特点:
· 支持大量的租户:使用24位的标识符,最多可支持2的24次方(16777216)个VXLAN,使支持的租户数目大规模增加,解决了传统二层网络VLAN资源不足的问题。
· 易于维护:基于IP网络组建大二层网络,使得网络部署和维护更加容易,并且可以充分地利用现有的IP网络技术,例如利用等价路由进行负载分担等;只有IP核心网络的边缘设备需要进行VXLAN处理,网络中间设备只需根据IP头转发报文,降低了网络部署的难度和费用。
目前,设备只支持基于IPv4网络的VXLAN技术,不支持基于IPv6网络的VXLAN技术。
VXLAN网络模型
VXLAN技术将已有的三层物理网络作为Underlay网络,在其上构建出虚拟的二层网络,即Overlay网络。Overlay网络通过封装技术、利用Underlay网络提供的三层转发路径,实现租户二层报文跨越三层网络在不同站点间传递。对于租户来说,Underlay网络是透明的,同一租户的不同站点就像工作在一个局域网中。
如图所示,VXLAN的典型网络模型中包括如下几部分:
1) VM(Virtual Machine,虚拟机):在一台服务器上可以创建多台虚拟机,不同的虚拟机可以属于不同的VXLAN。属于相同VXLAN的虚拟机处于同一个逻辑二层网络,彼此之间二层互通;属于不同VXLAN的虚拟机之间二层隔离。VXLAN通过VXLAN ID来标识,VXLAN ID又称VNI(VXLAN Network Identifier,VXLAN网络标识符)。
2) VTEP(VXLAN Tunnel End Point,VXLAN隧道端点):VXLAN的边缘设备。VXLAN的相关处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN、基于VXLAN对数据帧进行二层转发、封装/解封装报文等。VTEP可以是一台独立的物理设备,也可以是虚拟机所在的服务器。
3) VXLAN隧道:两个VTEP之间的点到点逻辑隧道。VTEP为数据帧封装VXLAN头、UDP头和IP头后,通过VXLAN隧道将封装后的报文转发给远端VTEP,远端VTEP对其进行解封装。
4) 核心设备:IP核心网络中的设备。核心设备不参与VXLAN处理,仅需要根据封装后报文的目的IP地址对报文进行三层转发。
5) VSI(Virtual Switch Instance,虚拟交换实例):VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例。VSI可以看做是VTEP上的一台基于VXLAN进行二层转发的虚拟交换机,它具有传统以太网交换机的所有功能,包括源MAC地址学习、MAC地址老化、泛洪等。VSI与VXLAN一一对应。
VXLAN报文
VXLAN报文的封装格式为:在原始二层数据帧外添加8字节VXLAN头、8字节UDP头和20字节IP头。其中,UDP头的目的端口号为VXLAN UDP端口号(缺省为4789)。VXLAN头主要包括两部分:
1) 标记位:“I”位为1时,表示VXLAN头中的VXLAN ID有效;为0,表示VXLAN ID无效。其他位保留未用,设置为0。
2) VXLAN ID:用来标识一个VXLAN网络,长度为24比特。
VXLAN运行机制
(1) 识别接收到的报文所属的VXLAN,以便将报文的源MAC地址学习到VXLAN对应的VSI,并在该VSI内转发该报文。
(2) 学习虚拟机的MAC地址。
(3) 根据学习到的MAC地址表项转发报文。
VTEP在VXLAN内转发单播流量
1. 站点内流量
对于站点内流量,VTEP判断出报文所属的VSI后,根据目的MAC地址查找该VSI的MAC地址表,从相应的本地接口转发给目的VM。
站点内单播流量转发如图所示,VM 1(MAC地址为MAC 1)发送以太网帧到VM 4(MAC地址为MAC 4)时,VTEP 1从接口XGE1/0/1收到该以太网帧后,判断该数据帧属于VSI A(VXLAN 10),查找VSI A的MAC地址表,得到MAC 4的出接口为XGE1/0/2,所在VLAN为VLAN 10,则将以太网帧从接口XGE1/0/2的VLAN 10内发送给VM 4。
2. 站点间流量
站点间单播流量转发如图所示,以VM 1(MAC地址为MAC 1)发送以太网帧给VM 7(MAC地址为MAC 7)为例,站点间单播流量的转发过程为:
(1) VM 1发送以太网数据帧给VM 7,数据帧的源MAC地址为MAC 1,目的MAC为MAC 7,VLAN Tag为2。
(2) VTEP 1从接口XGE1/0/1(所在VLAN为VLAN 2)收到该数据帧后,判断该数据帧属于VSI A(VXLAN 10),查找VSI A的MAC地址表,得到MAC 7的出端口为Tunnel1。
(3) VTEP 1为数据帧封装VXLAN头、UDP头和IP头后,将封装好的报文通过VXLAN隧道Tunnel1、经由P设备发送给VTEP 2。
(4) VTEP 2接收到报文后,根据报文中的VXLAN ID判断该报文属于VXLAN 10,并剥离VXLAN头、UDP头和IP头,还原出原始的数据帧。
(5) VTEP 2查找与VXLAN 10对应的VSI A的MAC地址表,得到MAC 7的出端口为XGE1/0/1(所在VLAN为VLAN 20)。
泛洪流量
泛洪流量包括组播、广播和未知单播流量。根据复制方式的不同,流量泛洪方式分为单播路由方式(头端复制)、组播路由方式(核心复制)和泛洪代理方式(服务器复制)三种。
1. 单播路由方式(头端复制)
在单播路由方式下,VTEP负责复制报文,采用单播方式将复制后的报文通过本地接口发送给本地站点,并通过VXLAN隧道发送给VXLAN内的所有远端VTEP。
单播路由方式转发如图,单播路由的泛洪流量转发过程为:
(1) VTEP 1接收到本地虚拟机发送的组播、广播和未知单播数据帧后,判断数据帧所属的VXLAN,通过该VXLAN内除接收接口外的所有本地接口和VXLAN隧道转发该数据帧。通过VXLAN隧道转发数据帧时,需要为其封装VXLAN头、UDP头和IP头,将泛洪流量封装在多个单播报文中,发送到VXLAN内的所有远端VTEP。
(2) 远端VTEP(VTEP 2和VTEP 3)接收到VXLAN报文后,解封装报文,将原始的数据帧在本地站点的指定VXLAN内泛洪。为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。
2. 组播路由方式(核心复制)
数据中心网络中需要通过IP核心网络进行二层互联的站点较多时,采用组播路由方式可以节省泛洪流量对核心网络带宽资源的占用。
在组播路由方式下,同一个VXLAN内的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)在IP核心网上为该组播组建立组播转发表项。VTEP接收到泛洪流量后,不仅在本地站点内泛洪,还会为其封装组播目的IP地址,封装后的报文根据已建立的组播转发表项转发到远端VTEP。
组播路由方式转发如图,组播路由的泛洪流量转发过程为:
(1) VTEP 1接收到本地虚拟机发送的组播、广播和未知单播数据帧后,判断数据帧所属的VXLAN,不仅通过该VXLAN内除接收接口外的所有本地接口将数据帧转发到本地站点,还会为其封装VXLAN头、UDP头和IP头(目的IP地址为组播地址)通过某个设备的组播转发表项将其发送到远端VTEP。
(2) 在IP核心网内,P设备根据已经建立的组播转发表项复制并转发该组播报文。
(3) 远端VTEP(VTEP 2和VTEP 3)接收到VXLAN报文后,解封装报文,将原始的数据帧在本地站点的指定VXLAN内泛洪。为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。
3. 泛洪代理方式(服务器复制)
数据中心网络中需要通过IP核心网络进行二层互联的站点较多时,采用泛洪代理方式可以在没有组播协议参与的情况下,节省泛洪流量对核心网络带宽资源的占用。
在泛洪代理方式下,同一个VXLAN内的所有VTEP都通过手工方式与代理服务器建立隧道。VTEP接收到泛洪流量后,不仅在本地站点内泛洪,还会将其发送到代理服务器,由代理服务器转发到其他远端VTEP。
泛洪代理方式转发如图,泛洪代理的流量转发过程为:
(1) VTEP 1接收到本地虚拟机发送的组播、广播和未知单播数据帧后,判断数据帧所属的VXLAN,不仅通过该VXLAN内除接收接口外的所有本地接口将数据帧转发到本地站点,还会为其封装VXLAN头、UDP头和IP头(目的IP地址为泛洪代理服务器地址)通过指定的隧道将其发送到泛洪代理服务器。
(2) 泛洪代理服务器收到报文后,修改报文的IP头,源地址为服务器本身,目的IP地址为其余VTEP地址,通过不同的隧道发送到远端VTEP。
(3) 远端VTEP(VTEP 2和VTEP 3)接收到VXLAN报文后,解封装报文,将原始的数据帧在本地站点的指定VXLAN内泛洪。为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。
目前泛洪代理方式主要用于SDN网络,使用虚拟服务器作为泛洪代理服务器。采用泛洪代理方式时,需要在VTEP上进行如下配置:
· 使用vxlan tunnel mac-learning disable命令关闭远端MAC地址自动学习功能,采用SDN控制器下发的MAC地址表项进行流量转发。
· 在网络侧接口上使用undo mac-address static source-check enable命令关闭报文入接口与静态MAC地址表项匹配检查功能。当VTEP设备为IRF设备时,成员设备间互连的IRF端口上也需要关闭报文入接口与静态MAC地址表项匹配检查功能。
ARP泛洪抑制
为了避免广播发送的ARP请求报文占用核心网络带宽,VTEP从本地站点或VXLAN隧道接收到ARP请求和ARP应答报文后,根据该报文在本地建立ARP泛洪抑制表项。后续当VTEP收到本站点内虚拟机请求其它虚拟机MAC地址的ARP请求时,优先根据ARP泛洪抑制表项进行代答。如果没有对应的表项,则将ARP请求泛洪到核心网。ARP泛洪抑制功能可以大大减少ARP泛洪的次数。
ARP泛洪抑制如图,ARP泛洪抑制的处理过程如下:
(1) 虚拟机VM 1发送ARP请求,获取VM 7的MAC地址。
(2) VTEP 1根据接收到的ARP请求,建立VM 1的ARP泛洪抑制表项,并在VXLAN内泛洪该ARP请求(以单播路由泛洪方式为例)。
(3) 远端VTEP(VTEP 2和VTEP 3)解封装VXLAN报文,获取原始的ARP请求报文后,建立VM 1的ARP泛洪抑制表项,并在本地站点的指定VXLAN内泛洪该ARP请求。
(4) VM 7接收到ARP请求后,回复ARP应答报文。
(5) VTEP 2接收到ARP应答后,建立VM 7的ARP泛洪抑制表项,并通过VXLAN隧道将ARP应答发送给VTEP 1。
(6) VTEP 1解封装VXLAN报文,获取原始的ARP应答,并根据该应答建立VM 7的ARP泛洪抑制表项,之后将ARP应答报文发送给VM 1。
(7) 在VTEP 1上建立ARP泛洪抑制表项后,虚拟机VM 4发送ARP请求,获取VM 1或VM 7的MAC地址。
(8) VTEP 1接收到ARP请求后,建立VM 4的ARP泛洪抑制表项,并查找本地ARP泛洪抑制表项,根据已有的表项回复ARP应答报文,不会对ARP请求进行泛洪。
(9) 在VTEP 3上建立ARP泛洪抑制表项后,虚拟机VM 10发送ARP请求,获取VM 1的MAC地址。
(10) VTEP 3接收到ARP请求后,建立VM 10的ARP泛洪抑制表项,并查找本地ARP泛洪抑制表项,根据已有的表项回复ARP应答报文,不会对ARP请求进行泛洪。
配置VXLAN(粗略步骤)
1) 创建VSI和VXLAN
操作步骤如下:
进入系统视图 system-view
开启L2VPN功能 l2vpn enable
创建VSI,并进入VSI视图 vsi vsi-name
开启VSI undo shutdown
配置VSI内的最大带宽 bandwidth bandwidth
配置VSI的广播、组播或未知单播抑制带宽 restrain { broadcast | multicast | unknown-unicast } bandwidth
开启VSI的MAC地址学习功能 mac-learning enable
创建VXLAN,并进入VXLAN视图 vxlan vxlan-id。在一个VSI下只能创建一个VXLAN。不同VSI下创建的VXLAN,其VXLAN ID不能相同
2) 创建VXLAN隧道
手工创建VXLAN隧道时,隧道的源端地址和目的端地址需要分别手工指定为本地和远端VTEP的接口地址。
在同一台设备上,VXLAN隧道模式的不同Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
操作步骤如下:
进入系统视图 system-view
配置VXLAN隧道的全局源地址 tunnel global source-address ip-address。如果隧道下未配置源地址或源接口,则隧道会使用全局源地址作为隧道的源地址
创建模式为VXLAN隧道的Tunnel接口,并进入Tunnel接口视图:interface tunnel tunnel-number mode vxlan。在隧道的两端应配置相同的隧道模式,否则会造成报文传输失败
配置隧道的源端地址或源接口:source { ipv4-address | interface-type interface-number }。如果设置的是隧道的源端地址,则该地址将作为封装后VXLAN报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后VXLAN报文的源IP地址。采用VXLAN组播路由泛洪方式时,VXLAN隧道的源接口不能是Loopback接口、源端地址不能是Loopback接口的地址。
配置隧道的目的端地址:destination ipv4-address。隧道的目的端地址是对端设备上接口的IP地址,该地址将作为封装后VXLAN报文的目的地址
开启隧道的BFD检测功能:tunnel bfd enable destination-mac mac-address。执行本命令的同时,需要在系统视图下执行reserved vxlan命令配置保留VXLAN。否则,BFD会话无法up。本命令不能与uRPF功能同时配置,否则,BFD会话无法up。
3) 关联VXLAN与VXLAN隧道
一个VXLAN可以关联多条VXLAN隧道。一条VXLAN隧道可以关联多个VXLAN,这些VXLAN共用该VXLAN隧道,VTEP根据VXLAN报文中的VXLAN ID来识别隧道传递的报文所属的VXLAN。VTEP接收到某个VXLAN的泛洪流量后,如果采用单播路由泛洪方式,则VTEP将在与该VXLAN关联的所有VXLAN隧道上发送该流量,以便将流量转发给所有的远端VTEP;如果采用泛洪代理方式,则VTEP通过与该VXLAN关联、通过flooding-proxy参数开启了泛洪代理功能的VXLAN隧道将泛洪流量发送给泛洪代理服务器。
进入系统视图 system-view
进入VSI视图 vsi vsi-name
进入VXLAN视图 vxlan vxlan-id
配置VXLAN与VXLAN隧道关联 tunnel { tunnel-number [ backup-tunnel tunnel-number | flooding-proxy ] | all } 缺省情况下,VXLAN未关联VXLAN隧道。VTEP必须与相同VXLAN内的其它VTEP建立VXLAN隧道,并将该隧道与VXLAN关联。如果指定了backup-tunnel tunnel-number参数,则该参数指定的隧道作为备用VXLAN隧道,为主用VXLAN隧道提供保护。当主用VXLAN隧道down时,VXLAN将启用备用VXLAN隧道。如果指定了flooding-proxy参数,则VXLAN内的广播、组播和未知单播流量将通过该隧道发送到泛洪代理服务器,由代理服务器进行复制并转发到其他远端VTEP。
4) 建立数据帧与VSI的关联
手工创建以太网服务实例,并将以太网服务实例与VSI关联后,从该接口接收到的、符合以太网服务实例报文匹配规则的报文,将通过查找关联VSI的MAC地址表进行转发。
动态创建的以太网服务实例可以通过匹配MAC地址方式判断接口接收到的报文是否属于该AC,只有报文携带的VLAN ID、源MAC地址分别与太网服务实例匹配的VLAN ID、MAC地址相同,报文才属于该AC。
开启VLAN关联VXLAN功能,并在VLAN视图下配置与该VLAN关联的VXLAN后,如果存在属于该VLAN的接口,则自动在该接口上创建编号为当前VLAN ID、匹配外层VLAN tag为当前VLAN ID的以太网服务实例,并将该以太网服务实例与指定VXLAN对应的VSI关联,从而确保属于该VLAN的数据帧均通过指定的VSI转发。
5) 管理本地和远端MAC地址
5.1) 添加静态MAC地址
进入系统视图 system-view
添加静态本地MAC地址表项 mac-address static mac-address interface interface-type interface-number service-instance instance-id vsi vsi-name。指定的以太网服务实例AC必须与指定的VSI关联,且该VSI必须已经创建,否则配置将失败
添加静态远端MAC地址表项 mac-address static mac-address interface tunnel tunnel-number vsi vsi-name 。interface tunnel interface-number参数指定的隧道接口必须与vsi vsi-name参数指定的VSI对应的VXLAN关联,且该VXLAN必须已经创建,否则配置将失败
5.2) 关闭本地MAC地址自动学习功能
当关闭以太网服务实例的MAC地址自动学习功能后,只能通过mac-address static命令添加静态本地MAC地址表项。
进入系统视图 system-view
进入二层以太网接口或二层聚合接口视图interface interface-type interface-number或interface bridge-aggregation interface-number
进入以太网服务实例视图 service-instance instance-id
关闭以太网服务实例的MAC地址自动学习功能 learning mode disable
5.3) 关闭远端MAC地址自动学习功能
如果网络中存在攻击,为了避免学习到错误的远端MAC地址,可以手工关闭远端MAC地址自动学习功能,手动添加静态的远端MAC地址。
进入系统视图 system-view
关闭远端MAC地址自动学习功能 vxlan tunnel mac-learning disable
5.4) 以太网服务实例AC的MAC地址学习功能分为两个优先级:高优先级和低优先级。对于低优先级的AC,在学习MAC地址时需要查看高优先级AC是否已经学到该MAC地址,如果已经学到,则不允许学习该MAC地址;对于高优先级的AC,在学习MAC地址时如果已经有低优先级的AC或其他高优先级的AC学习到该MAC地址,则覆盖之前的MAC地址表项。
5.5) 配置接口的MAC地址软件学习功能适用于SDN(Software Defined Network,软件定义网络)组网。
在SDN组网中,设备将接口学习到的MAC地址上传给控制器,控制器把收到的MAC地址下发给其它远端设备,以减少不必要的广播流量。
接口的MAC地址学习方式包括:
· 硬件学习:接口通过硬件学习MAC地址。软件周期性地检查硬件是否学习到新的MAC地址,把学到的地址上传控制器处理。硬件学习方式下需等待软件检查周期的到来,控制器获取MAC地址的速度较慢。
· 软件学习:接口通过软件学习MAC地址。软件把学到的MAC地址下发给硬件,同时上传控制器处理。软件学习方式下不需等待软件检查周期的到来,控制器获取MAC地址的速度较快。
开启接口的MAC地址软件学习功能后,大量的MAC地址学习可能对系统造成冲击,不建议用户在大量MAC地址频繁变化的情况下开启本功能。
通过OpenFlow下发VXLAN网络的三层流表时,建议用户不要开启泛洪抑制功能,以免影响报文的正常转发。
6) 配置VXLAN组播路由泛洪方式
组播路由泛洪方式支持如下两种实现模式:
· PIM模式:在VTEP和核心设备上运行PIM协议,以建立组播转发表项。采用该模式时,可以使用Loopback接口地址作为组播报文的源IP地址。当VTEP存在多个网络侧接口时,PIM协议可以动态选择报文的出接口。
· IGMP主机模式:在VTEP上开启IGMP协议的主机功能、在连接VTEP的核心设备上配置IGMP、在所有核心设备上运行PIM协议,以建立组播转发表项。采用该模式时,必须使用VTEP上网络侧接口的IP地址作为组播报文的源IP地址,并在该接口上开启IGMP协议的主机功能。当VTEP存在多个网络侧接口时,IGMP主机模式只能采用组播报文的源IP地址所在的接口作为报文的出接口。
同一VXLAN网络中的不同VTEP可以采用不同的实现模式。
7) 配置VXLAN报文的目的UDP端口号
属于同一个VXLAN的VTEP设备上需要配置相同的UDP端口号。
进入系统视图 system-view
配置VXLAN报文的目的UDP端口号 vxlan udp-port port-number。缺省情况下,VXLAN报文的目的UDP端口号为4789
8) 配置VXLAN报文检查功能
通过本配置可以实现对接收到的VXLAN报文的UDP校验和、内层封装的以太网数据帧是否携带VLAN Tag进行检查:
· UDP校验和检查:VTEP接收到VXLAN报文后,检查该报文的UDP校验和是否为0。若UDP校验和为0,则接收该报文;若UDP校验和不为0,则检查UDP检验和是否正确,正确则接收该报文;否则,丢弃该报文。
· VLAN Tag检查:VTEP接收到VXLAN报文并对其解封装后,若内层以太网数据帧带有VLAN Tag,则丢弃该VXLAN报文。
9) 配置缺省解封装VXLAN报文功能
在仅建立单向VXLAN隧道的组网中,本端未建立指向对端的VXLAN隧道,对端建立指向本端的VXLAN隧道时,会导致本端从对端接收的VXLAN报文无法解封装而被丢弃。配置本功能后,本端可以解封装所有收到的目的地址为指定接口下配置的IP地址的VXLAN报文。
10) 配置ND(ARP)泛洪抑制
为了避免组播发送的ND请求报文占用核心网络带宽,VTEP从本地站点或VXLAN隧道接收到ND请求和ND应答报文后,根据该报文在本地建立ND泛洪抑制表项。后续当VTEP收到本站点内虚拟机请求其它虚拟机MAC地址的ND请求时,优先根据ND泛洪抑制表项进行代答。如果没有对应的表项,则将ND请求泛洪到核心网。ND泛洪抑制功能可以大大减少ND泛洪的次数。
11) 关闭VXLAN远端ARP/ND自动学习功能
缺省情况下,设备从VXLAN隧道接收到报文后可以自动学习远端虚拟机的ARP/ND信息,即远端ARP/ND信息。在SDN控制器组网下,当控制器和设备间进行表项同步时,可以通过本配置暂时关闭远端ARP/ND自动学习功能,以节省占用的设备资源。同步完成后,再开启远端ARP/ND自动学习功能。
建议用户只在控制器和设备间同步表项的情况下执行本配置。
RFC 7348:Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks
网友评论