上述问题可以使用VxLAN解决。
VxLAN概念
VxLAN是一种大二层技术,突破了VLAN ID只有4k(0-4095)的限制,允许通过现有的IP网络进行隧道的传输。 VxLAN通过将原主机发出的数据包封装在UDP中,使用物理网络的IP、MAC作为外层头进行封装,在IP网络上传输,到达目的地后由隧道终点解封装并将数据发送给目标主机。 ::: tip 之前站点的概念在VxLAN中变为租户。 ::: VxLAN是实现园区网络虚拟化的关键,属于NVO3中的一种网络虚拟化技术。
NVO3基本原理:将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP、MAC作为outer-header(外部封装层)进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标虚拟机。
由于封装报文叠加在三层IP网络上,承载网络中的IP设备(包括路由器、交换机等)在处理封装后的报文时,直接按照原有转发能力进行处理,即NVO3类似于传统的三层隧道技术。
NVo3:在3层之上进行网络虚拟化。
Underlay network:底层网络,即交换机路由器等网络基础设施(IGP相互连通的IP网络)
Underlay是一张承载网,由各类物理设备构成,如TOR交换机、汇聚交换机、核心交换机、负载均衡设备与防火墙设备等。实施Overlay技术后,会在Underlay网络基础上形成一张逻辑网
Overlay network:重叠网,即建立在现有网络之上的二层虚拟网络
Overlay技术实际上是一种隧道封装技术,主要有VxLAN、NVGRE等,基本原理都是通过隧道封装的方式将二层报文进行封装后在现有网络中进行透明传输,到达目的地之后再解封装得到原始报文,相当于一个大二层网络叠加(Overlay)在现有的网络之上
数据中心业务均由VXLAN承载。 数据中心采用Spine-Leaf两层物理架构,结合VxLAN。 Spine节点执行路由转发,转发时不感知VxLAN。Leaf节点负责资源接入,完成VxLAN封装及解封装。 如下:
VxLAN基本概念:
VXLAN报文格式:
如上,VxLAN规定默认的UDP端口号为4789,每个VxLAN数据包都会使用这个端口号进行传输。
1.NVE:网络虚拟化边缘设备(实际是执行VxLAN报文封装与解封装的设备)
NVE在三层网络上构建二层虚拟网络,是运行VxLAN的设备
2.VTEP:VxLAN隧道端点,封装在NVE中,用于VxLAN报文的封装和解封装
VTEP与物理网络相连,分配有物理网络的IP地址,该地址与虚拟网络无关
VTEP地址全网唯一,一台NVE设备存在一个或多个VTEP地址,两个VTEP地址可以唯一确定一条VxLAN隧道
VxLAN报文(外层IP头部)中源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址
3.VNI和BD:
VNI:VxLAN网络标识(在三层网络内区分不同的广播域)
VNI类似于VLAN ID的标识,主要区分VxLAN中不同的广播域(子网),每个VNI代表VxLAN网络中的一个广播域
同一VNI的网络可以直接Vxlan二层通信,不同VNI的网络需要Vxlan三层通信
VLAN ID是12bit;VNI是24bit
BD:桥域(用来区分不同的广播域,在连接VxLAN的租户网络上做区分)
BD将租户的数据准确送入对应VNI隧道中,BD标识一个大二层广播域
在一个多台设备使用VxLAN、NVE、VTEP组成的虚拟交换机内部,使用VNI做隔离,在虚拟交换机外(传统网络中)使用BD对接VNI。BD和VNI一一对应,同一个BD内的终端可以进行二层互通
VxLAN业务接入时,VAP(虚拟接入点)配置方式有二层子接口或VLAN绑定两种,使得用户数据进入隧道。
- 二层子接口方式接入。 如下在SW1创建二层子接口关联BD 10,则这个子接口下的特定流量会被注入到BD 10。
- VLAN绑定方式接入。 如下在SW2配置VLAN 10与广播域BD 10关联,则所有VLAN10的流量会被注入到BD 10。
4.border、edge:
border设备是VxLAN网络中用于连接外部网络的设备
实现VxLAN内部访问外部的流量
实现外部访问VxLAN内部的流量
edge设备是VxLAN网络中用于连接租户网络的设备
进行VxLAN报文的封装与解封装
5.VxLAN网关概念:
2层网关:租户终端的接入设备,用于同子网通信
3层网关:租户网络的接入设备,用于不同子网通信,或者VxLAN与非VxLAN网络的通信
6.VBDif:类似于VLANif,配置VxLAN隧道网关地址
接口的编号需要与BD的编号一致,是基于BD域创建的三层逻辑接口(不是基于VNI的)
用于不同VNI之间的Vxlan、以及Vxlan和非Vxlan之间的通信
集中式与分布式网关部署:
VxLAN虚拟化的概念: VxLAN网络需要经过两次虚拟化 1.第一次NVE设备之间使用VTEP地址建立VxLAN隧道(相当于将整个三层网络构建为一台交换机)
VxLAN隧道建立方式
VxLAN隧道由一对VTEP确定,报文在NVE封装之后在VxLAN隧道依靠路由进行传输。只要VxLAN隧道的两端VTEP是三层路由可达的,VxLAN隧道就可以建立成功。 VxLAN隧道的创建方式将VxLAN隧道分为以下两种:
- 静态隧道:通过用户手工配置本端和远端的VNI、VTEP IP地址和头端复制列表来完成。
- 动态隧道:通过BGP EVPN(以太网虚拟私有网络)方式动态建立VxLAN隧道。 在VTEP之间建立BGP EVPN对等体,对等体之间利用BGP EVPN路由互相传递VNI和VTEP IP地址信息,从而实现动态建立VxLAN隧道。 ::: warning
- 静态隧道配置头端复制列表(head-end peer-list):*
[CE1-Nve1]vni 10 head-end peer-list 2.2.2.2 [CE1-Nve1]vni 10 head-end peer-list 3.3.3.3 或 [CE1-Nve1]vni 10 head-end peer-list 2.2.2.2 3.3.3.3
- 上述配置正确,但ENSP不支持同时设置多个邻居列表。* 如果配置了多个邻居列表,CE1会将对方地址发给每一个邻居做地址解析。 如上,CE1会再发送一个SIP为1.1.1.1,DIP为2.2.2.2的ARP报文。
- CE2下没有连接站点,不会向CE1回复,CE3得到PC2的地址返回给CE1后,CE1会将PC2的MAC地址绑定在CE3下,可以在CE1的NVE1下查看mac-address:* :::
VxLAN工作原理
::: warning CE12800设备使用VRP 8系统(NE40E等高端设备一般都采用VRP 8)。 如上VRP8系统执行命令后需要commit手动提交生效。
<CE1>sy immediately 系统视图下添加该命令可以立即执行生效,不需要上送提交
CE设备接口默认关闭,需要手动undo shutdown。 CE12800是交换机,接口默认是二层,需要手动undo portswitch。 (环回口默认开启三层) :::
(VxLAN静态同子网通信)
[CE1]ospf router-id 10.1.1.1
[CE1-ospf-1]area 0
[CE1]int ge 1/0/1
[CE1-GE1/0/1]undo shutdown
[CE1-GE1/0/1]undo portswitch
[CE1-GE1/0/1]ip ad 10.1.12.1 24
[CE1-GE1/0/1]ospf enable area 0
[CE1-LoopBack0]ip ad 1.1.1.1 32
[CE1-LoopBack0]ospf enable area 0
[CE2]ospf router-id 10.2.2.2
[CE2-ospf-1]area 0
[CE2]int ge 1/0/0
[CE2-GE1/0/0]undo shutdown
[CE2-GE1/0/0]undo portswitch
[CE2-GE1/0/0]ip ad 10.1.12.2 24
[CE2-GE1/0/0]ospf enable area 0
[CE2]int ge 1/0/1
[CE2-GE1/0/1]undo shutdown
[CE2-GE1/0/1]undo portswitch
[CE2-GE1/0/1]ip ad 10.1.23.2 24
[CE2-GE1/0/1]ospf enable area 0
[CE2-LoopBack0]ip ad 2.2.2.2 32
[CE2-LoopBack0]ospf enable area 0
[CE3]ospf router-id 10.3.3.3
[CE3-ospf-1]area 0
[CE3]int ge 1/0/1
[CE3-GE1/0/1]undo shutdown
[CE3-GE1/0/1]undo portswitch
[CE3-GE1/0/1]ip ad 10.1.23.3 24
[CE3-GE1/0/1]ospf enable area 0
[CE3-LoopBack0]ip ad 3.3.3.3 32
[CE3-LoopBack0]ospf enable area 0
CE设备建立OSPF时不会提示日志,需要手动dis ospf peer brief查看邻居关系是否建立成功。 ::: tip 如果CE设备直连无法通信,可以保存配置后关机重启CE。 :::
[SW1]vlan 10
[SW1-GigabitEthernet0/0/1]port link-type trunk
[SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10
[SW1-GigabitEthernet0/0/2]port link-type access
[SW1-GigabitEthernet0/0/2]port default vlan 10
[SW2]vlan 20
[SW2-GigabitEthernet0/0/1]port link-type trunk
[SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 20
[SW2-GigabitEthernet0/0/2]port link-type access
[SW2-GigabitEthernet0/0/2]port default vlan 20
[CE1]bridge-domain 10 创建BD域,值与VLAN ID值可以不同
[CE1-bd10]vxlan vni 10 BD域绑定VNI,VNI连接CE1和CE3,BD域值与VNI值可以不同
VxLAN业务接入时使用VAP(使用子接口接入)
[CE1-GE1/0/0]undo shutdown 物理接口开启,不需要开启三层接口
[CE1]int ge 1/0/0.1 mode l2 选择二层子接口
[CE1-GE1/0/0.1]bridge-domain 10 子接口绑定BD域10
[CE1-GE1/0/0.1]encapsulation dot1q vid 10 子接口处理VLAN 10的数据
[CE3]bridge-domain 20
[CE3-bd20]vxlan vni 10
[CE3-GE1/0/0]undo shutdown
[CE3]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0.1]bridge-domain 20
[CE3-GE1/0/0.1]encapsulation dot1q vid 20
::: warning
[CE1]int ge 1/0/0.1
Error: The port does not support sub-interface, because the port is not layer 3 mode.
如上,CE设备直接进入子接口时,默认是三层子接口。 :::
[CE1]interface Nve 1 NVE隧道接口号只有1和2可选
[CE1-Nve1]source 1.1.1.1 设置本端VTEP地址
[CE1-Nve1]vni 10 head-end peer-list 3.3.3.3 与VNI 10对接,对端VTEP为3.3.3.3
[CE3]interface Nve 2
[CE3-Nve2]source 3.3.3.3
[CE3-Nve2]vni 10 head-end peer-list 1.1.1.1
::: tip VxLAN使用NVE的隧道接口。 :::
::: warning 如上,NVE中向对端指定的VNI和BD域中绑定的VNI必须一致,否则VNI隧道中VNI隧道状态DOWN。 ::: 如上PC互访时,NVE设备GE1/0/0接口抓包,ICMP报文封装IP报头源目IP地址和MAC地址,封装VxLAN头部和UDP端口号,封装源目IP(NVE隧道设置的VTEP地址)和MAC。 ::: tip PC1访问PC2流程: CE1收到VLAN 10的数据,GE1/0/0.1子接口的VID 10接收,对应在子接口配置的BD域10,BD域10与NVE的VNI 10对应,NVE中本端VTEP为1.1.1.1,VNI 10对应的邻居VTEP为3.3.3.3,封装地址信息后转发到CE3。 ::: 如上,PC互访由于需要MAC地址,会发送广播的ARP解析报文,经过SW1处理后携带VLAN 10标签,VxLAN封装后由于携带了VNI 10,对应邻居CE3,CE3有单独的单播MAC地址,即从广播数据帧转换为单播数据帧。
CE设备接收到不带VLAN标签的数据处理
QinQ即802.1Q-in-802.1Q,是在802.1Q标签报文的基础上再增加一层802.1Q的Tag,以扩展VLAN空间。
[CE1-GE1/0/0.1]encapsulation ?
default 接收站点数据:
不管数据是否携带VLAN tag,不对原始报文进行处理(不添加、不替换、不剥离),直接接收
向站点发送:
收到VxLAN报文,不对原始报文做处理(不添加、不替换、不剥离),直接转发
dot1q 接收站点数据:
站点发送的数据必须是携带VLAN tag的数据,并且根据vid值解封装vlan tag(剥离vlan tag),收到没有VLAN tag的数据直接丢弃
向站点发送:
收到VxLAN报文,如果内层携带VLAN tag,不对原有的VLAN tag做处理,再封装一层本接口配置的VID,进行发送
收到VxLAN报文,如果内层不携带VLAN tag,使用接口配置的VID进行封装,进行转发
untag 接收站点数据:
站点发送的数据必须是不携带vlan tag的数据,不会原始报文进行处理
向站点发送:
收到VxLAN报文,如果内层携带VLAN tag,将VLAN tag 剥离后转发
收到VxLAN报文,如果内层不携带VLAN tag,则直接转发
::: warning default设置:
- 主接口不能存在任何VLAN(默认接口存在VLAN 1,需要undo VLAN 1)。
- 该物理接口下的子接口不能存在其他的封装类型,即主接口下如果有一个子接口配置了default封装,其他子接口都不能配置其他封装类型。
- 一个主接口下只能配置一个default封装的子接口。(但可以存在多个其他封装类型的子接口) :::
VxLAN通信实验(同租户)
底层配置
[CE1]ospf router-id 10.1.1.1
[CE1-ospf-1]area 0
[CE1-GE1/0/1]undo shutdown
[CE1-GE1/0/1]undo portswitch
[CE1-GE1/0/1]ip ad 10.1.12.1 24
[CE1-GE1/0/1]ospf enable area 0
[CE1-LoopBack0]ip ad 1.1.1.1 32
[CE1-LoopBack0]ospf enable area 0
[CE2]ospf router-id 10.2.2.2
[CE2-ospf-1]area 0
[CE2-GE1/0/0]undo shutdown
[CE2-GE1/0/0]undo portswitch
[CE2-GE1/0/0]ip ad 10.1.12.2 24
[CE2-GE1/0/0]ospf enable area 0
[CE2-GE1/0/1]undo shutdown
[CE2-GE1/0/1]undo portswitch
[CE2-GE1/0/1]ip ad 10.1.23.2 24
[CE2-GE1/0/1]ospf enable area 0
[CE2-LoopBack0]ip ad 2.2.2.2 32
[CE2-LoopBack0]ospf enable area 0
[CE3]ospf router-id 10.3.3.3
[CE3-ospf-1]area
[CE3-GE1/0/0]undo shutdown
[CE3-GE1/0/0]undo portswitch
[CE3-GE1/0/1]undo shutdown
[CE3-GE1/0/1]undo portswitch
[CE3-GE1/0/1]ip ad 10.1.23.3 24
[CE3-GE1/0/1]ospf enable area 0
[CE3-LoopBack0]ip ad 3.3.3.3 32
[CE3-LoopBack0]ospf enable area 0
[SW1]vlan batch 10 20
[SW1-GigabitEthernet0/0/1]port link-type access
[SW1-GigabitEthernet0/0/1]port default vlan 10
[SW1-GigabitEthernet0/0/2]port link-type access
[SW1-GigabitEthernet0/0/2]port default vlan 20
[SW1-GigabitEthernet0/0/3]port link-type trunk
[SW1-GigabitEthernet0/0/3]port trunk allow-pass vlan 10 20
[SW1]vlan batch 10 40
[SW1-GigabitEthernet0/0/1]port link-type access
[SW1-GigabitEthernet0/0/1]port default vlan 10
[SW1-GigabitEthernet0/0/2]port link-type access
[SW1-GigabitEthernet0/0/2]port default vlan 40
[SW1-GigabitEthernet0/0/3]port link-type trunk
[SW1-GigabitEthernet0/0/3]port trunk allow-pass vlan 10 40
对接配置
[CE1-GE1/0/0]undo shutdown 不需要三层接口
[CE1]bridge-domain 10 BD域值没有要求,对应即可,为了配置维护方便一般设置VLAN ID相同的值
[CE1-bd10]vxlan vni 10 VNI值没有要求,对应即可,为了配置维护方便一般设置VLAN ID相同的值
[CE1]int ge 1/0/0.1 mode l2
[CE1-GE1/0/0.1]encapsulation dot1q vid 10 解封装VLAN 10的数据
[CE1-GE1/0/0.1]bridge-domain 10 绑定BD域
[CE1]bridge-domain 20
[CE1-bd20]vxlan vni 20
[CE1]int ge 1/0/0.2 mode l2
[CE1-GE1/0/0.2]encapsulation dot1q vid 20
[CE1-GE1/0/0.2]bridge-domain 20
[CE3]bridge-domain 10
[CE3-bd30]vxlan vni 10
[CE3-bd30]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0.1]encapsulation dot1q vid 10
[CE3-GE1/0/0.1]bridge-domain 10
[CE3]bridge-domain 20
[CE3-bd40]vxlan vni 20
[CE3-bd30]int ge 1/0/0.2 mode l2
[CE3-GE1/0/0.2]encapsulation dot1q vid 20
[CE3-GE1/0/0.2]bridge-domain 20
VxLAN隧道配置
[CE1]int Nve 1
[CE1-Nve1]source 1.1.1.1
[CE1-Nve1]vni 10 head-end peer-list 3.3.3.3 NVE隧道中VNI 10对应的连接对端3.3.3.3
此时CE1上VxLAN隧道建立完成,对端CE3可以收到CE1转发的数据: 但CE3没有配置VxLAN隧道,只能接收CE1的数据,不能向下转发。
[CE3-Nve1]source 3.3.3.3
[CE3-Nve1]vni 10 head-end peer-list 1.1.1.1
CE3配置隧道后,数据包可以正常解封装,完成同子网通信:
[CE1-Nve1]vni 20 head-end peer-list 3.3.3.3
[CE3-Nve1]vni 40 head-end peer-list 1.1.1.1
如上,CE1的VNI 20和CE3的VNI 40对接。 不同子网通信时,CE2不需要有业务信息,但需要存在VNI信息(VNI绑定在BD域中,即也需要存在BD域)。
[CE1-Nve1]vni 10 head-end peer-list 2.2.2.2
[CE2]bridge-domain 10
[CE2-bd10]vxlan vni 10
[CE2]int nve 1
[CE2-Nve1]source 2.2.2.2
[CE2-Nve1]vni 10 head-end peer-list 1.1.1.1
CE1和CE2建立隧道:
[CE2]int Vbdif 10 三层网关配置虚拟桥域接口
[CE2-Vbdif10]ip ad 192.168.1.254 24
::: warning Vbdif类似于vlanif,都是做三层通信,且都必须存在BD域(VLAN)后才能对应创建,Vbdif(vlanif)的值必须和BD域(vlan id)值一致。
[CE1-Nve1]undo vni 10
[CE1-Nve1]vni 10 head-end peer-list 2.2.2.2
由于模拟器问题,只能同时支持一个头端复制列表中的邻居建立连接,模拟器测试时只能测试同子网通信后删除头端列表后测试跨子网通信。 ::: 以上通过在CE1和CE2构建VxLAN隧道,实现了PC1到CE2的通信。
CE2和CE3构建VxLAN隧道
[CE2]bridge-domain 20
[CE2-bd20]vxlan vni 20
[CE2-Vbdif20]ip ad 192.168.2.254 24
[CE2-Nve1]vni 20 head-end peer-list 3.3.3.3
[CE3-Nve1]undo vni 20
[CE3-Nve1]vni 20 head-end peer-list 2.2.2.2
以上通过在CE2和CE3构建VxLAN隧道,实现了PC4到CE2的通信。
PC1和PC2实现跨子网通信:
BUM报文
BUM报文包括广播(B)、未知单播(U)、组播(M)。 交换机对于BUM报文的处理动作是泛洪。
CE设备对BUM报文的处理:
- 根据报文接收的接口(租户的连接接口)判断接口绑定的BD域,再根据BD域判断对应的VNI值。
- 判断完成后会对报文进行封装 (头端复制)。
- 将报文封装为单播报文,报文目标就是头部复制列表中的地址。列表中存在几个地址,就会将报文复制几份.
- CE设备对收到的回复写进MAC地址表。
即将租户执行泛洪的报文转为单播报文做转发。 如果CE设备本身已经存在记录,按照记录好的下一跳VTEP地址做转发。 ::: tip CE设备传输BUM流量时,CE设备的VTEP会首先将流量复制多份发送给头端复制列表中的所有对端VTEP,从而在Overlay网络中实现泛洪转发的效果。后续就会根据MAC地址表进行单播转发。 :::
NVE设备对BUM报文的处理:
- 根据头端复制列表将报文进行转换(转换为单播)。
- 不存在表项对应的MAC访问时,需要执行所有头端邻居的复制,即向所有邻居发送。
- 邻居回复的报文信息记录在MAC表项,后续的报文都是根据MAC地址表的单播访问。
PC1访问PC4后CE1上记录的MAC地址表项: 后续数据转发根据MAC地址表进行单播转发。 ::: warning PC1访问PC4时,首先发送ARP解析报文请求PC4 MAC地址,在CE1上封装VxLAN VNI 10,根据CE1头端复制列表中的2.2.2.2和3.3.3.3,分别发送ARP解析包给CE2和CE3,由于携带的VNI为10,CE3处理后从VNI 10对应的GE1/0/0.1子接口发出,目标设备错误。 CE1将数据包发送到CE2,CE2根据IP判断是跨网段通信,CE2作为3层网关,将自身MAC地址回复给PC1: (跨网段通信实际上第一步是解析网关MAC地址) ::: 如上是静态集中式网关(网关集中在同一台设备上),分布式网关只能做EVPN。
VxLAN通信实验(不同租户)
[CE2]ip vpn-instance A
[CE2-vpn-instance-A]route-distinguisher 100:1
[CE2-vpn-instance-B]route-distinguisher 200:1
[CE2]int Vbdif 10
[CE2-Vbdif10]ip binding vpn-instance A
[CE2-Vbdif10]ip ad 192.168.1.254 24
[CE2]int Vbdif 20
[CE2-Vbdif10]ip binding vpn-instance B
[CE2-Vbdif10]ip ad 192.168.2.254 24
如上配置后,PC1和PC4不同网段的设备无法通信,即不同租户实现隔离:
[CE2]ip route-static vpn-instance A 192.168.2.0 24 vpn-instance B VPN A表中添加192.168.2.0的路由对应VPN B表
[CE2]ip route-static vpn-instance B 192.168.1.0 24 vpn-instance A VPN B表中添加192.168.2.0的路由对应VPN A表
::: warning ENSP上同子网通信和跨子网通信不能同时实现。 :::
EVPN
EVPN一般通过BGP动态建立VPN隧道。
BGP EVPN通过扩展BGP协议新定义了几种BGP EVPN路由(在MP_REACH_NLRI属性中新定义了几种NLRI,称作EVPN NLRI)。(NLRI:网络层可达性消息)
这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此BGP EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。(VTEP:建立VxLAN隧道,主机信息:NVE设备连接主机和地址信息)
原有的VXLAN实现方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致数据中心网络存在很多泛洪流量。 为了解决这一问题,VXLAN引入了EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等特性,从而避免了不必要的数据流量泛洪。 EVPN通过扩展BGP协议新定义了几种BGP EVPN路由,这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此EVPN应用于VXLAN网络中,可以把原本依赖数据平面的VTEP发现和主机信息学习从数据平面转移到控制平面。
EVPN特点:
- 使用BGP做为控制平面
- 使用MPLS做为转发平面数据封装
- 引入Ethernetsegment标识(以太网数据标识)
- 引入ESI标签
- 引入DF机制
- 使用BGP通过MAC取代转发平面基于流量学习MAC地址操作
EVPN NLRI通过路径属性MP_REACH_NLRI携带,地址族标识符(AFI)为25,代表L2VPN(VxLAN),子地址族标识符(SAFI)为70,表示EVPN。
::: tip BGP EVPN与MPLS VPN类似,为了控制路由的发送、接收,BGP EVPN同样存在VPN实例的概念(EVPN实例),与传统的IP VPN实例相同,EVPN实例存在RD和RT值,传递路由时使用扩展团体属性携带EVPN实例RT值。 ::: EVPN实例与BD进行绑定,BD下的MAC地址表项会通过BGP EVPN路由进行传递,在传递时会携带BD绑定的EVPN实例ERT值,对端收到之后对比本地EVPN实例的IRT值,如果本端IRT和对端ERT匹配,将收到的EVPN路由放入本端对应的EVPN实例路由表,同时解析EVPN路由表获取MAC地址表项,放入本端与该EVPN实例绑定的BD的MAC地址表中。 EVPN实例的作用和VPN实例类似,都是判断本端路由和对端路由是否需要相互接收。
EVPN实例实验验证
EVPN同实例同子网通信: 上述拓扑中,CE设备间底层接口和环回口宣告OSPF,交换机放行VLAN 10。
[CE1-GE1/0/0]undo shutdown
[CE1]int ge 1/0/0.1 mode l2
[CE1-GE1/0/0.1]encapsulation dot1q vid 10
[CE3-GE1/0/0]undo shutdown
[CE3]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0.1]encapsulation dot1q vid 10
[CE1]evpn-overlay enable 全局开启EVPN功能
[CE1]bridge-domain 10
[CE1-bd10]vxlan vni 10
[CE1-bd10]evpn BD域中绑定EVPN
[CE1-bd10-evpn]route-distinguisher 10:1
[CE1-bd10-evpn]vpn-target 1:1
[CE1-GE1/0/0.1]bridge-domain 10 BD域绑定子接口
[CE3]evpn-overlay enable
[CE3]bridge-domain 10
[CE3-bd10]vxlan vni 10
[CE3]evpn 全局视图也可直接进入EVPN视图下
[CE3-bd10-evpn]route-distinguisher 10:3
[CE3-bd10-evpn]vpn-target 1:1
[CE3-GE1/0/0.1]bridge-domain 10
建立BGP邻居,配置EVPN
[CE1]bgp 100
[CE1-bgp]peer 3.3.3.3 as-number 100
[CE1-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[CE1-bgp]undo peer 3.3.3.3 enable
[CE1-bgp]l2vpn-family evpn
[CE1-bgp-af-evpn]peer 3.3.3.3 enable
[CE3]bgp 100
[CE3-bgp]peer 1.1.1.1 as-number 100
[CE3-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CE3-bgp]undo peer 1.1.1.1 enable 不需要IP v4的BGP邻居
[CE3-bgp]l2vpn-family evpn VxLAN是2层VPN
[CE3-bgp-af-evpn]peer 1.1.1.1 enable
[CE1]int Nve 1
[CE1-Nve1]source 1.1.1.1
[CE1-Nve1]vni 10 head-end peer-list protocol bgp 通过BGP建立隧道,不再单独指定邻居
[CE3]int Nve 1
[CE3-Nve1]source 3.3.3.3
[CE3-Nve1]vni 10 head-end peer-list protocol bgp
隧道建立成功后PC之间可以通信:
EVPN实例帮助BD域做连通(使用RT值)。 即同实例下,同子网通信需要本端BD域的ERT和对端BD域的IRT相匹配。 ::: warning ENSP上只能同时支持一个隧道通信,即CE1如果和CE2下其他CE也建立EVPN,只能有一个EVPN实现通信。 ::: EVPN可以通过RT值的设置,实现同租户(VNI)下的业务再隔离。
BGP EVPN路由
Type 3路由:Inclusive Multicast路由(集成组播路由)
1.两部分组成
前缀
RD
ETI
IP长度
IP地址(VTEP地址)
PMSI属性
flag
tunnel type 隧道类型,在VxLAN隧道中使用数值为6,标识支持头端复制
MPLS Lable 二层VNI值
tunnel id 隧道标识ID,对应VTEP地址
2.作用:在VxLAN控制平面,用于VTEP地址的自动发现和隧道自动建立
3.收发过程:
1.type3路由携带BD域中EVPN实例的ERT、VNI
2.对端(接收方)收到type3路由后,判断携带的ERT值和本端EVPN实例下配置的IRT相匹配,接收该路由
3.路由接收后,根据路由中携带的VTEP地址判断地址是否可达,如果可达则建立VxLAN隧道
4.再判断路由中携带的VNI值和本端BD域的VNI值是否相等,如果相等,则将VTEP地址加入到本地头端复制的列表中
Type 3路由报文中各字段解释: ::: tip BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。 Originating Router's lP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VxLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。 :::
Type 3路由实验
上图中CE之间建立OSPF和BGP关系,交换机放行VLAN,在CE1 GE1/0/0抓包。
[CE1]evpn-overlay enable
[CE1-bgp]l2vpn-family evpn
[CE1-bgp-af-evpn]peer 2.2.2.2 enable
[CE2]evpn-overlay enable
[CE2-bgp]l2vpn-family evpn
[CE2-bgp-af-evpn]peer 1.1.1.1 enable
[CE3]evpn-overlay enable
[CE3-bgp]l2vpn-family evpn
[CE3-bgp-af-evpn]peer 2.2.2.2 enable
[CE1]int Nve 1
[CE1-Nve1]source 1.1.1.1
[CE1-Nve1]vni 10 head-end peer-list protocol bgp
[CE3]int Nve 1
[CE3-Nve1]source 3.3.3.3
[CE3-Nve1]vni 10 head-end peer-list protocol bgp
如上配置后,VNI没有建立隧道,原因是VNI没有绑定BD域,没有对应租户使用。
[CE1]bridge-domain 10
[CE1-bd10]vxlan vni 10
[CE3]bridge-domain 10
[CE3-bd10]vxlan vni 10
如上配置后,VNI隧道建立,但是是DOWN状态:
[CE1-bd10]evpn
[CE1-bd10-evpn]route-distinguisher 10:1
[CE1-bd10-evpn]vpn-target 1:1
CE1配置EVPN后,每配置一个参数,CE1就会发送一个UPDATE报文:
EVPN路由表: 上图中EVPN实例的值对应VNI的值,即VNI要传递的集成组播路由是1.1.1.1,加上RD值等转换为EVPN路由。 查看BGP路由表中EVPN集成组播路由(Type 3)详细信息: 如上,类似于VPNv4路由。
[CE2-bgp-af-evpn]peer 1.1.1.1 reflect-client
[CE2-bgp-af-evpn]peer 3.3.3.3 reflect-client
[CE2-bgp-af-evpn]undo policy vpn-target CE2上没有EVPN实例,策略默认过滤EVPN路由
如上,CE2关闭策略过滤后,能接收到EVPN路由(不是EVPN实例路由,只有创建EVPN实例的设备才会接收到EVPN实例路由)。
[CE3]bridge-domain 10
[CE3-bd10]evpn
[CE3-bd10-evpn]route-distinguisher 100:3
[CE3-bd10-evpn]vpn-target 1:1
CE3设置EVPN实例后,RT值对应接收路由,将RD值10:1和10:3的EVPN路由都写入到自身的EVPN实例路由表中:
学习到路由信息后,构建VxLAN隧道:
Type2路由:MAC/IP路由
1.主机MAC地址通告
实现了同子网主机的二层互访,使用ARP路由通告
2.主机ARP路由通告(集中式网关场景下) 同租户通信
实现了跨子网主机的三层通信,使用ARP路由通告
1.ARP广播抑制
2.虚拟机迁移
3.主机IP路由通告(分布式网关场景下) 不同租户下通信
实现了跨子网主机的三层通信,使用IRB路由通告
Type 2路由报文中各字段解释:
二层VNI
[CE2-bd10]vxlan vni 10
三层VNI
[CE2-vpn-instance-A]vpn-target 2:2 evpn type 2跨租户跨实例使用三层VNI传递EVPN路由时加上evpn参数
[CE2-vpn-instance-A]vxlan vni 20
::: warning Type 3路由只有二层VNI,Type 2存在二层VNI和三层VNI。
二层标签和三层标签可以同时携带,但数据访问时只能封装一个。 EVPN实例之间使用三层VNI转发,转发到实例内部后,实例绑定BD域,BD域对应绑定二层VNI,即网关接收到三层VNI向下转发时,再次封装二层VNI。 ::: 不同场景下BGP EVPN的Type 2路由携带的内容仅前3字段保持一致:
主机MAC地址通告: 上图中同子网主机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隧道。
- 如果SW2上MAC地址表不存在对方表项,访问对方时执行头端复制列表转发,即变为泛洪,然后根据回包生成MAC地址表项。 ::: tip SW1接收到PC1的信息后会立刻生成一个update报文更新给对等体。 当SW1下的PC1迁移到SW2下,SW2会立刻更新出去,以便于其他设备访问PC1时直接发给SW2. :::
Type 2路由实验
(Type 3路由实验基础上继续配置)
[CE1-GE1/0/1]undo shutdown
[CE1]int ge 1/0/1.1 mode l2
[CE1-GE1/0/1.1]encapsulation dot1q vid 10
[CE1-GE1/0/1.1]bridge-domain 10
通告MAC地址,需要有ARP功能,即主机ARP通告。
需要配置三层网关
[CE2]bridge-domain 10
[CE2-bd10]vxlan vni 10
[CE2-bd10-evpn]route-distinguisher 100:2
[CE2-bd10-evpn]vpn-target 1:1
[CE2]int Vbdif 10
[CE2-Vbdif10]ip ad 192.168.1.254 24
[CE2-Vbdif10]arp collect host enable 收集主机信息
[CE2]int Nve 1
[CE2-Nve1]source 2.2.2.2
[CE2-Nve1]vni 10 head-end peer-list protocol bgp
查看CE2上的BGP EVPN路由: 查看BGP EVPN Type 2路由(主机MAC路由): 如上,EVPN实例路由转换成EVPN路由。 查看BGP EVPN Type 2路由(主机ARP路由): 如上,ARP路由和MAC路由的区别是ARP路由在MAC路由的基础上携带了IP地址。
CE1和CE3分别配置BD域10和BD域20,CE1和CE2建立VNI 10的隧道,CE2和CE3建立VNI 20的隧道,CE2上配置VPN实例(同租户下),配置Vbdif10和Vbdif20作为PC1和PC2的网关,Vbdif上配置arp collect host enable收集主机信息,PC访问网关时,CE2产生相应的BGP EVPN Type 2路由,发送给所有的BGP对等体CE设备(是否接收需要对比CE设备上的EVPN实例的RT值)。 假设CE4上有VNI 10,CE2将PC1的信息发给CE4,CE4xiadePC3访问PC时,在CE4上就可以单播发给PC1,不需要头端复制列表发给所有VNI 10的对等体。 ::: warning 静态时需要对等体上VNI相同才能接收,动态时都可以接收,但数据访问需要对端EVPN的RT值匹配。 :::
主机ARP通告主要应用在以下场景:
- 有序列表ARP广播抑制: 当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址)。 然后通过传递ARP类型路由将主机信息同步到二层网关上。当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息。如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。
- 分布式网关场景下的虚拟机迁移: 当一台虚拟机从当前网关迁移到另一个网关下之后, 新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现), 并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址), 然后通过传递ARP类型路由将主机信息发送给虚拟机的原网关。 原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。
::: tip ARP路由和MAC路由的区别:ARP路由在MAC路由的基础上携带了网关的IP地址。 :::
主机IP路由通告 分布式网关场景中实现跨子网主机的三层互访,两端VTEP(作为三层网关)需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IP路由。其中,IP Addres Length和IP Addres字段为主机IP路由的目的地址,同时MPLS Labe 2字段必须携带三层VNI,此时的MAC/IP路由也称为IRB类型路由。(类似于集中式网关的ARP路由)
::: tip ARP类型路由携带的有效信息:主机MAC地址+主机IP地址+二层VNI。 IRB类型路由携带的有效信息:主机MAC地址+主机IP地址+二层VNI+三层VNI。 因此,IRB类型路由包含着ARP类型路由,不仅可以用于主机IP路由通告,也能用于主机ARP通告。 ::: 如上,同租户同实例内,都是ARP类型路由,不需要三层VNI,不同租户跨VPN实例通信需要有三层VNI,即通告IRB路由。
VXLAN中有两种IRB转发模式,分别是对称IRB转发和非对称IRB转发,区别如下:
1. 对称IRB转发:
在入口VTEP和出口VTEP上都只做三层路由功能,如果是同一子网内的流量,则只做二层桥接功能
优点:简化了控制平面和数据平面的操作,提高了转发效率和可扩展性,避免了次优路径和ARP广播的问题
缺点:需要在VTEP上配置L3 VNI,需要在VTEP之间建立BGP EVPN对等关系,增加了配置复杂度
2. 非对称IRB转发:
在入口VTEP上需要同时做二层桥接和三层路由功能,而在出口VTEP上只需要做二层桥接功能
优点:减少了VTEP上的配置,不需要配置L3 VNI,也不需要在VTEP之间建立BGP EVPN对等关系,只需要在边界网关上建立BGP EVPN对等关系
缺点:增加了控制平面和数据平面的开销,导致了次优路径和ARP广播的问题,降低了转发效率和可扩展性。
::: tip IRB路由在文章末尾的分布式路由部分有详细说明。 :::
Type 5路由
Type 5路由(IP前缀路由):
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址xx
当携带主机IP地址时,Type 5路由在VxLAN控制平面中的作用与IRB路由相同,主要用于分布式网关场景中的主机IP路由通告
当携带网段地址时,通过传递该类型路由,可以实现VxLAN网络中的主机访问外部网络
Type 5路由将外网的路由转换成EVPN路由传递给自身的所有EVPN邻居。
Type 5路由实验(使用集中式网关,暂无法看到现象)
CE间底层OSPF均已建立
[CE1]evpn-overlay enable
[CE1-bgp]peer 2.2.2.2 as-number 100
[CE1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE1-bgp]undo peer 2.2.2.2 enable
[CE1-bgp-af-evpn]peer 2.2.2.2 enable
[CE1-bgp-af-evpn]peer 2.2.2.2 advertise arp
[CE2]evpn-overlay enable
[CE2-bgp]peer 1.1.1.1 as-number 100
[CE2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CE2-bgp]peer 3.3.3.3 as-number 100
[CE2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[CE2-bgp]undo peer 1.1.1.1 enable
[CE2-bgp]undo peer 3.3.3.3 enable
[CE2-bgp]l2vpn-family evpn
[CE2-bgp-af-evpn]peer 1.1.1.1 enable
[CE2-bgp-af-evpn]peer 1.1.1.1 advertise arp
[CE2-bgp-af-evpn]peer 3.3.3.3 enable
[CE2-bgp-af-evpn]peer 3.3.3.3 advertise arp
[CE3-bgp]l2vpn-family evpn
[CE3-bgp]peer 2.2.2.2 as-number 100
[CE3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE3-bgp]undo peer 2.2.2.2 enable
[CE3-bgp-af-evpn]peer 2.2.2.2 enable
[CE3-bgp-af-evpn]peer 2.2.2.2 advertise arp
交换机间VLAN均已放通
[CE1]bridge-domain 10
[CE1-bd10]vxlan vni 10
[CE1-bd10-evpn]route-distinguisher 10:1
[CE1-bd10-evpn]vpn-target 1:1
[CE1-GE1/0/0]undo shutdown
[CE1]int ge1/0/0.1 mode l2
[CE1-GE1/0/0.1]encapsulation dot1q vid 10
[CE1-GE1/0/0.1]bridge-domain 10
[CE2]bridge-domain 10
[CE2-bd10]vxlan vni 10
[CE2-bd10-evpn]route-distinguisher 10:1
[CE2-bd10-evpn]vpn-target 1:1
[CE2]bridge-domain 20
[CE2-bd20]vxlan vni 20
[CE2-bd20-evpn]route-distinguisher 20:2
[CE2-bd20-evpn]vpn-target 2:2
[CE3]bridge-domain 20
[CE3-bd20]vxlan vni 20
[CE3-bd20-evpn]route-distinguisher 20:2
[CE3-bd20-evpn]vpn-target 2:2
[CE3-GE1/0/0]undo shutdown
[CE3]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0.1]encapsulation dot1q vid 10
[CE3-GE1/0/0.1]bridge-domain 20
基于BGP建立VNI隧道
[CE1]int Nve 1
[CE1-Nve1]source 1.1.1.1
[CE1-Nve1]vni 10 head-end peer-list protocol bgp
[CE2]int Nve 1
[CE2-Nve1]source 2.2.2.2
[CE2-Nve1]vni 10 head-end peer-list protocol bgp
[CE2-Nve1]vni 20 head-end peer-list protocol bgp
[CE3]int Nve 1
[CE3-Nve1]source 3.3.3.3
[CE3-Nve1]vni 20 head-end peer-list protocol bgp
创建VBDIF接口
[CE2]int Vbdif 10
[CE2-Vbdif10]ip ad 192.168.1.254 24
[CE2-Vbdif20]ip ad 192.168.2.254 24
::: warning EVPN中,同一个BD域中,EVPN实例的RD值必须一致。 如拓扑中CE1和CE2的BD域中,绑定EVPN实例的RD值必须一致。 VPN实例中,为方便管理,总部和分支之间的RD值最好设置成一致。 ::: 如上配置是VxLAN集中式网关通信,接口没有绑定VPN实例,在公网下没有区分,都是同一个租户。
绑定VPN实例
[CE2]ip vpn-instance A
[CE2-vpn-instance-A]route-distinguisher 100:1
[CE2-Vbdif10]ip binding vpn-instance A
[CE2-Vbdif10]ip ad 192.168.1.254 24
[CE2]ip vpn-instance B
[CE2-vpn-instance-B]route-distinguisher 200:2
[CE2-Vbdif20]ip binding vpn-instance B
[CE2-Vbdif20]ip ad 192.168.2.254 24
做了VPN实例的隔离后,两台PC不能直接通信,VPN实例A中路由表:
配置虚墙静态路由
[CE2]ip route-static vpn-instance A 192.168.2.0 24 vpn-instance B 192.168.2.1
[CE2]ip route-static vpn-instance B 192.168.1.0 24 vpn-instance B 192.168.1.1
CE1学习到的路由只有网关的MAC路由(没有类型2路由):
VxLAN网络(CE1、CE3)与普通租户(CE4)站点对接
[CE2]int ge 1/0/2
[CE2-GE1/0/2]undo shutdown
[CE2-GE1/0/2]undo portswitch
[CE2-GE1/0/2]ip ad 10.1.24.2 24
[CE2-GE1/0/2]ospf enable area 0
[CE2]bgp 100
[CE2-bgp]peer 4.4.4.4 as-number 100
[CE2-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[CE2-bgp]undo peer 4.4.4.4 enable
[CE2-bgp]l2vpn-family evpn
[CE2-bgp-af-evpn]peer 4.4.4.4 enable
[CE2-bgp-af-evpn]peer 4.4.4.4 reflect-client
[CE2-bgp-af-evpn]peer 4.4.4.4 advertise arp CE2作为反射器
[CE4]ospf router-id 10.4.4.4
[CE4-ospf-1]area 0
[CE4-GE1/0/0]undo shutdown
[CE4-GE1/0/0]undo portswitch
[CE4-GE1/0/0]ip ad 10.1.24.4 24
[CE4-GE1/0/0]ospf enable area 0
[CE4-LoopBack0]ip ad 4.4.4.4 32
[CE4-LoopBack0]ospf enable area 0
[CE4]evpn-overlay enable
[CE4-bgp]peer 2.2.2.2 as-number 100
[CE4-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE4-bgp]undo peer 2.2.2.2 enable
[CE4-bgp]l2vpn-family evpn
[CE4-bgp-af-evpn]peer 2.2.2.2 enable
[CE4-bgp-af-evpn]peer 2.2.2.2 advertise arp
CE4使用VPN实例对接
[CE4]ip vpn-instance VPN
[CE4-vpn-instance-VPN]route-distinguisher 400:400
[CE4-vpn-instance-VPN-af-ipv4]vpn-target 4:4 evpn
[CE4]ip vpn-instance VPN
[CE4-vpn-instance-VPN]route-distinguisher 400:400
[CE4-vpn-instance-VPN-af-ipv4]vpn-target 4:4
[CE4]ospf 2 router-id 10.4.4.4 vpn-instance VPN
[CE4-ospf-2]area 0
[CE4-GE1/0/1]undo shutdown
[CE4-GE1/0/1]undo portswitch
[CE4-GE1/0/1]ip binding vpn-instance VPN
[CE4-GE1/0/1]ip ad 10.1.41.4 24
[CE4-GE1/0/1]ospf enable 2 area 0
[AR1]ospf router-id 10.10.10.10
[AR1-ospf-1]area 0
[AR1-GigabitEthernet0/0/0]ip ad 10.1.41.1 24
[AR1-GigabitEthernet0/0/0]ospf enable area 0
[AR1-LoopBack0]ip ad 10.10.10.10 24
[AR1-LoopBack0]ospf enable area 0
CE4将VPN实例中学来的OSPF路由转换成VPNv4的路由
[CE4-bgp]ipv4-family vpn-instance VPN
[CE4-bgp-VPN]import-route ospf 2
将引入的VPNv4路由通告成evpn路由
[CE4-vpn-instance-VPN]vxlan vni 4000 VPN实例添加三层VNI信息
站点路由引入BGP中产生VPNv4路由: 添加三层VNI后CE4的EVPN路由表中出现站点的路由: 如上IP前缀路由,即Type 5路由。 ::: tip 二层VNI是普通的VNI,映射到广播域BD,封装二层VNI实现VXLAN报文同子网的转发(同租户到网关的通信)。 三层VNI和VPN实例进行关联,封装三层VNI用于VXLAN报文跨子网跨实例的转发(租户内访问外部网络)。 :::
::: tip 同租户内的路由是type 2、type 3路由,外部引入到租户的路由是type 5路由。 :::
分布式网关
分布式网关中,IRB转发分为对称IRB转发和非对称IRB转发。 分布式网关跨子网通信:
上图中VLANIF实现VLAN跨子网转发细节:
PC1通过本地IP地址、本地掩码、对端IP地址进行计算,发现目的设备PC2与自身不在同一个网段,判断该通信为三层通信,将去往PC2的流量发给网关。PC1发送的数据帧:源MAC = MAC1,目的MAC = MAC2
交换机收到PC1发送的去往PC2的报文,经解封装发现目的MAC为VLANIF 10接口的MAC地址,则认为该报文是发给交换机本身的,所以将报文交给路由模块继续处理
路由模块解析发现目的IP为192.168.20.2,非本地接口存在的IP地址,因此需要对该报文三层转发。查找路由表后,匹配中VLANIF 20产生的直连路由
因为匹配的为直连路由,说明已经到达最后一跳,所以交换机在ARP表中查找192.168.20.2,获取192.168.20.2的MAC地址,交由交换模块重新封装为数据帧
交换模块查找MAC地址表以明确报文出接口、是否需要携带VLAN Tag。最终交换模块发送的数据帧:源MAC = MAC2,目的MAC = MAC3,VLAN Tag = None
以上转发过程中,交换机通过数据帧的目的MAC地址来判断报文是否为自身三层转发处理(如果目的MAC为自身MAC,则执行L3查表转发,否则执行L2查表转发)
- 非对称IRB转发:
- Ingress VTEP同时执行L3、L2查表转发,Egress VTEP只需要进行L2查表、转发,因为Ingress、Egress所执行操作不一致,被称为非对称转发。*
- 非对称IRB转发过程中,VTEP之间不会传递主机IP路由*,即上图中VTEP1、VTEP2之间不会传递本地下连PC生成的32位主机路由(由ARP信息生成)。所以在第2步中VTEP1查找路由表,只能匹配到由VBDIF 10生成的直连路由。 第5步VTEP2解封装VXLAN报文,目的MAC不是该BD所对应的本地VBDIF接口MAC地址,所以此时VTEP会执行L2查表,根据报文携带的VNI查找对应的BD的MAC地址表项,之后进行L2转发。 ::: tip BD域MAC地址表举例: :::
- 对称IRB转发
- 对称IRB转发:Ingress VTEP、Egress VTEP都执行L3查表转发。*
Ingress VTEP:流量进入VXLAN网络的VTEP设备。 Egress VTEP:流量从VTEP离开VXLAN网络的设备。
- 对称IRB通信过程
- 对称IRB转发时,VTEP之间会传递由ARP生成的32位主机路由*,因此上图中VTEP1在进行路由查表时会匹配到由VETP2传递过来的32位主机路由。(即便VTEP1上存在VBDIF 10,存在对应的直连路由,此时根据最长匹配原则依旧会根据32位主机路由进行转发。) 第4步中VTEP2解封装VxLAN报文时,发现内层数据帧的目的MAC地址为VTEP2的Router MAC(MAC B),判断自身需要进行L3路由查表转发,根据VNI 1000找到对应IP VPN实例,在该IP VPN实例路由表中查找对应的路由,匹配到VBDIF 10接口的直连路由,再通告本地MAC地址表项进行L2查表,将报文发送给连接在本地的PC2。
基础配置(底层OSPF已建立,SW配置已完成)
[CE1]evpn-overlay enable
[CE1]bgp 100
[CE1-bgp]peer 2.2.2.2 as-number 100
[CE1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE1-bgp]undo peer 2.2.2.2 enable
[CE1-bgp]l2vpn-family evpn
[CE1-bgp-af-evpn]peer 2.2.2.2 enable
[CE2]evpn-overlay enable
[CE2]bgp 100
[CE2-bgp]peer 1.1.1.1 as-number 100
[CE2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CE2-bgp]undo peer 1.1.1.1 enable
[CE2-bgp]peer 3.3.3.3 as-number 100
[CE2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[CE2-bgp]undo peer 3.3.3.3 enable
[CE2-bgp]l2vpn-family evpn
[CE2-bgp-af-evpn]peer 1.1.1.1 enable
[CE2-bgp-af-evpn]peer 1.1.1.1 reflect-client
[CE2-bgp-af-evpn]peer 3.3.3.3 enable
[CE2-bgp-af-evpn]peer 3.3.3.3 reflect-client
[CE2-bgp-af-evpn]undo policy vpn-target
[CE3]evpn-overlay enable
[CE3]bgp 100
[CE3-bgp]peer 2.2.2.2 as-number 100
[CE3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE3-bgp]undo peer 2.2.2.2 enable
[CE3-bgp]l2vpn-family evpn
[CE3-bgp-af-evpn]peer 2.2.2.2 enable
VTEP设备配置
[CE1]bridge-domain 10
[CE1-bd10]vxlan vni 10
[CE1]bridge-domain 20
[CE1-bd20]vxlan vni 20
[CE1-GE1/0/0]undo shutdown
[CE1]int ge 1/0/0.1 mode l2
[CE1-GE1/0/0.1]encapsulation dot1q vid 10
[CE1-GE1/0/0.1]bridge-domain 10
[CE1]int ge 1/0/0.2 mode l2
[CE1-GE1/0/0.2]encapsulation dot1q vid 20
[CE1-GE1/0/0.2]bridge-domain 20
[CE3]bridge-domain 10
[CE3-bd10]vxlan vni 10
[CE3]bridge-domain 20
[CE3-bd20]vxlan vni 20
[CE3]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0]undo shutdown
[CE3-GE1/0/0.1]bridge-domain 10
[CE3-GE1/0/0.1]encapsulation dot1q vid 10
[CE3-GE1/0/0.1]bridge-domain 10
[CE3]int ge 1/0/0.2 mode l2
[CE3-GE1/0/0.2]encapsulation dot1q vid 20
[CE3-GE1/0/0.2]bridge-domain 20
[CE1]bridge-domain 10
[CE1-bd10-evpn]route-distinguisher 10:1
[CE1-bd10-evpn]vpn-target 1:1
[CE1-bgp]l2vpn-family evpn
[CE1-bgp-af-evpn]peer 2.2.2.2 advertise arp 通告ARP不包括三层VNI的传递,后续需要更改通告信息
[CE2-bgp-af-evpn]peer 1.1.1.1 advertise arp
[CE2-bgp-af-evpn]peer 3.3.3.3 advertise arp
[CE3]bridge-domain 10
[CE3-bd10-evpn]route-distinguisher 10:3
[CE3-bd10-evpn]vpn-target 1:1
[CE3-bgp]l2vpn-family evpn
[CE3-bgp-af-evpn]peer 2.2.2.2 advertise arp
分布式网关配置
[CE1]int Vbdif 10
[CE1-Vbdif10]ip ad 192.168.1.254 24
[CE1-Vbdif10]arp collect host enable 将IP也通告出去
[CE3]int Vbdif 10
[CE3-Vbdif10]ip ad 192.168.1.254 24
[CE3-Vbdif10]arp collect host enable
如上配置后,CE3的EVPN路由表中出现同IP不同MAC的网关信息:
设置网关MAC地址唯一
[CE1-Vbdif10]mac-address 1011-1111-1111
[CE3-Vbdif10]mac-address 1011-1111-1111
如上配置后,相同的MAC和IP写进同一张EVPN实例路由表中,该路由就只有自身(双下一跳): 即一个网关信息使用多台设备标识,虚拟机后续需要进行迁移时可以不需要改变网关信息。
使能分布式网关能力
[CE1-Vbdif10]vxlan anycast-gateway enable
[CE3-Vbdif10]vxlan anycast-gateway enable
如上,使能分布式网关能力后,ARP路由不再显示,只显示MAC路由。 ::: tip 分布式网关的每一台leaf节点都需要有所有的网关信息。 :::
[CE1-bd20-evpn]route-distinguisher 20:1
[CE1-bd20-evpn]vpn-target 2:2
[CE1-Nve1]vni 20 head-end peer-list protocol bgp
[CE3-bd20-evpn]route-distinguisher 20:3
[CE3-bd20-evpn]vpn-target 2:2
[CE3-Nve1]vni 20 head-end peer-list protocol bgp
部署分布式网关后,NVE设备上EVPN路由表中出现对应租户路由:
同租户不同子网配置
[CE1-Vbdif20]ip ad 192.168.2.254 24
[CE1-Vbdif20]mac-address 2022-2222-2222
[CE1-Vbdif20]arp collect host enable
[CE1-Vbdif20]vxlan anycast-gateway enable
[CE3-Vbdif20]ip ad 192.168.2.254 24
[CE3-Vbdif20]mac-address 2022-2222-2222
[CE3-Vbdif20]arp collect host enable
[CE3-Vbdif20]vxlan anycast-gateway enable
[CE1]ip vpn-instance A
[CE1-vpn-instance-A]route-distinguisher 100:100
[CE1-Vbdif10]ip binding vpn-instance A
[CE1-Vbdif10]ip ad 192.168.1.254 24
[CE1-Vbdif20]ip binding vpn-instance A
[CE1-Vbdif20]ip ad 192.168.2.254 24
[CE3]ip vpn-instance A
[CE3-vpn-instance-A]route-distinguisher 100:100
[CE3-Vbdif10]ip binding vpn-instance A
[CE3-Vbdif10]ip ad 192.168.1.254 24
[CE3-Vbdif20]ip binding vpn-instance A
[CE3-Vbdif20]ip ad 192.168.2.254 24
[CE1-bd10-evpn]vpn-target 2:2 import-extcommunity BD域10可以接受BD域20的路由
[CE3-bd20-evpn]vpn-target 1:1 import-extcommunity BD域20可以接受BD域10的路由
同租户,不同子网的通信
非对称转发
通过配置本端VPN实例下的EIRT和对端BD域evpn视图下配置的ERT相匹配,可以实现接收到对端BD产生的type2和type3路由,实验发现没有使用该路由
将两端BD域配置相同的RT,可以接收路由信息,实验发现没有使用该路由
分布式网关三层转发
::: warning 在集中式网关中,通告的ARP路由中携带MAC、IP和二层VNI,在分布式网关中,需要携带三层VNI,即需要通告IRB路由。 :::
分布式网关下外网访问VxLAN网络实验
1. 底层underlay网络打通(部署底层OSPF)
2. 配置BGP evpn邻居关系
3. 通过配置BD、VNI关联租户网络
4. 同租户使用BD域中的RT相匹配接收路由
5. 不同租户使用VPN实例中的RT相匹配接收路由
底层underlay网络和环回口已建立并通告
[CE1]evpn-overlay enable
[CE1-bgp]peer 2.2.2.2 as-number 100
[CE1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE1-bgp]undo peer 2.2.2.2 enable
[CE1-bgp]l2vpn-family evpn
[CE1-bgp-af-evpn]peer 2.2.2.2 enable
[CE1-bgp-af-evpn]peer 2.2.2.2 advertise irb
[CE2]evpn-overlay enable
[CE2-bgp]peer 1.1.1.1 as-number 100
[CE2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CE2-bgp]undo peer 1.1.1.1 enable
[CE2-bgp]peer 3.3.3.3 as-number 100
[CE2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[CE2-bgp]undo peer 3.3.3.3 enable
[CE2-bgp]l2vpn-family evpn
[CE2-bgp-af-evpn]peer 1.1.1.1 enable
[CE2-bgp-af-evpn]peer 3.3.3.3 enable
[CE2-bgp-af-evpn]peer 1.1.1.1 reflect-client
[CE2-bgp-af-evpn]peer 3.3.3.3 reflect-client
[CE2-bgp-af-evpn]peer 1.1.1.1 advertise irb
[CE2-bgp-af-evpn]peer 3.3.3.3 advertise irb
[CE2-bgp-af-evpn]undo policy vpn-target CE2上没有EVPN实例,undo过滤功能
[CE3]evpn-overlay enable
[CE3-bgp]peer 2.2.2.2 as-number 100
[CE3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[CE3-bgp]undo peer 2.2.2.2 enable
[CE3-bgp]l2vpn-family evpn
[CE3-bgp-af-evpn]peer 2.2.2.2 enable
[CE3-bgp-af-evpn]peer 2.2.2.2 advertise irb
分布式网关的BD域配置
[CE1]bridge-domain 10
[CE1-bd10]vxlan vni 10
[CE1-bd10-evpn]route-distinguisher 10:1
[CE1-bd10-evpn]vpn-target 1:1
[CE1-GE1/0/0]undo shutdown
[CE1]int ge 1/0/0.1 mode l2
[CE1-GE1/0/0.1]encapsulation dot1q vid 10
[CE1-GE1/0/0.1]bridge-domain 10
[CE1]bridge-domain 20
[CE1-bd20]vxlan vni 20
[CE1-bd20-evpn]route-distinguisher 20:3
[CE1-bd20-evpn]vpn-target 2:2
[CE3]bridge-domain 20
[CE3-bd20]vxlan vni 20
[CE3-bd20-evpn]route-distinguisher 20:3
[CE3-bd20-evpn]vpn-target 2:2
[CE3-GE1/0/0]undo shutdown
[CE3]int ge 1/0/0.1 mode l2
[CE3-GE1/0/0.1]encapsulation dot1q vid 20
[CE3-GE1/0/0.1]bridge-domain 20
[CE3]bridge-domain 10
[CE3-bd10]vxlan vni 10
[CE3-bd10-evpn]route-distinguisher 10:1
[CE3-bd10-evpn]vpn-target 1:1
建立隧道
[CE1]int Nve 1
[CE1-Nve1]source 1.1.1.1
[CE1-Nve1]vni 10 head-end peer-list protocol bgp
[CE1-Nve1]vni 20 head-end peer-list protocol bgp
[CE3]int Nve 1
[CE3-Nve1]source 3.3.3.3
[CE3-Nve1]vni 10 head-end peer-list protocol bgp
[CE3-Nve1]vni 20 head-end peer-list protocol bgp
::: warning 分布式网关需要每一台NVE设备都配置所有的VBDIF,每一个VBDIF需要配置对应BD域和其中的所有配置(VNI和EVPN),并将VNI绑定在NVE中,需要否则VNI隧道无法建立。 :::
分布式网关的VBDIF配置
[CE1]ip vpn-instance A
[CE1-vpn-instance-A]route-distinguisher 100:100
[CE1-Vbdif10]ip binding vpn-instance A
[CE1-Vbdif10]ip ad 192.168.1.254 24
[CE1-Vbdif10]mac-address 1011-1111-1111
[CE1-Vbdif10]vxlan anycast-gateway enable
[CE1-Vbdif10]arp collect host enable 收集终端type 2路由信息
[CE3]ip vpn-instance B
[CE3-vpn-instance-B]route-distinguisher 200:200
[CE3-Vbdif20]ip binding vpn-instance B
[CE3-Vbdif20]ip ad 192.168.2.254 24
[CE3-Vbdif20]mac-address 2022-2222-2222
[CE3-Vbdif20]vxlan anycast-gateway enable
[CE3-Vbdif20]arp collect host enable
配置隧道后RR设备收到两台NVE设备通告的MAC路由: 由于VPN实例的RT值不对应接收,NVE设备不接收对端发来的路由。
VPN实例中添加EVPN RT值并添加三层VNI
[CE1]ip vpn-instance A
[CE1-vpn-instance-A]vpn-target 1:3 evpn
[CE1-vpn-instance-A]vxlan vni 5001
[CE3]ip vpn-instance B
[CE3-vpn-instance-B]vpn-target 1:3 evpn
[CE3-vpn-instance-B]vxlan vni 5002
BD域的EVPN实例也做对应接收,使得VNI隧道建立
[CE1-bd10-evpn]vpn-target 2:2 import-extcommunity
[CE3-bd20-evpn]vpn-target 1:1 import-extcommunity
接入外网设备
[CE2]ip vpn-instance VPN
[CE2-vpn-instance-VPN]route-distinguisher 500:500
[CE2-vpn-instance-VPN]vxlan vni 5003
[CE2]ospf 2 router-id 10.2.2.2 vpn-instance VPN
[CE2-ospf-2-area-0.0.0.0]int ge 1/0/2
[CE2-GE1/0/2]undo shutdown
[CE2-GE1/0/2]undo portswitch
[CE2-GE1/0/2]ip binding vpn-instance VPN
[CE2-GE1/0/2]ip ad 100.1.1.254 24
[CE2-GE1/0/2]ospf enable 2 area 0
[AR1]ospf router-id 10.10.10.10
[AR1-ospf-1]area 0
[AR1-GigabitEthernet0/0/0]ip ad 100.1.1.1 24
[AR1-GigabitEthernet0/0/0]ospf enable area 0
[AR1-LoopBack0]ip ad 10.10.10.10 24
[AR1-LoopBack0]ospf enable area 0
CE2学到外部AR1的路由:
CE2将外部路由通告进BGP
[CE2]bgp 100
[CE2-bgp]ipv4-family vpn-instance VPN
[CE2-bgp-VPN]import-route ospf 2
BGP引入VPN实例后变为VPNv4路由,将VPNv4路由转换为EVPN路由
[CE2-bgp-VPN]advertise l2vpn evpn
转换VPNv4路由: 转换EVPN路由: 此时CE2设备不会通告该type 5路由: ::: danger RR只能当作路由传递的设备。RR设备接入的外部路由不会正常传递。 如果RR设备需要做外部路由的接入,需要将RR设备的type 3路由进行通告,然后才能正常传递外部路由。 :::
RR通告type 3路由
[CE2]int Nve 1
[CE2-Nve1]source 2.2.2.2
[CE2-Nve1]vni 5000 head-end peer-list protocol bgp
[CE2]bridge-domain 5000
[CE2-bd5000]vxlan vni 5000
CE设备配置VPN实例RT值对应
[CE1-vpn-instance-A]vpn-target 500:1 import-extcommunity evpn
[CE2-vpn-instance-VPN]vpn-target 500:1 export-extcommunity evpn
[CE3-vpn-instance-B]vpn-target 500:1 import-extcommunity evpn
如上配置后,RR将外部引入的路由通告给EVPN邻居并被EVPN邻居接收。 RR通告外部路由(type 5路由):
CE1、CE3学到该外部路由:
配置租户设备和外网设备通信
[CE1]bgp 100
[CE1-bgp]ipv4-family vpn-instance A
[CE1-bgp-A]import-route direct CE1将租户设备直连路由当作外部路由做引入,引入到BGP变为VPNv4路由
[CE1-bgp-A]advertise l2vpn evpn VPNv4路由转换为EVPN路由
[CE2-vpn-instance-VPN]vpn-target 1:3 import-extcommunity evpn CE2上VPN实例VPN配置RT值接收CE1发来外部路由
[CE2]ospf 2
[CE2-ospf-2]import-route bgp BGP路由引入OSPF
AR1中出现VxLAN租户IP: 租户和外网建立通信: PC1访问AR1封装VNI 5003: AR1回复PC1封装VNI 5001: ::: tip CE1实例A上VNI设置5001,CE2实例VPN上VNI设置5003。上述封装对端VNI的原因是,三层VNI类似于私网标签,参考MPLS VPN,封装的出标签是上游下发的,即对端的三层VNI值。 :::
配置NVE设备内的VPN实例和EVPN实例RT值相互接收
[CE1-bd10-evpn]vpn-target 1:3 VPN实例RT值为1:3
[CE3-bd20-evpn]vpn-target 1:3 VPN实例RT值为1:3
::: warning IRB路由转发时,三层和二层都需要查表转发。VPN实例配置IRT从对端接收路由后,路由只是需要EVPN实例的IRT和VPN实例的ERT相匹配,使得路由可以进入EVPN路由表。 ::: 如上配置后,PC实现了跨租户跨子网通信和VxLAN网络与外网通信:
::: tip 不同租户,不同子网通信时
- 可以使用本端BD域中的ERT和对端VPN实例中的EIRT相匹配,可以接收类型2的路由进入本端VPN实例路由表中。
- 可以使用本端VPN实例中的EERT和对端VPN实例中的EIRT相匹配,可以接收类型5的路由 进入本端VPN实例路由表中。
如果对接租户网络,两种方式任意选择。 如果对接VPN网络,则只能使用VPN实例的EIRT和EERT相匹配(类型5)。 :::