EVPN除了可以做VxLAN控制平面外,还可以单独做EVPN的配置。
VPLS(虚拟专用局域网业务)是公用网络中提供的一种点到多点的L2VPN业务。 EVPN(以太网虚拟私有网络)用于解决VPLS存在的无法实现负载分担、网络部署困难、无法满足L2VPN灵活部署和CE多归属场景下提升链路利用率等问题。
VPLS
VPLS是一种基于以太网的二层VPN技术,VPLS首先在PE间建立一个承载隧道,然后创建PW(伪线),用于承载不同企业客户的业务,VSI(虚拟机交换实例)为每一个VPLS单独划分的一个虚拟交换处理单元,存放独立的MAC地址表和执行转发,并终结PW传递来的信息,即VSI实例传递过程中的封装和解封装 AC(接入电路)指CE与PE之间的链路。PW和VSI绑定在接口上后,VSI像交换机一样记录不同接口学习的MAC地址,并生成MAC地址表项。 VPLS模拟交换机,MAC地址学习依靠数据平面泛洪,没有控制平面参与。 转发行为由查询MAC地址表决定,如果MAC地址表有记录则查表转发,没有记录则泛洪转发。
EVPN
EVPN引入控制面学习MAC和IP指导数据转发,实现了转控分离。 如上,PE1在控制平面交互BGP EVPN报文时将CE1的IP、MAC通告给其他邻居,后续CE2访问CE1时,PE3无需广播泛洪,可以直接根据表项转发到PE1去往CE1。
EVPN相关概念
ES:表示用户站点(设备或网络)连接到PE的一组以太链路,使用ESI(Ethernet Segment Identifier)来标识。
EVI:表示一个EVPN实例,用于标识一个EVPN客户。
MAC-VRF是PE上属于EVI的MAC地址表。
RD:EVPN的唯一标识,用于区分EVI。
RT:用于控制EVPN路由的引入。
DF:用于在CE多归属场景下只转发一份BUM流量至CE。
ESI Label是EVPN Type 1路由所携带的扩展团体属性。在多归场景下,用于实现快速收敛和水平分割。
BUM(广播、未知单播、组播报文)Label是由Type 3路由携带,用于转发BUM流量。
单播Label由Type 2路由携带,用于转发单播流量。
EVPN的四种类型路由: EVPN工作流程: 上图中CE1连接两个PE出口,即为多归属场景。 如上: MAC-VRF表用于记录已知单播流量的转发。 BUM流量转发表用于指导广播、未知单播和组播流量转发。 ES成员表用于记录用户接入PE信息。
EVPN相关实验
::: warning NE设备接口和OSPF默认使能DCN相关功能,为避免未知BUG,先将NE设备的DCN功能去使能。 :::
[NE1]undo dcn
[NE2]undo dcn
[NE3]undo dcn
建立IGP公网隧道
[NE1]ospf router-id 10.1.1.1
[NE1-ospf-1]area 0
[NE1]int Ethernet 1/0/0
[NE1-Ethernet1/0/0]ip ad 10.1.12.1 24
[NE1-Ethernet1/0/0]ospf e a 0
[NE1-LoopBack0]ip ad 1.1.1.1 32
[NE1-LoopBack0]ospf e a 0
[NE2]ospf router-id 10.2.2.2
[NE2-ospf-1]area 0
[NE2]int Ethernet 1/0/0
[NE2-Ethernet1/0/0]ip ad 10.1.12.2 24
[NE2-Ethernet1/0/0]ospf e a 0
[NE2-Ethernet1/0/1]ip ad 10.1.23.2 24
[NE2-Ethernet1/0/1]ospf e a 0
[NE2-LoopBack0]ip ad 2.2.2.2 32
[NE2-LoopBack0]ospf e a 0
[NE3]ospf router-id 10.3.3.3
[NE3-ospf-1]area 0
[NE3]int Ethernet 1/0/0
[NE3-Ethernet1/0/0]ip ad 10.1.23.3 24
[NE3-Ethernet1/0/0]ospf e a 0
[NE3-LoopBack0]ip ad 3.3.3.3 32
[NE3-LoopBack0]ospf e a 0
建立LDP私网隧道
[NE1]mpls lsr-id 1.1.1.1
[NE1]mpls
[NE1]mpls ldp
[NE1]int Ethernet 1/0/0
[NE1-Ethernet1/0/0]mpls
[NE1-Ethernet1/0/0]mpls ldp
[NE2]mpls lsr-id 2.2.2.2
[NE2]mpls
[NE2]mpls ldp
[NE2]int Ethernet 1/0/0
[NE2-Ethernet1/0/0]mpls
[NE2-Ethernet1/0/0]mpls ldp
[NE2]int Ethernet 1/0/1
[NE2-Ethernet1/0/1]mpls
[NE2-Ethernet1/0/1]mpls ldp
[NE3]mpls lsr-id 3.3.3.3
[NE3]mpls
[NE3]mpls ldp
[NE3]int Ethernet 1/0/0
[NE3-Ethernet1/0/0]mpls
[NE3-Ethernet1/0/0]mpls ldp
建立EVPN邻居
[NE1]bgp 100
[NE1-bgp]peer 2.2.2.2 as-number 100
[NE1-bgp]peer 2.2.2.2 co lo 0
[NE1-bgp]undo peer 2.2.2.2 enable
[NE1-bgp]l2vpn-family evpn
[NE1-bgp-af-evpn]peer 2.2.2.2 enable
[NE2]bgp 100
[NE2-bgp]peer 1.1.1.1 as-number 100
[NE2-bgp]peer 1.1.1.1 co lo 0
[NE2-bgp]undo peer 1.1.1.1 enable
[NE2-bgp]peer 3.3.3.3 as-number 100
[NE2-bgp]peer 3.3.3.3 co lo 0
[NE2-bgp]undo peer 3.3.3.3 enable
[NE2-bgp]l2vpn-family evpn
[NE2-bgp-af-evpn]peer 1.1.1.1 enable
[NE2-bgp-af-evpn]peer 1.1.1.1 reflect-client
[NE2-bgp-af-evpn]peer 3.3.3.3 enable
[NE2-bgp-af-evpn]peer 3.3.3.3 reflect-client
[NE3]bgp 100
[NE3-bgp]peer 2.2.2.2 as-number 100
[NE3-bgp]peer 2.2.2.2 co lo 0
[NE3-bgp]undo peer 2.2.2.2 enable
[NE3-bgp]l2vpn-family evpn
[NE3-bgp-af-evpn]peer 2.2.2.2 enable
如上建立EVPN邻居关系,绑定站点后,会自动通告type 3路由。
参考VxLAN,设置NVE隧道的VTPE地址后,会出现type 3路由。
[NE1]evpn source-address 1.1.1.1 用于建立私网隧道
[NE1]evpn vpn-instance A 设置EVPN实例
[NE1-evpn-instance-A]route-distinguisher 10:1
[NE1-evpn-instance-A]vpn-target 1:1
[NE3]evpn source-address 3.3.3.3
[NE3]evpn vpn-instance B
[NE3-evpn-instance-B]route-distinguisher 10:3
[NE3-evpn-instance-B]vpn-target 1:1
NE1设备ETH1/0/0抓包: 如上,设置了EVPN源地址及EVPN实例和实例RD值后,BGP发送update报文通告type 3路由描述自身VTEP地址(RT值只做对应接收)。NE1使用EVPN源地址1.1.1.1和CE3建立EVPN私网隧道。
接口绑定EVPN实例
[NE1-Ethernet1/0/1]evpn binding vpn-instance A
[NE3-Ethernet1/0/1]evpn binding vpn-instance B
type 4和type 1路由无法观察实验现象,直接观察type 2路由。 AR接口地址配置后,会自动通告ARP信息,NE设备接收到该ARP信息后,产生对应MAC表项,并通过type 2路由传递给对端。
[AR1-GigabitEthernet0/0/0]ip ad 10.1.1.1 24
如上,AR1配置接口地址后发给CE1,CE1产生type 2路由。 查看NE1向NE2通告的type 2路由详细信息: NE1向邻居通告时携带私网标签48122: NE3经过NE2的反射,收到AR1的信息:
[AR2-GigabitEthernet0/0/0]ip ad 10.1.1.2 24
AR2配置接口IP后可以直接与AR1通信: NE2上查看私网标签:
NE3侧私网标签上封装公网标签流程: 如上,NE3上封装私网标签48122,下一跳1.1.1.1,查看MPLS LSP表: 如上,NE3封装公网标签48120向下传递:
增加NE2和NE4的OSPF、BGP底层邻居关系配置,增加NE4 MPLS配置
[NE4]evpn source-address 4.4.4.4
[NE4]evpn vpn-instance C bd-mode 添加bd-mode参数变为二层EVPN实例,用于绑定BD
[NE4-evpn-instance-C]route-distinguisher 10:4
[NE4-evpn-instance-C]vpn-target 1:1
子接口对接
[NE4]bridge-domain 10
[NE4-bd10]evpn binding vpn-instance C
[NE4]int Ethernet 1/0/1.1 mode l2 子接口连接(大)二层网络,端口模式设置为二层,接口需要解封装标签信息(类似VxLAN连接站点设备接口)
[NE4-Ethernet1/0/1.1]encapsulation dot1q vid 10 该命令只在发给站点AR3时具备打标签的作用
[NE4-Ethernet1/0/1.1]rewrite pop single 该命令只在接收站点数据时具备剥离标签的作用
[NE4-Ethernet1/0/1.1]bridge-domain 10 最后绑定BD,否则rewrite pop single无法执行
[AR3-GigabitEthernet0/0/0.1]dot1q termination vid 10
[AR3-GigabitEthernet0/0/0.1]arp broadcast enable
[AR3-GigabitEthernet0/0/0.1]ip ad 10.1.1.3 24
::: tip 上述NE4在第一次进入子接口时如没有加mode l2参数,需要undo该接口重新进入子接口,后续可以不加mode l2参数直接进入。
PE设备子接口连接大二层网络,即连接的站点在一个桥域内,只能通过BD绑定EVPN实例。 BD域针对二层交换网络。 EVPN实例针对三层网络。 ::: ::: warning NE设备子接口绑定BD时需要注意顺序,绑定BD命令需要在剥离标签命令之后执行。 ::: 如上配置后,三台AR可以互相通信。
上述拓扑为同子网EVPN通信,修改为不同子网(三层数据通信)。
[NE1]undo evpn vpn-instance A
[NE1]evpn vpn-instance 1
[NE1-vpn-instance-1]rou 100:1
[NE1-vpn-instance-1-af-ipv4]vpn-target 10:10 evpn
[NE1-vpn-instance-1]evpn mpls routing-enable 将VPN路由转换为EVPN路由
[NE1]ospf 2 router-id 10.1.1.1 vpn-instance 1
[NE1-Ethernet1/0/1]ip binding vpn-instance 1
[NE1-Ethernet1/0/1]ip ad 10.1.1.254 24
[NE1-Ethernet1/0/1]ospf enable 2 area 0
[AR1]ospf router-id 10.10.10.1
[AR1-ospf-1]area 0
[AR1-GigabitEthernet0/0/0]ip ad 10.1.1.1 24
[AR1-GigabitEthernet0/0/0]ospf e a 0
[NE3]undo evpn vpn-instance B
[NE3]ip vpn-instance 2
[NE3-vpn-instance-2]route-distinguisher 100:3
[NE3-vpn-instance-2-af-ipv4]vpn-target 10:10 evpn
[NE3-vpn-instance-2]evpn mpls routing-enable
[NE3]ospf 2 router-id 10.3.3.3 vpn-instance 2
[NE3-ospf-2]area 0
[NE3-Ethernet1/0/1]ip binding vpn-instance 2
[NE3-Ethernet1/0/1]ip ad 10.2.2.254 24
[NE3-Ethernet1/0/1]ospf enable 2 area 0
[AR2]ospf router-id 10.10.10.2
[AR2-ospf-1]area 0
[AR2-GigabitEthernet0/0/0]ip ad 10.2.2.2 24
[AR2-GigabitEthernet0/0/0]ospf e a 0
::: warning EVPN L3VPN业务场景中,公网隧道采用MPLS或SR-MPLS隧道时需要在VPN实例中执行evpn mpls routing-enable命令,使能EVPN生成和发布IP前缀路由和IRB路由的功能,使本端设备向EVPN对等体发布IP前缀路由和IRB路由。 当公网隧道采用非MPLS类型隧道时,无需配置此命令。 :::
AR1和AR2的环回口通信(跨子网通信)
[AR1-LoopBack0]ip ad 100.1.1.1 32
[AR1-LoopBack0]ospf enable area 0
[AR2-LoopBack0]ip ad 100.3.3.3 32
[AR2-LoopBack0]ospf enable area 0
[NE1-bgp]ipv4-family vpn-instance 1
[NE1-bgp-1]import-route ospf 2 将OSPF路由引入转换为VPNv4路由
[NE1-bgp-1]advertise l2vpn evpn 将VPNv4路由转换为EVPN路由
[NE1-ospf-2]import-route bgp 将对方发来的BGP EVPN路由引入OSPF进程2
[NE3-bgp]ipv4-family vpn-instance 1
[NE3-bgp-1]import-route ospf 2 将OSPF路由引入转换为VPNv4路由
[NE3-bgp-1]advertise l2vpn evpn 将VPNv4路由转换为EVPN路由
[NE3-ospf-2]import-route bgp 将对方发来的BGP EVPN路由引入OSPF进程2
实现跨子网访问:
概念详解
DF选举 如下,多个PE连接一个CE时,需要选出1个PE转发BUM流量给CE,即DF选举:
ESI ES是EVPN VxLAN场景中CE设备接入PE设备的接口。如果CE多归接入两个或多个NVE接口,一组CE接入PE的以太链路就是一个ES,这个ES的唯一标识就是ESI。ESI配置在PE连接CE的接口。
ESI标签水平分割防止了DF选举出的PE将一个ES发来的流量,通过其他连接该ES的非DF PE设备再转发回去。* 如下,由于ESI标签的存在,PE2不会将BUM流量发给PE1: 如上,ESI相等的成员在同一张表内。 ::: tip PE设备通过type 4路由传递ESI和进行DF选举。 PE不会接收ESI标签在ES成员信息表中的流量。 :::
EVPN流量负载分担 EVPN负载分担一定是分担不同的流量: 否则对端会收到重复的流量。 ::: warning 负载分担和ESI水平分割不冲突。 :::
EVPN故障收敛 EVPN通过BGP进行MAC学习,复杂网络路由收敛时间长。定义了高效通知对端PE更新转发表的机制。 当PE到CE的主路径故障或DF失效时,DF会向PE邻居发送type 1路由(Ethernet A-D per ES route),一次性全部撤销本端通告的所有路由信息,后续流量都由备份路径转发。
EVPN路由
EVPN路由关键参数:
- Type 1路由携带ESI标签用于实现水平分割。
- Type 2路由携带单播标签指导单播流量转发。
- Type 3路由携带BUM标签指导BUM流量转发,但Type 3路由未携带ES相关信息。
- Type 4路由携带ESI用于DF选举,但Type 4路由未携带任何标签信息。
type 1以太自动发现路由
- Ethernet A-D per ES route:主要用于快速收敛、冗余模式和水平分割。
- Ethernet A-D per EVI route:主要用于别名。
ESI标签是type 1路由的扩展团体属性,用于多归场景下的水平分割和快速收敛,由Ethernet A-D per ES route携带。 如上,当PE2没有学习到CE1的MAC地址时,PE3中只有PE1的type 2路由通告(PE3只认为PE1可达CE1),不能实现负载均衡。PE2通告Ethernet A-D per EVI route,同样携带ESI标签,PE3收到后根据ESI标签判断去往CE1时PE1和PE2都可达(相同的ESI表示连接的是同一个站点)。 ::: tip PE2上没有CE1的MAC,PE3将数据发到PE2后做ARP解析(广播泛洪)。 :::
type 4以太网段路由
以太网段路由主要用于DF选举。 type 4路由携带ES-Import RT扩展团体属性。ES-Import通过设置RT值实现ES的路由过滤。 多归场景下只有一个PE被选为DF,DF在指定的ES上向CE发送携带ES-Import属性的Type 4路由。