VxLAN EVPN模式
VxLAN EVPN模式
前文演示了如何使用vxlan协议创建静态隧道,使终端可以跨底层三层网络进行二层协议互通,不过静态 vxlan 隧道的适用范围较小,vxlan 自诞生就不是作为传统网络隧道使用的,其兴起代表网络虚拟化和 Software Defined 思想在网络工程中的应用,本文将演示vxlan更有灵魂的使用方式,使用 EVPN 作为控制平面;EVPN 属于 MP-BGP 下的一个地址族/AF),通过 BGP 传递控制的数据(就是 MAC 地址ARP 表等),按需的动态创建 vxlan 隧道;
VxLAN 通信需要 VTEP full-mesh 全互联(头端复制复制模式下),手工创建 vxlan 隧道显然不现实,使用 evpn 控制层面动态创建 vxlan 隧道是主要方式。
下面使用一个例子演示vxlan evpn 模式。
拓扑
这里使用多个厂商的软件/硬件,通过 EVPN 的方式实现 VxLAN 互通,主要是为了体现 EVPN 协议的开放性,也由于不同设备/软件的配置逻辑并不一样,实现相同功能时的侧重点和逻辑也不尽相同,使用多种设备组建网络可以了解实施中的更多细节和差异,权当观摩;由于笔者也在学习和尝试,错误之处还请阅者多多指正。
基础路由配置和BGP(EVPN AF)
基础网络和 BGP 的配置逻辑各个厂家的逻辑基本一致,不做过多解释,配置如下:
RR(H3C vSR)
RR 作为 underlay 的转发核心以并将 EVPN 控制信息反射给其他 VTEP ,本身不解析 vxlan 流量。
###RR(vSR)###
sysname RR
#
isis 1
is-level level-1
cost-style wide
network-entity 10.0000.0090.0900.9009.00
#
address-family ipv4 unicast
#
l2vpn enable
#
interface LoopBack0
ip address 9.9.9.9 255.255.255.255
isis enable 1
#
interface GigabitEthernet1/0
port link-mode route
ip address 19.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet2/0
port link-mode route
ip address 29.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet3/0
port link-mode route
ip address 39.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet4/0
port link-mode route
ip address 49.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet5/0
port link-mode route
ip address 59.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet6/0
port link-mode route
ip address 69.0.0.9 255.255.255.0
isis enable 1
#
interface GigabitEthernet7/0
port link-mode route
ip address 79.0.0.9 255.255.255.0
isis enable 1
#
bgp 200
router-id 9.9.9.9
group evpn internal
peer evpn connect-interface LoopBack0
peer 1.1.1.1 group evpn
peer 2.2.2.2 group evpn
peer 3.3.3.3 group evpn
peer 4.4.4.4 group evpn
peer 5.5.5.5 group evpn
peer 6.6.6.6 group evpn
peer 7.7.7.7 group evpn
#
## bgp,使用 evpn sub-af 对接,传递控制信息
address-family l2vpn evpb
### RR只作为 BGP 反射器和底层 underlay 网络的转发,不需要识别具体 VPN 实例;
### 这条配置的目的是接受不适用于本地的控制信息,BGP 协议下本地无效的控制信息默认会被丢弃;
### 由于 RR 仅反射控制信息,不作为 VTEP 所以取消此种限制。
undo policy vpn-target
peer evpn enable
peer evpn reflect-client
R1(H3C vSR)
###R1(vSR)###
#
sysname R1
#
isis 1
is-level level-1
cost-style wide
network-entity 10.0000.0010.0100.1001.00
#
address-family ipv4 unicast
#
l2vpn enable
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
isis enable 1
#
interface GigabitEthernet1/0
port link-mode route
ip address 19.0.0.1 255.255.255.0
isis enable 1
#
bgp 200
router-id 1.1.1.1
group rr internal
peer rr connect-interface LoopBack0
peer 9.9.9.9 group rr
#
address-family l2vpn evpn
peer rr enable
R2(H3C vSR)
###R2(vSR)###
#
sysname R2
#
isis 1
is-level level-1
cost-style wide
network-entity 10.0000.0020.0200.2002.00
#
address-family ipv4 unicast
#
l2vpn enable
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
isis enable 1
#
interface GigabitEthernet1/0
port link-mode route
ip address 29.0.0.2 255.255.255.0
isis enable 1
#
bgp 200
router-id 2.2.2.2
group rr internal
peer rr connect-interface LoopBack0
peer 9.9.9.9 group rr
#
address-family l2vpn evpn
peer rr enable
#
R3(Huawei NE40E)
###R3(Huawei)###
sysname R3
### HUAWEI 的 NE40E 定位为运营商设备,默认开启 dcn(数据通信网)功能,这里关闭dcn避免干扰。
undo dcn
#
isis 1
is-level level-1
cost-style wide
network-entity 10.0000.0030.0300.3003.00
#
interface Ethernet1/0/0
undo shutdown
ip address 39.0.0.3 255.255.255.0
isis enable 1
undo dcn
undo dcn mode vlan
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
isis enable 1
#
bgp 200
router-id 3.3.3.3
group rr internal
peer rr connect-interface LoopBack0
peer 9.9.9.9 as-number 200
peer 9.9.9.9 group rr
#
ipv4-family unicast
undo synchronization
undo peer rr enable
undo peer 9.9.9.9 enable
#
l2vpn-family evpn
undo policy vpn-target
peer 9.9.9.9 enable
peer 9.9.9.9 advertise irb
peer 9.9.9.9 advertise encap-type vxlan
peer rr enable
peer rr advertise irb
peer rr advertise encap-type vxlan
R4(Vyos)
###R4(Vyos)###
set interfaces ethernet eth0 address '49.0.0.4/24'
set interfaces loopback lo address '4.4.4.4/32'
set protocols bgp address-family l2vpn-evpn advertise-all-vni
set protocols bgp neighbor 9.9.9.9 peer-group 'rr'
set protocols bgp parameters router-id '4.4.4.4'
set protocols bgp peer-group rr address-family l2vpn-evpn
set protocols bgp peer-group rr remote-as 'internal'
set protocols bgp peer-group rr update-source '4.4.4.4'
set protocols bgp system-as '200'
set protocols isis interface eth0
set protocols isis interface lo passive
set protocols isis level 'level-1'
set protocols isis metric-style 'wide'
set protocols isis net '10.0000.0040.0400.4004.00'
commit
R5(Ruijie )
###R5(Ruijie)###
hostname R5
!
interface GigabitEthernet 0/0
ip address 59.0.0.5 255.255.255.0
ip router isis
!
interface Loopback 0
ip address 5.5.5.5 255.255.255.255
ip router isis
!
router bgp 200
bgp router-id 5.5.5.5
neighbor 9.9.9.9 remote-as 200
neighbor 9.9.9.9 update-source Loopback 0
address-family ipv4
no neighbor 9.9.9.9 activate
exit-address-family
address-family l2vpn evpn
neighbor 9.9.9.9 activate
neighbor 9.9.9.9 send-community extended
exit-address-family
!
router isis
is-type level-1
net 10.0000.0050.0500.5005.00
metric-style wide
graceful-restart
R6(Cisco Nexus)
###R6###
hostname R6
feature bgp
feature isis
interface Ethernet1/1
no switchport
ip address 69.0.0.6/24
ip router isis 1
no shutdown
interface loopback0
ip address 6.6.6.6/32
ip router isis 1
router isis 1
net 10.0000.0050.0500.5005.00
is-type level-1
router bgp 200
router-id 6.6.6.6
address-family l2vpn evpn
neighbor 9.9.9.9
remote-as 200
update-source loopback0
address-family l2vpn evpn
send-community
send-community extended
R7(Juniper vMX)
有意思的是Juniper 设备 IS-IS 协议中的 NET 配置方式,IS-IS 其实并不是 TCP/IP 协议簇原生协议,而是 ISO 提出的 OSI 开放模型中定义的协议,此协议引入到 TCP/IP 协议簇后任然带有源协议簇的印记,IS-IS 协议中的 NET 其实源自 OSI 模型中网络层协议的地址(CLNP地址,类似TCP/IP协议簇下的IP协议地址----IP地址),Juniper 设备配置 NET 方式就是在接口的 iso family 配置CLNP 地址,使用此地址作为 IS-IS 的 NET,或许这才是“最正确”的配置方式,毕竟 NET 就是类似 router-id 的存在,而且其原始的被路由协议就是 CLNP。
这里说个题外话,IP 环境下的 IS-IS 严格讲应该叫:Integrated IS-IS(集成IS-IS),这是原始 OSI IS-IS 与 IP 协议集成后的叫法,不过很少刻意的这样称呼。
###R7###
set interfaces ge-0/0/0 unit 0 family inet address 79.0.0.7/24
set interfaces ge-0/0/0 unit 0 family iso
set interfaces lo0 unit 0 family inet address 7.7.7.7/32
set interfaces lo0 unit 0 family iso address 10.0000.0070.0700.7007.00
set protocols isis interface ge-0/0/0.0
set protocols isis interface lo0.0
set protocols isis level 1 wide-metrics-only
set routing-options router-id 7.7.7.7
set routing-options autonomous-system 200
set protocols bgp group rr type internal
set protocols bgp group rr local-address 7.7.7.7
set protocols bgp group rr family evpn signaling
set protocols bgp group rr neighbor 9.9.9.9
commit
VxLAN和 EVPN 实例配置
VxLAN 是伴随着“网络虚拟化”火热兴起的,作为一种虚拟化技术需要天然具备一个特性:兼容性;否则何谈虚拟;
为了达成这种兼容性,vxlan 需要一个“中间件”把vxlan网络和传统以太网网络连接起来;在 RFC 中有定义,叫做 Bridge-Domain ---- 桥接域,不过由于
在网络设备中只具有本地意义,所以在不同厂商的叫法也不尽相同。
NVE:Network Virtualization Edge 网络虚拟边界,即可以处理vxlan的设备;
VTEP:处理 vxlan 的一个节点,vxlan 隧道网关,可以理解为 NVE 中的一个vxlan处理实例,一个NVE 可以含多个 VTEP;
这些术语其实并非 VxLAN 专有,NVE 最早来自于RFC7365,vxlan是一种 NVO3,一般将这种可以处理/解析 Overlay 流量的节点叫做 NVE。
R1(H3C vSR)
H3C 中的 BD 叫做 VSI(virtual switch instance 虚拟交换实例)
## 创建 vsi (可以理解为广播域/桥接域)
## 分别关联evpn实例;对比静态vxlan,关联vxlan tunnel,这里关联的是evpn实例。
vsi aaa
vxlan 10000
evpn encapsulation vxlan
route-distinguisher 1:10000
vpn-target 10000:10000 export-extcommunity
vpn-target 10000:10000 import-extcommunity
#
vsi bbb
vxlan 20000
evpn encapsulation vxlan
route-distinguisher 1:20000
vpn-target 20000:20000 export-extcommunity
vpn-target 20000:20000 import-extcommunity
#
R2(H3C vSR)
vsi aaa
vxlan 10000
evpn encapsulation vxlan
route-distinguisher 2:10000
vpn-target 10000:10000 export-extcommunity
vpn-target 10000:10000 import-extcommunity
#
vsi bbb
vxlan 20000
evpn encapsulation vxlan
route-distinguisher 2:20000
vpn-target 20000:20000 export-extcommunity
vpn-target 20000:20000 import-extcommunity
#
R3(Huawei NE40E)
##
##创建 evpn 实例,evpn 可以服务于多种数据层面
##创建时候需要指定工作模式以适应不同的数据平面
##本例的数据平面为 vxlan ,evpn 需要为 bd 模式
evpn vpn-instance aaa bd-mode
route-distinguisher 3:10000
vpn-target 10000:10000 export-extcommunity
vpn-target 10000:10000 import-extcommunity
#
evpn vpn-instance bbb bd-mode
route-distinguisher 3:20000
vpn-target 20000:20000 export-extcommunity
vpn-target 20000:20000 import-extcommunity
#
## 创建桥接域,huawei沿用bd这个术语,就是能承载ethernet的环境
bridge-domain 10000
vxlan vni 10000 split-horizon-mode
evpn binding vpn-instance aaa
#
bridge-domain 20000
vxlan vni 20000 split-horizon-mode
evpn binding vpn-instance bbb
#
## 此处可以理解为vxlan隧道的模板接口,不同情况下引用不同;
## 静态环境下直接引用隧道对端 ip,evpn 环境下引用bgp;
## H3C 没有此类设置;
## 此处其实引出了 vxlan 的一个概念 ---- “复制模式”,是 VTEP 在处理 BUM 流量时候的方式,详细的后面再聊。
interface Nve1
source 3.3.3.3
vni 10000 head-end peer-list protocol bgp
vni 20000 head-end peer-list protocol bgp
R4(Vyos)
## vxlan 接口,vyos使用vxlan接口来声明一个vxlan,此接口可以不配置IP地址,也可以配置ip地址作为vxlan的三层口使用;
set interfaces vxlan vxlan10000 source-address '3.3.3.3'
set interfaces vxlan vxlan10000 vni '10000'
set interfaces vxlan vxlan20000 source-address '3.3.3.3'
set interfaces vxlan vxlan20000 vni '20000'
set protocols bgp address-family l2vpn-evpn advertise-all-vni
set protocols bgp address-family l2vpn-evpn vni 10000 rd '4:10000'
set protocols bgp address-family l2vpn-evpn vni 10000 route-target both '10000:10000'
set protocols bgp address-family l2vpn-evpn vni 20000 rd '4:20000'
set protocols bgp address-family l2vpn-evpn vni 20000 route-target both '20000:20000'
R5(Ruijie )
## 开启 vtep 功能,并设置vxlan隧道源地址
vtep
source loopback 0
## vxlan 与 vlan 映射方式接入,建立vlan
vlan range 1,100,200
## evpn 实例
evpn
vni 10000
rd 5:10000
route-target both 10000:10000
vni 20000
rd 5:20000
route-target both 20000:20000
!
## vxlan 和 vlan 关联
vxlan 10000
extend-vlan 100
!
vxlan 20000
extend-vlan 200
R6(Cisco Nexus)
思科的配置逻辑和华为很像(或者说华为和思科很像)
nv overlay evpn
feature vn-segment-vlan-based
feature nv overlay
interface nve1
no shutdown
host-reachability protocol bgp
source-interface loopback0
member vni 10000
ingress-replication protocol bgp
member vni 20000
ingress-replication protocol bgp
evpn
vni 10000 l2
rd 6:10000
route-target import 10000:10000
route-target export 10000:10000
vni 20000 l2
rd 6:20000
route-target import 20000:20000
route-target export 20000:20000
R7(Juniper vMX)
set routing-instances aaa instance-type virtual-switch # 创建虚拟交换实例VSI
set routing-instances aaa protocols evpn encapsulation vxlan # 封装模式为 vxlan,VSI可以用于多种数据平面,比如MPLS/vxlan等。
set routing-instances aaa protocols evpn extended-vni-list 10000 # VSI 和 vxlan关联
set routing-instances aaa protocols evpn multicast-mode ingress-replication # 指定复制模式为接入复制,其实就是头端复制/源复制。
set routing-instances aaa vtep-source-interface lo0.0
set routing-instances aaa bridge-domains bdaaa vlan-id 100 # 在VSI下再创建BD
set routing-instances aaa bridge-domains bdaaa vxlan vni 10000
set routing-instances aaa bridge-domains bdaaa vxlan ingress-node-replication
set routing-instances aaa route-distinguisher 7:10000
set routing-instances aaa vrf-target target:10000:10000
set routing-instances bbb instance-type virtual-switch
set routing-instances bbb protocols evpn encapsulation vxlan
set routing-instances bbb protocols evpn extended-vni-list 20000
set routing-instances bbb protocols evpn multicast-mode ingress-replication
set routing-instances bbb vtep-source-interface lo0.0
set routing-instances bbb bridge-domains bdbbb vlan-id 200
set routing-instances bbb bridge-domains bdbbb vxlan vni 20000
set routing-instances bbb bridge-domains bdbbb vxlan ingress-node-replication
set routing-instances bbb route-distinguisher 7:20000
set routing-instances bbb vrf-target target:20000:20000
接入配置
一般来说,接入vxlan的方式基本有两种,vlan映射和接口直接封装:
- vlan 映射是把vlan和vxlan对应起来,接入侧直接使用常规vlan方式,这种方式相当于把 vlan 和 vxlan 打通,属于一个广播域。
- 接口直接封装就是在接口处直接指明流量需要转发进 vxlan 或 BD;
R1(H3C vSR)
接口直接封装
interface GigabitEthernet2/0
port link-mode route
xconnect vsi aaa
#
interface GigabitEthernet3/0
port link-mode route
xconnect vsi bbb
R2(H3C vSR)
interface GigabitEthernet2/0
port link-mode route
xconnect vsi aaa
#
interface GigabitEthernet3/0
port link-mode route
xconnect vsi bbb
如果是二层接口配置方式如下:
interface XXX
port link-mode bridge
service-instance 1000
encapsulation untagged
xconnect vsi aaa
R3(Huawei NE40E)
## 作为vxlan接入的接口,主接口不要有配置
interface Ethernet1/0/1
undo shutdown
#
## 子接口方式vxlan 终端接入
interface Ethernet1/0/1.10000 mode l2
encapsulation untag
bridge-domain 10000
#
interface Ethernet1/0/2
undo shutdown
#
interface Ethernet1/0/2.20000 mode l2
encapsulation untag
bridge-domain 20000
R4(Vyos)
## vyos的vxlan接入使用的是物理接口和vxlan接口桥接方式,没有独立的 BD 概念。
## 将物理接口和相应的 vxlan 隧道接口桥接,即为将终端接入响应的vxlan;
set interfaces bridge br10000 member interface eth1
set interfaces bridge br10000 member interface vxlan10000
set interfaces bridge br20000 member interface eth2
set interfaces bridge br20000 member interface vxlan20000
commit
R5(Ruijie )
## 接入,本例使用 vlan access 接入,vxlan和vlan关联
interface GigabitEthernet 0/1
switchport
switchport access vlan 100
!
interface GigabitEthernet 0/2
switchport
switchport access vlan 200
R6(Cisco Nexus)
将vlan和vxlan关联,接入直接使用 vlan access 接入;
vlan 1,100,200
vlan 100
vn-segment 10000
vlan 200
vn-segment 20000
interface Ethernet1/2
switchport access vlan 100
interface Ethernet1/3
switchport access vlan 200
R7(Juniper vMX)
同样使用vlan映射 untagged 方式接入vxlan,将相应的接口加入对应的 Bridge-Domain
由于这里使用的是路由器,接口为三层接口,使用bridge方式。
set interfaces ge-0/0/1 encapsulation ethernet-bridge
set interfaces ge-0/0/1 unit 0 family bridge vlan-id 100 # 由于路由器默认没有vlan的概念,使用family bridge 方式接入BD。
set routing-instances aaa bridge-domains bdaaa interface ge-0/0/1.0
set interfaces ge-0/0/2 encapsulation ethernet-bridge
set interfaces ge-0/0/2 unit 0 family bridge vlan-id 200
set routing-instances bbb bridge-domains bdbbb interface ge-0/0/2.0
如果使用tagged方式接入,使用如下配置
set interfaces ge-0/0/1 flexible-vlan-tagging
set interfaces ge-0/0/1 encapsulation flexible-ethernet-services
set interfaces ge-0/0/1 unit 100 encapsulation vlan-bridge
set interfaces ge-0/0/1 unit 100 vlan-id 100
set interfaces ge-0/0/1 unit 100 family bridge
set routing-instances aaa bridge-domains bdaaa interface ge-0/0/1.100
set interfaces ge-0/0/2 flexible-vlan-tagging
set interfaces ge-0/0/2 encapsulation flexible-ethernet-services
set interfaces ge-0/0/2 unit 200 encapsulation vlan-bridge
set interfaces ge-0/0/2 unit 200 vlan-id 200
set interfaces ge-0/0/2 unit 200 family bridge
set routing-instances bbb bridge-domains bdbbb interface ge-0/0/2.200
至此,演示了vxlan EVPN 模式下二层网络的配置,主要包含了:基础网络配置、VTEP 节点配置(EVPN 实例等)、vxlan接入配置;要点以备注的形式放在配置中,受限于篇幅,其他内容放到后续文章之中,主要内容包含:三层网关部署、分布式网关、组播/广播抑制、外部路由引入、vxlan 复制模式、多归等。
参考
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/mp_l2_vpns/configuration/xe-16-8/mp-l2-vpns-xe-16-8-book/evpn-single-homing.html
https://supportportal.juniper.net/s/article/MX-Example-Configuring-EVPN-with-BGP-confederation-for-EVPN-MPLS-and-EVPN-VXLAN?language=en_US
https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9300/software/release/16-11/configuration_guide/lyr2/b_1611_lyr2_9300_cg/configuring_vxlan_bgp_evpn.html