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 模式。

拓扑
img

这里使用多个厂商的软件/硬件,通过 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

posted @ 2024-10-31 13:27  bfhyqy  阅读(18)  评论(0编辑  收藏  举报