VXLAN本质上是一种VPN技术,把物理层网络虚拟成一台二层交换机,一般使用在虚拟化园区网和数据中心
将以太网帧封装在IP报文之上(UDP),只需要连接的短端节点支持虚拟化即可
TOR:一台机柜的服务器需要有一台网络设备进行互联,最上面一台网络设备就叫TOR,TOR之间就方便牵线
VXLAN的报文格式:
概念介绍:
建立VXLAN端点的设备叫NVE(网络虚拟化边缘设备),使用VTEP进行标识,VTPE(VXLAN Tunnel EndPoint,VXLAN隧道端点)
VTPE使用NVE的IP地址表示。两个VTP即可确定一条VXLAN隧道
- VNI:VXLAN网络标识符,类似于VLANid
VXLAN的Flags字段的1表示VNI是有效的,其他的0即为保留暂无作用
在VXLAN中VNI相同则在同一个广播域,VNI不同的则不在不同的广播域,支持的广播域数量即位2的24次方通常使用NVE的环回口来设置VTEP的地址
VNI还分为2层vni和3层vni
- BD:(Bridge Domain,桥域)
类似于传统网络中采用VLAN划分广播域,BD域内是本地有效的
- VAP虚拟接入点:
实现VXLAN业务接入
VAP有两种配置方式,二层子接口方式或者VLAN绑定方式
Edge: VXLAN网络的边缘接入设备,传统网络的流量由此进入VXLAN网络。
Border: VXLAN网络和外部网络通信的节点,用于连接外部网络或VXLAN网络的出口
CE的子接口有三种不同的封装方式dot1q,untag,default
业务接入配置:
bridge-domain 30 //创建BD域
vxlan vni 3 //配置VNI为3
l2 binding vlan 30 //所有属于VLAN30的数据帧都属于BD域30
interface g1/0/1.1 mode l2 //配置子接口为2层子接口
source 3.3.3.3
encapsulation dot1q vid 10 // 指定封装为dot1q,处理vlan10的数据帧
bridge-domain 10 //该接口属于BD10
静态隧道建立:
interface nve 1
vni 1 head-end peer-list 3.3.3.3 //与NVE3.3.3.3建立隧道,3.3.3.3为VTEP地址
display vxlan tunnel //查看隧道信息
二层通信需要发送arp广播寻找mac地址
vxlan网络会通过一种叫头端复制的方式去泛洪BUM报文(广播,组播报文,DMAC未知的单播报文)
CE上则会学习vxlan的mac地址的表项
集中式网关VXLAN:
interface vbdif 1
L3网关部署在一台设备上,所有跨子网的流量都通过该设备转发,实现流量集中管理,但网关需要维护大量的通过终端接入的vxlan arp
分布式网关:
VTEP即是L2网关又是L3网关,VTEP只学习连接在本节点下终端的ARP表项,网络规模扩展能力强
EVPN动态创建VXLAN隧道协议
首先在Leaf1和Leaf2之间建立BGP EVPN对等体,然后在Leaf1和Leaf2分别创建二层广播域,并在广播域下配置相关联的VNI,然后在二层广播域下创建EVPN实例,然后配置本端的VTEP IP地址,Leaf1和Leaf2会生成BGP EVPN路由发送给对端,携带本端EVPN实例的出方向VPN-Target和BGP EVPN协议新定义的Type3路由
#
bridge-domain 10
vxlan vni 1
evpn
route-distinguisher 1:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
#
控制器下发的配置是这样的:
evpn vpn-target evpn_11 bd-mode
route-distinguisher 1058:16
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
#
bridge-domain 18
l2 binding vlan 32
vxlan vni 32
evpn binding vpn-instance evpn_18
Leaf1与Leaf2收到对端发来的BGP EVPN路由后,先检查EVPN实例的target是否相等,Leaf1和Leaf2将获取其中携带的对端VTEP IP地址和VNI,如果对端VTEP IP地址是三层路由可达的,
则建立一条到对端的VXLAN隧道;同时,创建一个相应VNI的头端复制表,用于后续BUM报文转发。
evpn-overlay enable //开启evpn功能,必配项
l2vpn-family evpn //激活evpn邻居关系
peer 2.2.2.2 enable
int nve 1
vni 1 head-end peer-list protocol bgp //使用evpn建立vxlan隧道,BGP会产生type3的更新updata路由
TYPE3类的路由(Inclusive MuIticast):
Ethernet Tag ID 该字段为当前设备的VLAN ID,在此路由中为全0
IP Address Length 此路由携带的本端VTEP IP地址的掩码长度
Originating Router's IP Address 此路由携带的本端VTEP IP地址。
Flags 标识当前隧道是否需要叶子节点信息。 在VXLAN场景中,该字段没有实际意义。
Tunnel Type 该字段为此路由携带的隧道类型。目前,在VXLAN场景中,支持的类型只有“6:Ingress Replication”,即头端复制,用于BUM报文转发。
Tunnel Identifier 在VXLAN场景中,该字段也是本端VTEP IP地址
type code字段表示是头端复制
EVPN二类路由:MAC/IP路由
携带EVPN实例的RD值,虚拟机的IP地址,主机的MAC地址
Ethernet Tag ID 当前设备实际配置的VLAN ID,
MPLS Label1为此路由携带的二层VNI,MPLS Label2为此路由携带的三次VNI
该路由作用:
1,主机MAC地址通告,要实现同子网主机的二层互访,两端VTEP需要互相学习主机MAC,作为BGP EVPN对等体VTEP之间通告交换
MAC/IP路由,可以相互通告已经获取到的主机MAC
主机ARP通告,同时携带主机MAC地址+主机IP地址,该路由可以在VTEP之间传递主机ARP表项,实现主机通告
主机ARP通告主要用于:
ARP广播抑制,当三层网关学习到其子网下的主机ARP时,生成主机信息,然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址
分布式网关场景下的虚拟机迁移:当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),发送给虚拟机的原网关。原网关收到后,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。
2,主机IP路由通告:
在分布式网关场景中,要实现跨子网主机的三层互访,两端VTEP(作为三层网关)需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IP路由。其中,IP Address字段为主机IP路由的目的地址,同时MPLS Label2字段必须携带三层VNI
peer 1.1.1.1 advertise arp //通告ARP路由信息
VXLAN中BD域的MAC地址表的学习机制:
1,通过流量的接收动态学习
2,通过evpn协议的type2路由来进行学习
分布式网关场景中,虚拟机进行热迁移时,要保证虚拟机的网关以及mac地址不变
vxlan anycase-gateway enable //开启vxlan分布式网关功能
arp collect host enable //vxlan网关发布的路由类型为IRB时使用,用来发布主机路由
三层VNI作用:用于Leaf节点在收到数据报文时判断报文使用哪个L3VPN实例的路由表指导转发
3,IRB类型的路由:
收到IRB类型的路由进行如下处理:
1,检查该路由携带的ERT,如果与本段EVPN实例的IRT相同,则接收该路由,EVPN实例还能提取其中的ARP类型路由,用于主机路由通告
2,如果该路由的ERT与本端L3VPN实例的eIRT相同则接收,得到虚拟机的IP,三层VNI,并在路由表中保存该主机路由
在分布式网关DHCP场景下,dhcp服务器可能无法区分中继的源网关地址属于哪个vni:
Leaf收到广播请求后进行dhcp中继,同时将对应网关的VBDIF地址作为giaddr地址,将配置的Option82的子选项9地址封装在discover报文中,进行vxlan封装
中继配置:
#
dhcp select relay
dhcp relay binding server ip 10.1.1.1
dhcp option 82 vendor-specific insert enable
dhcp option 82 vendor-specifc format vendor-sub-option 10 source-ip-address 5.5.5.5 //5.5.5.5应为中继环回口的地址,证明该中继报文回往哪个vpn实例
#
dhcp relay giaddr source-interface loopback1 //指定中继地址
dhcp option 82 link-selection insert enable //将客户端网关作为link-selection插入到DHCP报文的82选项中
DHCP客户端与服务器跨vpn场景:
支持各VPN内的网段可以重叠,通过插入option子选项151和子选项5来实现
151子选项,表示relay插入子选项,并填写主机的vpn实例
5子选项,表示主机的vxlan三层网关的VBDIF接口地址
arp-proxy local enable //开启本地ARP代理功能,VBDIF接口会响应下连书记对同网段IP地址的ARP请求
分布式网关下的跨子网通信:非对称IRB转发,对称IRB转发
1,非对称IRB转发在传递路由时不会传递本地下连主机的32位主机路由
2,在本地就可以实现跨子网转发,给对应的vbdif进行处理,入节点同时执行L3,L2查表转发,出节点只需要进行L2查表转发
Vxlan环境中的Type2路由分为几种
MP-BGP EVPN的路由和MP-BGP十分类似,都会有一个名为MP_REACH_NLRI和MP_UNREACH_NLRI的path attribute,MP_UNREACH_NLRI用于发送撤销路由,MP_UNREACH_NLRI用于发送更新路由,该属性中的NLRI字段用于存放EVPN的具体路由信息,在该属性中携带next hop network address信息,其内容为产生该路由的设备VTEP IP,同时每个路由更新信息中都会携带扩展团体属性(extended communities)用于存放RT或其他信息。Type2的路由,称为MAC advertisement route,用于传递主机的mac或mac&IP的路由信息,设备通过该路由可以完成相关的转发表的建立;
type2的NLRI信息如下:
- RD为BD中配置的RD:
- Ethernet segment identifier用来在多个PE之间标识连接的相同的CE,在VXLAN环境中不需要使用,固定为全0;
- ethernet tag ID由于华为仅支持一个BD对应一个EVI,不支持多个BD绑定同一个EVI,所以该字段只能是0;
- mac address length固定为48;
- mac address为主机的mac地址,可以通过BD对应的mac地址表获取或ARP中获取;
- IP address length固定为32;IP address为主机的IP地址,从ARP表中获取;
- MPLS Label 1为L2 VNI从BD中获取;
- MPLS Label 2为L3 VNI从VRF中获取。
- Type2的路由中Ethernet segmentation id,ethernet tag id,mac address length,mac address,ip address length,ip address可以作为路由前缀信息,其他信息作为路由的属性存在;
Type2扩展团体属性包含如下:
- 多个配置在BD中的RT(export RT)
- encapsulation(固定为VXLAN)
- 一个未知的子类型(用于存放router‘s mac,不一定携带)
- 一个mac mobility属性(用于存放sticky/static信息和sequence number,不一定携带)
华为将Type2的路由分为三种
1、 MAC地址路由
Mac地址路由是将BD的mac地址表中从本地学到的条目,转变为type2的路由发送至EVPN邻居,只包含BD、mac、length、mac、L2 VNI信息,next hop network address携带vtep ip
扩展团体属性中包含RT(route-target)和encapsulattion EVPN用于VXLAN场景时该值固定为8,表示vxlan
2、 ARP通告路由
ARP通告路由是主要在集中式网关场景用来实现arp广播抑制和分布式网关场景的VM迁移使用,需要获取设备中与BD相关的ARP表的信息,转变为type2的路由发送至EVPN邻居,比mac地址路由增加了ip address length和ip address信息;
扩展团体属性的mac mobility字段中包含两个重要字段sticky/static和sequence number,当生成某个type2路由的转发表的某条表项为static类型,即静态写入时,此时type2的路由中会携带mac mobility字段,并且将其中的sticky/static值置为1,sequence number的值为0;
收到路由的设备认为不应该从别的交换机或本地产生相同的路由信息,如果收到相同的路由信息会直接丢弃。
Sequence number的值会用来记录相同的路由在EVPN网络中更新了几次,一个设备在将一个路由信息发布之前会在本地的EVPN数据库中检查是否已经从别的设备收到过相同的路由,如果没有任何记录且产生该路由的转发表项类型不是为static的话,则在发布时不携带mac mobility字段;
如果收到的路由没有携带mac mobility属性,则设备直接认为sequence number为0.
扩展团体属性在分布式网关场景的VM迁移时,迁移的目的端交换机会在团体属性中会携带一种mac mobility字端,在其中的sequence number的值会对原来的值加1。
收到路由的设备会比对sequence number与之前本地EVPN路由表中的哪个更大,如果新收到的更大则让那位该路由更新。对于原产生该路由的设备收到该路由会发送ARP探测,如果未能收到回复,则更新mac和IP转发表,并同时更新EVPN路由表,之后会发出withdraw路由通知所有的EVPN邻居撤销原路由;
如果检测到有回复,则认为是地址冲突,会将sequence number再加1,发送至所有EVPN邻居,其他设备则会继续使用原设备的路由。对于非原产生相同的路由的设备收到新路由会用来更新mac和IP转发表,但并不会更新EVPN路由表,直到收到原始设备发出的撤销路由才会更新EVPN路由表。
3、 IRB类型路由
IRB类型路由用于分布式anycast网关场景,可以通过该IRB类型的路由实现对称式路由,比ARP路由多了L3 VNI,并且扩展团体属性中增加了一个router’s mac,而这两个信息加IP address就是实现对称式路由的关键了
L3 VNI为每个VRF分配,而router‘s mac每个设备一个,路由前缀和ARP路由类型同样是通过感知ARP表的变化,之后提取对应BD中的RD和export RT信息(RT一般有两个,其中一个和某个VRF的RT相同),转变为EVPN路由发送至其他EVPN邻居,其他设备收到后会将通过携带的两个RT,将mac西南西放入BD的转发表,将IP信息放入VRF路由表中。
某一终端在发出跨3层访问的数据包时,到了leaf设备,leaf设备会查询对应的VRF的路由表,找到主机明细路由,下一跳为对端VTEP IP出接口为VXLAN;数据包发出时会先将原始数据帧的源mac替换为自己的router’s mac 目的mac替换为对端的router’s mac 再封装L3 VNI之后封装underlay信息并发出。