一、预习:
EVPN:Ethernet Virtual Private Network,以太网虚拟专用网
EVPN 颠覆了传统的二层数据学习 MAC 的方式,引入控制层面学习 MAC 和 IP 指导数据转发,统一了各种 L2VPN、L3VPN 业务的控制下面,实现了转控分离。
EVPN 解决了传统 L2VPN 的典型问题:如MAC表容量受限、配置困难、链路使用率低(只能单活)、收敛慢等问题,实现了双活、快速收敛、简化运维的价值
EVPN 采用 MP-BGP,支持多种类型的隧道,例如 MPLS、GRE、SRv6,通过 PE 之间交互 BGP EVPN 报文,传递 MAC 和 IP 地址
EVPN 定义了一种新的 BGP NLRI(Network Layer Reachable Information)来承载所有的 EVPN 路由,被称为 EVPN NLRI
EVPN NLRI 为 MP-BGP 所携带。MP-BGP 支持多协议扩展,定义 EVPN 的 AFI(Address Family Identifier)是 25,SAFI(Subsequent Address Family Identifier)是 70
EVPN 的数据平面:由 IP 隧道或 MPLS 标签转发路径组成数据转发路径,只负责数据转发,无需广播泛洪来学习 MAC 地址
优点:提高链路利用率和传输效率,支持负载分担;避免全连接造成的网络消耗,如布署 BGP 路由反射器,减少逻辑连接的数量;减少 ARP 广播流量造成网络资源的消耗
1、概念:
ES:Ethernet Segment 代表用户站点(设备或网络)连接到 PE 的一组以太链路,使用 ESI 来表示
ESI:Ethernet Segment ID,用于标识客户的网络段 ID
EVI:EVPN Instance,用来标识 一个 EVPN 客户实例
MAC-VRF:是 PE 上属于 EVPN VPN-Instance 的 MAC 地址表
DF:Designated Forwarder 指定转发者,用于在 CE 多归属场景下只转发一份 BUM 流量至 CE
BUM:Broadcast、Unknown unicast、Multicast 由 Type 3 路由携带,用于转发 BUM 流量, 单播 Label 由 Type 2 路由携带,用于转发单播流量
2、EVPN NLRI 格式:
1 Byte Length + 9Bytes Variable Route type Specific
其中:1 Byte Route Type 有 5 种类型:
1、EVPN A-D Route
2、MAC/IP Advertisement Route
3、Inclusive Multicast Route
4、Ethernet Segment Route
5、IP Prefix Route
3、ESI 格式:
Type(1bytes) ESI Value(9byte)
type 0 由管理员手工配置
type 1 当PE和CE使用LACP时,CE LACP SysMacAddr(6byte)+ CE LACP port key(2byte)+ 0x00(1byte)
type 2 Auto generated by MSTP
type 3 SysMac + local Discriminator
type 4 Router ID + local Discriminator
type 5 AS Number + LocalDisciminator
ESI 总长为10bytes,且全网范围内唯一
同一ES双归的两个PE配置的ESI必须相同,例如PE1和PE2上配置相同的ESI为1
4、EVPN的工作流程分为两个阶段:
a、启动阶段:
EVPN 对等体交互 EVPN Type 3 Inclusive Multicast 路由建立 BUM 流量转发表,包括:RD、Label,相当于 PE 之间对彼此的了解( ISP 内部完成 EVPN 互通条件)
EVPN 对等体交互 Type 4 es-route 路由(包括 RD、ESI),完成 ES 发现并产生了 ES 成员信息表(包括 ESI 和成员 PE),然后进行 DF 指定转发者的选举(在ES多归属场景下),本质上是发现连到同一 ESI 的其他成员 PE( ISP 对 CE 侧的网络拓扑的了解)
小结: 启动阶段生成 MAC-VRF(空)、BUM 流量转发表(Type 3 生成)、ES 成员信息表(Type 4 选择 DF, Type 1 防环)(由流量触发到 PE 学习再到路由转发,补完整个的控制平面)EVPN 对等体同时也交互 Type 1 ad-route路由,内容是在 Type 4 的基础上,增加了一个 Label,补完一个完整的 ES 成员信息表,从而实现水平分割、别名等功能,本质是防环( PE 侧完成对 CE 的详细构建并建立控制)
b、流量转发:
** 注意这里 **,同一 CE 用户的 PE2 收到 PE1 的 Type 2路由后,发现是相同的 ESI ,so,PE2 将下一跳变更为与 CE 的直连接口,并删除 Label。与此同时,PE2 也将自己产生的 Type 2 路由给对侧 PE 邻居,于是,对侧邻居发现到同一 CE 又出现一个新的路由,加入路由表,实现负载均衡CE 侧流量触发,PE 通过学习,通告 MAC 地址,产生Type 2 mac-route(包括 mac、esi、next-hop、label)生成本地 mac vrf 表,通告给邻居,这个过程是转发(流量学习)和控制平面(Type 2 路由通告)相结合完成的过程
二、拓扑:
三、配置过程:
system immediately #配置立即生效,不需要 commit
undo dcn #防止 ensp 出现 bug
1、ISP 三台路由器 IGP 互通,并建立 mpls lsp Underlayer
2、配置 EVPN 源地址:
evpn source-address 1.1.1.1
3、配置 BGP,起 l2vpn-family evpn,连通 PE 两端互为对等体
dis bgp evpn peer
4、PE 上配置实例,RD、RT
evpn vpn-instance 1
route-distinguisher 1:1
vpn-target 1:1
出现 Type 3 inclusive Multicast Route
dis bgp evpn all routing-table inclusive-multicast route #查看 EVPN Type 3 路由
5、接入 CE,绑定evpn 接口:
int Ethernet 1/0/1
evpn binding vpn-instance 1
esi 0011.1111.1111.1111.1111
出现 Type 4 es-route 和 Type 1 ad Route
RT 值不是我们预先配的,而是 ESI 号的一段。if 不需要收对端的 Type 4 路由,则可以打开policy vpn-target
6、流量过来后,出现 Type 2 mac-route:
包括 ethtagid / macaddresslen / macadd r/ ipaddr / length
dis mac-address evpn 1
dis evpn mac routing-table all-evpn-instance #查看 EVI 的 mac-route 表
四、启动和转发过程:
1、建立 BGP EVPN 邻居,完成后,PE 将发送 Type 3 Inclusive Multi Route 发现邻居并分配标签内容:RD、Label,然后 Peer 端 生成 BUM 流量转发表
2、本地创建 EVPN 实例,配置 RD、RT,本地将激活 EVPN,产生 MAC-VRF,内容为空
3、CE 双活接入 PE,在 PE 上配置 CE 接入接口与 EVPN 实例绑定,从该接口进入的报文将进入 EVPN 实例,此过程中 PE 产生 Type 4 Ethernet Segment Route,包括RD、ESI(它会用 ESI 号当做 RD 值)并传递给所有邻居,然后每个PE会产生 ES 成员信息表,Type 4 用于发现同一租户连接的不同 PE ,由 PE 从 ES 成员信息表中选择出 DF,决定用哪个 DF 来转发 BUM 流量
同时,位于同一侧的 PE 通过 Type 1 EVPN A-D Route 分发 ESI 标签,ESI Label 用于水平分割防止同一 ES 来的流量重回到本 ES
Type 1 和 Type 4 的区别是比 1 比 4 多了一个 ESI Label,补充了完整的 ES 成员信息表,来 多归 PE 和 CE 间的水平分割防环
至此,完成了 EVPN 的启动阶段,生成了三张表:
MAC-VRF:表项为空
BUM 流量转发表,由 Type 3 组成
ES 成员信息表:由 Type 4、Type 1 组成
接着进入流量转发阶段:
1、CE1 发送 ARP 请求,生成本地 MAC 条目
2、PE1 EVPN 将本地 MAC 条目生成 Type 2 路由,携带 PE1 设备分配的标签发送给所有的邻居,其中包括RD、ESI、MAC、Label
if 多归的 PE 收到同一 CE 的 Type 2路由,由于下一跳是同侧 PE,so,因为相同的 ESI 号,将下一跳切换到对 CE 的直连接口上,并删除 Label。同时,对端 PE 同样会收到多归 PE 的另一个路由,它们把路由放入 Type 2 MAC-VRF 表,完成多个PE的等价路由表的构建
五、验证:
1、从 PC1 到 PC2 跟踪一下:
抓包可以看到两层标签,内层的 48000 是 BGP EVPN 实例产生的数据标签,外层的 1025 是 IGP LDP 产生的用于穿越路由黑洞:
看一下 NE1 上的 MPLS LSP Label:
2、分别看一下各个表项:
a、看 BGP EVPN 是否成功建立对等体:
b、查看 NE1 发给 NE2 的所有路由:
c、查看由 CE 流量触发的 Type 2 mac-route,可以看到有 EthTag、MAC 长度、MAC 地址、下一跳:
d、查看下所有的 EVPN 实例 mac 路由,由流量触发:
详细看一下:
e、最后再看一下所有的 1 2 3 4 类路由:
Type 1 ad-route:
Type 2 mac-route:
Type 3 inclusive-route:
Type 4 es-route:
六、详细配置:
NE1:
evpn vpn-instance 1
route-distinguisher 1:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
vpn-target 2:2 import-extcommunity
#
mpls lsr-id 1.1.1.1
mpls
mpls ldp
#
interface Ethernet1/0/0
undo shutdown
evpn binding vpn-instance 1
esi 0000.1111.1111.1111.1111
undo dcn
undo dcn mode vlan
#
interface Ethernet1/0/1
undo shutdown
ip address 13.1.1.1 255.255.255.0
mpls
mpls ldp
undo dcn
undo dcn mode vlan
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
bgp 100
router-id 1.1.1.1
undo default ipv4-unicast
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
undo peer 2.2.2.2 enable
#
l2vpn-family evpn
undo policy vpn-target
peer 2.2.2.2 enable
#
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.0 0.0.0.255
#
undo dcn
#
evpn source-address 1.1.1.1
#
NE2:
evpn vpn-instance 2
route-distinguisher 2:2
vpn-target 2:2 export-extcommunity
vpn-target 2:2 import-extcommunity
vpn-target 1:1 import-extcommunity
#
mpls lsr-id 2.2.2.2
mpls
mpls ldp
#
interface Ethernet1/0/0
undo shutdown
ip address 23.1.1.2 255.255.255.0
mpls
mpls ldp
undo dcn
undo dcn mode vlan
#
interface Ethernet1/0/1
undo shutdown
evpn binding vpn-instance 2
esi 0000.2222.2222.2222.2222
undo dcn
undo dcn mode vlan
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
bgp 100
router-id 2.2.2.2
undo default ipv4-unicast
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
undo peer 1.1.1.1 enable
#
l2vpn-family evpn
undo policy vpn-target
peer 1.1.1.1 enable
#
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.0 0.0.0.255
#
undo dcn
#
lldp enable
#
evpn source-address 2.2.2.2
#
七、踩过的坑:
都配好了,各种表项都有,但是!就是不通,最后发现:EVPN vpn-instance 的 vpn-target 配置不对,我明明配置了 undo policy vpn-target 了呀!最后,虫子大佬给我排错:如果是“路过”的路由比如反射器、中间路由器,是可以收发的,但是如果到了对端,还不配置 vpn-target x:y import-extcommunity,那就无法进入实例表项,最后当然不通啦!
查看这个表项,在 RT 值不对的情况下,Type 3 是完全收不到对端的路由的~!