BGP EVPN
一、BGP EVPN 演进
1、静态配置VXLAN:静态VXLAN没有控制平面,通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致VXLAN网络存在很多泛洪流量。
2、静态方式配置VXLAN的问题:
(1)、N台设备建立VXLAN隧道,手工配置方式最高达到 N*(N-1)/2 次头端列表配置。
(2)、静态VXLAN隧道只有数据转发平面,没有控制平面。
(3)、只能通过ARP广播的方式学习远端MAC地址。
3、BGP EVPN演进:为了解决静态VXLAN的问题,VXLAN引入了BGP EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而避免了不必要的数据流量泛洪。
二、BGP EVPN 基本概念
1、作用:
①、BGP EVPN作为VXLAN控制面协议
②、动态建立隧道
③、传递路由MAC、ARP、ip-prefix
2、BGP EVPN通过扩展BGP协议新定义了几种BGP EVPN路由, 在MP_REACH_NLRI属性中新定义了几种NLRI,称作EVPN NLRI
3、BGP EVPN路由可以用于传递VTEP地址和主机信息,因此BGP EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。
①、Type 2路由(MAC/IP路由):用于主机MAC地址/ARP/IP路由通告。
②、Type 3路由(Inclusive Multicast路由):用于传递二层VNI和VTEP IP地址信息,实现VTEP的自动发现和VXLAN隧道的动态建立,实现BUM报文转发。
③、Type 5路由(IP前缀路由):用于IP前缀路由通告,外部网络路由通告。
4、EVPN VPN-Instance :EVPN实例与BD进行绑定,BD下的MAC地址表项会通过BGP EVPN路由进行传递,在传递时会携带BD绑定的EVPN实例ERT值,对端收到之后对比本地EVPN实例的IRT值,将EVPN路由放入对应的EVPN实例路由表,同时解析EVPN路由表获取MAC地址表项,放入本端与该EVPN实例绑定的BD的MAC地址表中。
5、EVPN NLRI:EVPN NLRI通过路径属性MP_REACH_NLRI携带,地址族标识符(AFI)为25,代表L2VPN,子地址族标识符(SAFI)为70
三、BGP EVPN路由
1、Type 2路由报文格式:
Type 2路由(MAC/IP路由):主要用于MAC地址通告、ARP信息通告以及主机IP路由通告。
2、Type 2路由携带信息
在不同场景下,Type 2路由下带的内容不一样
列举主机MAC地址通告,实现VXLAN同子网互访的场景:
同子网主机MAC地址通告:
①、PC1产生数据流量并发往SW1。
②、SW1获知了PC1的MAC地址,它在MAC地址表中创建一个表项,记录该MAC地址、BD ID及入接口。
③、SW1根据该表项生成BGP EVPN路由并发送给SW2。该路由携带本端EVPN实例的RT值(扩展团体属性)以及Type 2路由( MAC路由)。在MAC路由中,PC1的MAC地址存放在MAC Address字段中,二层VNI存放在MPLS Label1字段中。
④、SW2收到SW1发来的BGP EVPN路由后,首先检查该路由携带的RT(类似MPLS VPN中的RT的概念),如果与本端EVPN实例的入站RT相等,则接收该路由,否则丢弃。在接收该路由后,SW2获得PC1的MAC地址、BD ID和SW1上VTEP IP地址(MP_REACH_NLRI中Next hop network address字段携带)的对应关系,并在本地的MAC表中生成MAC表项,其出接口需根据下一跳进行迭代,最终迭代结果是指向SW1的VXLAN隧道。
3、Type 3类路由报文格式
4、Type 3路由描述
Type 3路由(Inclusive Multicast路由):
①、Type 3路由在VXLAN控制平面中主要用于VTEP的自动发现和VXLAN隧道的动态建立。
②、作为BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。
其中,Originating Router’s IP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI。
建立VXLAN隧道
VTEP通过Type 3路由互相传递二层VNI和VTEP IP地址信息。如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制列表,用于后续BUM报文转发。
5、Type 5类路由报文格式
6、Type 5类路由描述
Type 5路由(IP前缀路由):
①、该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址。
②、当携带主机IP地址时,该类型路由在VXLAN控制平面中的作用与IRB类型路由是一样的,主要用于分布式网关场景中的主机IP路由通告。
③、当携带网段地址时,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。
通告IP前缀路由的应用场景: 对于VXLAN外部网络,VTEP可以通过Type 5类路由将外部路由通告到整个VXLAN网络中,用于指导VXLAN内部主机访问外部网络。
四、BGP EVPN-VXLAN配置案例
ACC1配置:
vlan batch 10
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
ACC2配置:
vlan batch 10 20
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 20
Edge1配置:
vlan batch 10 13 20
#
evpn-overlay enable //开启evpn
#
evpn
#
ip vpn-instance OA
ipv4-family
route-distinguisher 100:1
vpn-target 11:11 import-extcommunity evpn
vpn-target 33:33 import-extcommunity evpn
vxlan vni 11
#
bridge-domain 10
vxlan vni 10
evpn
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 11:11 export-extcommunity
vpn-target 1:1 import-extcommunity
#
interface Vbdif10
ip binding vpn-instance OA
ip address 10.1.1.254 255.255.255.0
mac-address 0000-0500-0001
vxlan anycast-gateway enable //开启分布式VXLAN网关
arp collect host enable //开启arp收集主机信息
#
interface Vlanif13
ip address 13.1.1.1 255.255.255.0
#
interface GE1/0/0
undo shutdown
port link-type trunk
port trunk allow-pass vlan 13
#
interface GE1/0/1
undo shutdown
port link-type trunk
#
interface GE1/0/1.10 mode l2
encapsulation dot1q vid 10
bridge-domain 10
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Nve1
source 1.1.1.1
vni 10 head-end peer-list protocol bgp
#
bgp 100
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface LoopBack0
#
ipv4-family unicast
peer 3.3.3.3 enable
#
l2vpn-family evpn
policy vpn-target
peer 3.3.3.3 enable
peer 3.3.3.3 advertise irb
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 1.1.1.1 0.0.0.0
network 13.1.1.1 0.0.0.0
Edge2配置:
vlan batch 10 20 23
#
evpn-overlay enable
#
ip vpn-instance OA
ipv4-family
route-distinguisher 100:1
vpn-target 11:11 import-extcommunity evpn
vpn-target 33:33 import-extcommunity evpn
vxlan vni 22
#
bridge-domain 10
vxlan vni 10
evpn
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 11:11 export-extcommunity
vpn-target 1:1 import-extcommunity
#
bridge-domain 20
vxlan vni 20
evpn
route-distinguisher 200:1
vpn-target 2:2 export-extcommunity
vpn-target 11:11 export-extcommunity
vpn-target 2:2 import-extcommunity
#
interface Vbdif10
ip binding vpn-instance OA
ip address 10.1.1.254 255.255.255.0
mac-address 0000-0500-0001
vxlan anycast-gateway enable
arp collect host enable
#
interface Vbdif20
ip binding vpn-instance OA
ip address 10.1.2.254 255.255.255.0
mac-address 0000-0500-0002
vxlan anycast-gateway enable
arp collect host enable
#
interface Vlanif23
ip address 23.1.1.2 255.255.255.0
#
interface GE1/0/0
undo shutdown
port link-type trunk
port trunk allow-pass vlan 23
#
interface GE1/0/1
undo shutdown
port link-type trunk
#
interface GE1/0/1.10 mode l2
encapsulation dot1q vid 10
bridge-domain 10
#
interface GE1/0/1.20 mode l2
encapsulation dot1q vid 20
bridge-domain 20
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Nve1
source 2.2.2.2
vni 10 head-end peer-list protocol bgp
vni 20 head-end peer-list protocol bgp
#
bgp 100
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface LoopBack0
#
ipv4-family unicast
peer 3.3.3.3 enable
#
l2vpn-family evpn
policy vpn-target
peer 3.3.3.3 enable
peer 3.3.3.3 advertise irb
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 23.1.1.2 0.0.0.0
Border配置:
vlan batch 13 to 14 23
#
evpn-overlay enable
#
ip vpn-instance OA
ipv4-family
route-distinguisher 100:1
vpn-target 33:33 export-extcommunity evpn
vpn-target 11:11 import-extcommunity evpn
vxlan vni 33
#
interface Vlanif13
ip address 13.1.1.3 255.255.255.0
#
interface Vlanif14
ip binding vpn-instance OA
ip address 14.1.1.1 255.255.255.0
#
interface Vlanif23
ip address 23.1.1.3 255.255.255.0
#
interface GE1/0/0
undo shutdown
port link-type trunk
port trunk allow-pass vlan 13
#
interface GE1/0/1
undo shutdown
port link-type trunk
port trunk allow-pass vlan 23
#
interface GE1/0/2
undo shutdown
port link-type trunk
port trunk allow-pass vlan 14
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Nve1
source 3.3.3.3
vni 10 head-end peer-list protocol bgp
vni 20 head-end peer-list protocol bgp
#
bgp 100
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
#
ipv4-family unicast
peer 1.1.1.1 enable
peer 2.2.2.2 enable
#
ipv4-family vpn-instance OA
import-route static
advertise l2vpn evpn
#
l2vpn-family evpn
undo policy vpn-target
peer 1.1.1.1 enable
peer 1.1.1.1 advertise irb
peer 1.1.1.1 reflect-client
peer 2.2.2.2 enable
peer 2.2.2.2 advertise irb
peer 2.2.2.2 reflect-client
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 13.1.1.3 0.0.0.0
network 23.1.1.3 0.0.0.0
#
ip route-static vpn-instance OA 0.0.0.0 0.0.0.0 14.1.1.2
#
AR1配置:
vlan batch 14
#
interface Vlanif14
ip address 14.1.1.2 255.255.255.0
#
interface Ethernet2/0/0
port link-type trunk
port trunk allow-pass vlan 14
#
ip route-static 10.1.1.0 255.255.255.0 14.1.1.1
ip route-static 10.1.2.0 255.255.255.0 14.1.1.1
验证结果:
ping PC2和PC3
ping出口
抓包:
PC Ping 14.1.1.2
PC1 ping PC3