VXLAN介绍概念描述定义RFC7348定义了VLAN扩展方案VXLAN(VirtualeXtensibleLocalAreaNetwork)。VXLAN采用MACinUDP(UserDatagramProtocol)封装方式,是NVO3(NetworkVirtualizationoverLayer3)中的一种网络虚拟化技术。传统网络缺陷虚拟机大小受限于网络规格:在传统二层网络环境中,数据包通过查询MAC地址表进行二层转发,MAC地址表的容量限制了虚拟机的数量.网络隔离能力局限:目前主流的网络隔离技术是VLAN,部署在大规模虚拟化网络中有以下局限:–由于IEEE802.1Q定义的VLANTag字段只有12位,只能代表4096个VLAN无法满足在大型二层网络中识别大量租户或租户组的需求。–传统二层网络中的VLAN无法满足网络动态调整的要求。虚拟机迁移范围受网络架构限制:虚拟机启动后,可能由于服务器资源(如CPU高、内存不足等)等问题,需要将虚拟机迁移到新的服务器上.).为了保证虚拟机迁移过程中业务不中断,需要保证虚拟机的IP地址不变。这就要求业务网络是二层网络,要求网络本身具有多路径冗余备份和可靠性。VXLAN的优势随着数据中心在物理网络基础设施上实现服务器虚拟化的快速发展,NVO3技术之一的VXLAN:通过24位的VNI可以支持最大16M的VXLAN网段的网络隔离,对用户进行隔离和监控识别不再受到限制,可以满足大量租户。除VXLAN网络边缘设备外,网络中的其他设备无需识别虚拟机的MAC地址,减轻了设备的MAC地址学习压力,提高了设备??性能。通过在UDP封装中使用MAC扩展二层网络,物理网络和虚拟网络解耦,租户可以规划自己的虚拟网络,无需考虑物理网络IP地址和广播域的限制,大大降低了部署难度网络管理。vlxan的基本概念描述了Underlay网络和Overlay网络。VXLAN技术将现有的物理网络作为Underlay网络,在其上构建一个虚拟的二层或三层网络,即Ove??rlay网络。Overlay网络采用封装技术,利用Underlay网络提供的三层转发路径,实现租户报文在不同站点之间的传递。对于租户来说,underlay网络是透明的,只能感知overlay网络。NVE(NetworkVirtualizationEdge)网络虚拟边缘节点NVE,实现网络虚拟化功能的网络实体。报文经过NVE封装转换后,NVE之间可以在三层基础网络的基础上建立二层虚拟化网络。需要注意的是,设备和服务器上的虚拟交换机VSwitch都可以作为NVE。根据NVE部署位置的不同,可以分为以下三种模式:?硬件模式:所有NVE都部署在支持NVE的设备上,所有VXLAN报文的封装和解封装都在设备上进行。这种模式也称为网络覆盖。?软件方式:所有NVE都部署在vSwitch上,所有VXLAN报文的封装和解封装都在vSwitch上进行。这种模式也称为主机覆盖。?混合模式:部分NVE部署在vSwitch上,部分NVE部署在支持NVE的设备上。VXLAN数据包封装和解封装可以在vSwitch和设备上执行。VTEP(VXLANTunnelEndpoints)VTEP是VXLAN隧道端点,封装在NVE中,用于VXLAN报文的封装和解封装。VTEP连接物理网络,分配物理网络的IP地址,与虚拟网络无关。VXLAN报文中的源IP地址为本节点的VTEP地址,VXLAN报文中的目的IP地址为对端节点的VTEP地址。一对VTEP地址对应一个VXLAN隧道。BD(BridgeDomain)BD是VXLAN网络中用于转发数据包的二层广播域。在VXLAN网络中,VNI以1:1的方式映射到广播域BD,BD成为VXLAN网络中转发数据包的实体。VBDIF接口基于BD创建的三层逻辑接口。通过VBDIF接口配置IP地址,可以实现不同网段的VXLAN之间、VXLAN与非VXLAN之间的通信,也可以实现二层网络到三层网络的访问。VXLAN报文格式概念说明VXLANheaderVXLANFlags:8位,值为00001000。VNI:VXLAN网络标识符,24比特,用于区分VXLAN网段。Reserved:24位和8位,必须设置为0。OuterUDPheaderDestPort:目的UDP端口号为4789。SourcePort:源端口号是内层消息通过hash算法计算出的值。这个值非常重要。只有底层消息的五元组的这个值可以根据内层消息改变。对于底层服务(如负载均衡、多核CPU业务均衡)非常重要。OuterIPheaderIPSA:源IP地址为VXLAN隧道本端VTEP的IP地址。IPDA:目的IP地址为VXLAN隧道远端VTEP的IP地址。如果Underlay网络为IPv4网络,则VTEPIP为IPv4类型;如果Underlay网络是IPv6网络,则VTEPIP是IPv6类型。OuterEthernetheaderMACDA:根据发送报文的VTEP上的目的VTEP地址和下一跳IP地址对应的路由表MAC地址查找路由表。MACSA:发送报文的VM所属VTEP的MAC地址。802.1QTag:可选字段,为报文携带的VLANTag。以太网类型:以太网数据包类型。VXLAN作为二层网关部署在linux内核中#创建网桥,作为我们的bridge-domainsudoiplinkaddbr10typebridge#up我们的bdif,可以作为二层网关,跨-vnimessagespassthroughthisinterface进入三层路由sudoiplinksetbr10up#创建一个vxlan接口。下面的nolearning标志非常重要。这里没有设置学习,因为我们可以使用evpn进行mac控制。#如果不部署evpn,可以去掉这个flag。sudoiplinkaddvxlan10typevxlanid10local192.168.59.129dstport4789nolearningsudoiplinksetvxlan10upsudoiplinksetvxlan10masterbr10通过上面的配置,如果BGP-EVPN协议运行,内核会通知BGP,并且localendhascreatedForaVTEP,BGPwillsendtype-3routestoneighbors.可以在bdif上配置IP和MAC为默认网关的IP和MAC,内核会通知BGP向邻居通告type-2路由。第三层网关#addvni100asl3vnisudoiplinkaddbr100typebridgesudoiplinkaddvxlan100typevxlanid100local192.168.59.128dstport4789nolearningsudoiplinksetbr100upsudoipsterlinksetvxlan100upsudoipmasterlanx1br0set0addradd5.5.5.254/24devbr100记住,作为l3vni的svi接口是不能配置IP的,否则收到type-5路由是不会安装的。sudoiplinksetdevbr100address00:00:01:02:03:04#这是路由mac对于三层网关,RFC推荐3种模式:interface-lessinterface-fullCore-facingIRBinterface-fullUnnumberedCore-面向IRBFRRBGP采用无接口模型。Linux在实现这种模式时,需要创建l3vni,比如上面的vni100。这与Linux中的其他l2vni没有区别。不同的是vni会在BGP中明确指定为l3vni。在此模型中,bdif不能配置IP地址。创建以上基本配置后,在BGP中指定vni100-bitl3vni后,可以使用network命令发布type-5路由:携带前缀,下一跳(远端vtep的ip)和路由mac,也就是上面的00:01:02:03:04。BGP根据这些信息在内核中创建路由、noarp邻居(假邻居)和fdb条目。在这个模型中,overlay报文会进行路由搜索,然后根据neighbor找到路由mac作为目的地。报文封装后会从bdif出去进入mac-vrf进行fdb转发,然后从vxlan100出去。sonicvxlan实现前面解释了BGP-EVPN模型,sonic使用的controlplane程序也是FRR,所以实现的时候会参考上面的模型。Sonic实现了vxlan中涉及的组件VRF:一个租户有一个VRF,用来隔离租户之间的路由表项。sonic中也有类似的概念vnet。VNET:租户网络,一个vnet代表一个租户,对应一个l3VNIROUTE:路由支持VRF隔离INTERFACE:支持VRFVXLAN:创建VXLAN隧道FDB:支持fdb入口出接口指向vxlan隧道我还没有实现l2vni,并且暂时没有明白sonic的l2网关的实现原理。
