百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

linux主机frrouting和华三CE6850建立BGP EVPN邻居并实现三层互通

ahcoder 2025-01-17 10:51 23 浏览

前置知识

frrouting

FRR提供IP路由服务。它在网络堆栈中的作用是与其他路由器交换路由信息,做出路由和策略决策,并将这些决策通知其他层。在最常见的场景中,FRR将路由决策安装到操作系统内核中,允许内核网络堆栈做出相应的转发决策

除了动态路由之外,FRR还支持全方位的L3配置,包括静态路由、地址、路由器广告等。它也有一些轻量级的L2功能,但这主要是留给平台的。这使得它适用于从具有静态路由的小型家庭网络到运行完整Internet表的Internet交换机的部署

传统的路由软件是作为一个进程程序制作的,它提供了所有的路由协议功能。FRR采取了不同的方法。FRR是一组守护进程,它们一起工作来构建路由表。每个主要协议都在自己的守护进程中实现,这些守护进程与amiddleman守护进程(zebra)通信,后者负责协调例程决策和与数据平面通信。

frrouting架构


所有FRR守护进程都可以通过一个名为vtysh的集成用户界面外壳进行管理。vtysh通过一个UniXdomain套接字连接到每个守护进程,然后作为用户输入的代理。除了统一的前端,vtysh还提供了通过集成配置模式使用单个配置文件配置所有守护进程的能力。这避免了维护单独的配置文件的开销

FRR通过Netlink从内核了解系统的Linux网络接口配置,但是它不直接管理网络接口。以下部分将包括与FRR的EVPN实现兼容的Linux接口配置示例。虽然有多个接口管理器可以设置适当的内核配置(例如ifupdown2),但这些示例将使用iproute2添加/配置接口

EVPN

EVPN代表以太网虚拟专用网络。这是BGP的扩展,它支持通过普通网络发送桥接(L2)和路由(L3)VPN的信令。EVPN在RFC 7432中进行了描述,并通过几个额外的RFC和IETF草案进行了更新,包括RFC 9135(以太网VPN中的集成路由和桥接)、RFC 9136(EthernetVPN中的IP前缀广告)、RFC 8584(以太网VPN指定转发ElectionExtensibility框架)和RFC 8365(使用以太网VPN的网络虚拟化覆盖解决方案)。FRR通过LACP以太网段以及对称和非对称IRB支持全活动第2层多宿主设备(MHD)。FRR使用“基于VLAN的服务接口”(RFC 7432)实现MAC-VRF,并按照“无接口IP-VRF-to-IP-VRF模型”(RFC 9136)执行对称IRB路由的处理

EVPN概念

BGP-EVPN是以太网帧传输的控制面,无论这些帧是桥接还是路由。对于带有VXLAN封装的基于VLAN的服务接口,单个VNI用于表示EVPNInstance(EVI),并将具有自己的路由区分器和一组导入/导出路由目标

VNI被认为是第2层(绑定到MAC-VRF)或第3层(绑定到IP-VRF),这表明VRF表示什么样的信息。IP-VRF表示路由表(操作方式与VRF传统上在L3VPN中的操作方式大致相同),而MAC-VRF表示桥接表,即MAC(fdb)和ARP/NDP条目

MAC-VRF可以被认为是一个带有或不带有与之关联的SVI的VLAN。SVI是绑定到桥接域的第3层接口。LinuxSVI可以是传统网桥,也可以是VLAN感知网桥的VLAN子接口。如果VLAN有SVI,ARP/NDP条目可以绑定到广播域中的MAC。没有SVI,VLAN以传统的L2方式运行,MAC是VLAN中唯一已知的主机地址类型。

就像SVI与VRF可以有多对一的关系一样,MAC-VRF(L2VNI)与IP-VRF(L3VNI)也可以有多对一的关系。在FRR中,L2VNI的L3VNI关联由VLAN的SVI的存在和SVI的VRF成员关系决定。如果L2VNI没有SVI,或者它的SVI没有被VRF奴役,L2VNI将与“默认”VRF相关联。如果L2VNI有一个SVI,其主设备是VRF,那么L2VNI将与其主VRF相关联。

实验说明

  • frr-test-01 主机安装Rocky8.7 系统内核版本为4.18,因为4.18的内核支持因为EVPN支持需要>=4.18版本
  • H3C S6800 使用10.32.30.100 和frr-test-01建立BGP EVPN邻居
  • frr-test-01 使用100.64.0.1 和H3C S6800 建立BGP EVPN邻居,路由保持互通
  • PC 使用vlan 10 进行接入
  • 验证frr-test-01和H3C S6800 建立BGP EVPN邻居,并能传递Type2 Type3 和Type5 路由,实现PC 和ns br10-client互通

安装frrouting

在frr-test-01 主机安装frrouting软件并开启bgp 功能

#关闭firewalld和selinux
systemctl stop firewalld
systemctl disable firewalld

vi /etc/selinux/config
SELINUX=disable

#全局开启IPv4和IPv6地址转发,如果不使用IPv6可以不开启v6的转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p

#安装
FRRVER="frr-stable"
curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el8.noarch.rpm
sudo yum install ./$FRRVER*

sudo yum install frr frr-pythontools

#修改frr配置启用bgp
vim /etc/frr/daemons
bgpd=yes

#启动
systcemctl start frr
systemct enable frr

主机配置BGP EVPN

#使用vthsh进入frr

#配置vrf
vrf vrf1
 vni 100
exit-vrf
!

#配置BGP EVPN
router bgp 4200000000
 neighbor 10.32.30.100 remote-as 4200000000
 !
 address-family l2vpn evpn
  neighbor 10.32.30.100 activate
  advertise-all-vni
  advertise-svi-ip
 exit-address-family
exit
!
router bgp 4200000000 vrf vrf1
 !
 address-family ipv4 unicast
  redistribute static
 exit-address-family
 !
 address-family l2vpn evpn
  advertise ipv4 unicast
 exit-address-family
exit

主机配置vrf、vxlan和vni

#创建vpn-instance vrf1
ip link add vrf1 type vrf table 1100
ip link set vrf1 up

#新建br100接口将接口划分vpn-instance vrf1中
##############################################################
#创建一个名为br100的传统网桥接口                                                   
#将其绑定到名称为vrf1的VRF,并禁用接口的IPv6地址自动配置                                         
#自定义了br100的MAC地址                                              
#这个传统网桥用于L3VNI广播域映射到VRF vrf1,即br100是vrf1的L3-SVI  
##############################################################
ip link add br100 type bridge 
ip link set br100 master vrf1 addrgenmode none
ip link set br100 addr aa:bb:cc:00:00:64

############################################
#创建一个名为vni100的传统接口,它使用100.64.0.1的VTEP-IP,携带三层VNI 100,并禁用了动态VTEP学习
#vni100 禁用IPv6地址自动配置
#将vni100接口加入到br100,启用ARP/ND抑制,并禁用动态MAC学习
############################################
ip link add vni100 type vxlan local 100.64.0.1 dstport 4789 id 100 nolearning
ip link set vni100 master br100 addrgenmode none
ip link set vni100 type bridge_slave neigh_suppress on learning off
ip link set vni100 up
ip link set br100 up

###############
## l2vni 110 ##
###############
##################################################
#创建了一个名为br10的传统网桥。
#将br10添加到vrf1中
#设置静态SVI接口(可以理解为vbdif接口)的MAC,这里也可以不设置,但是为了一致性还是设置了一下。
#由于br10将用于路由,因此IPv4和IPv6地址也添加到了SVI中
##################################################
ip link add br10 type bridge
ip link set br10 master vrf1
ip link set br10 addr aa:bb:cc:00:00:6e
ip addr add 10.0.10.1/24 dev br10

 #将br10-client的veth接口加入到br10
ip netns add br10-client
 ip link add veth type veth peer name eth0 netns br10-client
 ip netns exec br10-client ip link set lo up
 ip netns exec br10-client ip link set eth0 up
 ip netns exec br10-client ip addr add 10.0.10.100/24 dev eth0 
 ip netns exec br10-client ip route add 0.0.0.0/0 via 10.0.10.1
 ip link set veth up  
 ip link set veth master br10

CE6850交换机配置BGP EVPN

在linux主机中生成的RT值是59904:VNIID 的方式所以在交换机的vpn实例里面配置了59904:100做为出入方向的RT。

#配置vlan
vlan 10 to 4094

#开启l2vpn evpn支持
 l2vpn enable

#配置bgp evpn邻居
bgp 4200000000
 peer 10.32.30.88 as-number 4200000000
 #
 address-family l2vpn evpn
  peer 10.32.30.88 enable
#

#配置vrf
ip vpn-instance vrf1
 route-distinguisher 10:1
 #
 address-family evpn
  vpn-target 59904:100 import-extcommunity
  vpn-target 59904:100 export-extcommunity
#

#配置vsi interface
interface Vsi-interface10
 ip binding vpn-instance vrf1
 ip address 10.0.110.1 255.255.255.0
 local-proxy-arp enable
#

#配置vsi
vsi br10
 gateway vsi-interface 10
 vxlan 110
 evpn encapsulation vxlan
  route-distinguisher auto
  vpn-target 59904:110 export-extcommunity
  vpn-target 59904:110 import-extcommunity
#

#配置三层VNI
interface Vsi-interface30
 ip binding vpn-instance vrf1
 l3-vni 100

查看BGP EVPN邻居

可以看到邻居已经建立成功,CE6850交换机已经和frr-test-01主机建立了bgp evpn邻居

VXLAN隧道

查看BGP EVPN路由

CE6850交换机

已经通过BGP EVPN学习到了10.0.10.100的路由

[H3C]dis bgp l2vpn evpn

 BGP local router ID is 100.64.0.2
 Status codes: * - valid, > - best, d - dampened, h - history
               s - suppressed, S - stale, i - internal, e - external
               a - additional-path
       Origin: i - IGP, e - EGP, ? - incomplete

 Total number of routes from all PEs: 5

 Route distinguisher: 1:110
 Total number of routes: 4

* >  Network : [2][0][48][0001-0001-0001][32][10.0.110.1]/136
     NextHop : 0.0.0.0                                  LocPrf    : 100
     PrefVal : 32768                                    OutLabel  : NULL
     MED     : 0
     Path/Ogn: i

* >  Network : [2][0][48][8e6f-865a-0306][0][0.0.0.0]/104
     NextHop : 0.0.0.0                                  LocPrf    : 100
     PrefVal : 32768                                    OutLabel  : NULL
     MED     : 0
     Path/Ogn: i

* >  Network : [2][0][48][8e6f-865a-0306][32][10.0.110.100]/136
     NextHop : 0.0.0.0                                  LocPrf    : 100
     PrefVal : 32768                                    OutLabel  : NULL
     MED     : 0
     Path/Ogn: i

* >  Network : [3][0][32][100.64.0.2]/80
     NextHop : 0.0.0.0                                  LocPrf    : 100
     PrefVal : 32768                                    OutLabel  : NULL
     MED     : 0
     Path/Ogn: i

 Route distinguisher: 10:1(vrf1)
 Total number of routes: 2

* >i Network : [2][0][48][2e15-af31-52f8][32][10.0.10.100]/136
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

* >i Network : [2][0][48][aabb-cc00-006e][32][10.0.10.1]/136
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

 Route distinguisher: 100.64.0.1:4
 Total number of routes: 5

* >i Network : [2][0][48][2e15-af31-52f8][0][0.0.0.0]/104
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

* >i Network : [2][0][48][2e15-af31-52f8][32][10.0.10.100]/136
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

* >i Network : [2][0][48][aabb-cc00-006e][32][10.0.10.1]/136
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

* >i Network : [3][0][32][100.64.0.1]/80
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

* >i Network : [2][0][48][aabb-cc00-006e][128][FE80::A8BB:CCFF:FE00:6E]/232
     NextHop : 100.64.0.1                               LocPrf    : 100
     PrefVal : 0                                        OutLabel  : NULL
     MED     :
     Path/Ogn: i

frr-test-01主机

主机也通过BGP EVPN学习到了i[2]:[0]:[48]:[8e:6f:86:5a:03:06]:[32]:[10.0.110.100] 路由

frr-test-01# show bgp l2vpn evpn 
BGP table version is 137, local router ID is 100.64.0.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]:[Frag-id]
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:110
 *>i[2]:[0]:[48]:[00:01:00:01:00:01]:[32]:[10.0.110.1]
                    10.32.30.100             0    100      0 i
                    RT:59904:100 RT:59904:110 ET:8 Default Gateway Rmac:8e:2a:a3:4a:01:00
 *>i[2]:[0]:[48]:[8e:6f:86:5a:03:06]:[32]:[10.0.110.100]
                    10.32.30.100             0    100      0 i
                    RT:59904:100 RT:59904:110 ET:8 Rmac:8e:2a:a3:4a:01:00
 *>i[3]:[0]:[32]:[100.64.0.2]
                    10.32.30.100             0    100      0 i
                    RT:59904:110 ET:8
Route Distinguisher: 100.64.0.1:4
 *> [2]:[0]:[48]:[2e:15:af:31:52:f8]
                    100.64.0.1                         32768 i
                    ET:8 RT:59904:110
 *> [2]:[0]:[48]:[2e:15:af:31:52:f8]:[32]:[10.0.10.100]
                    100.64.0.1                         32768 i
                    ET:8 RT:59904:110 RT:59904:100 Rmac:aa:bb:cc:00:00:64
 *> [2]:[0]:[48]:[aa:bb:cc:00:00:6e]:[32]:[10.0.10.1]
                    100.64.0.1                         32768 i
                    ET:8 RT:59904:110 RT:59904:100 Rmac:aa:bb:cc:00:00:64
 *> [2]:[0]:[48]:[aa:bb:cc:00:00:6e]:[128]:[fe80::a8bb:ccff:fe00:6e]
                    100.64.0.1                         32768 i
                    ET:8 RT:59904:110
 *> [3]:[0]:[32]:[100.64.0.1]
                    100.64.0.1                         32768 i
                    ET:8 RT:59904:110

查看路由表

CE6850交换机

可以看到10.0.10.100/32 主机路由已经放入到了vrf1的路由表中

[H3C]dis ip routing-table vpn-instance vrf1

Destinations : 14       Routes : 14

Destination/Mask   Proto   Pre Cost        NextHop         Interface
0.0.0.0/32         Direct  0   0           127.0.0.1       InLoop0
10.0.10.1/32       BGP     255 0           100.64.0.1      Vsi30
10.0.10.100/32     BGP     255 0           100.64.0.1      Vsi30
10.0.110.0/24      Direct  0   0           10.0.110.1      Vsi10
10.0.110.0/32      Direct  0   0           10.0.110.1      Vsi10
10.0.110.1/32      Direct  0   0           127.0.0.1       InLoop0
10.0.110.255/32    Direct  0   0           10.0.110.1      Vsi10
127.0.0.0/8        Direct  0   0           127.0.0.1       InLoop0
127.0.0.0/32       Direct  0   0           127.0.0.1       InLoop0
127.0.0.1/32       Direct  0   0           127.0.0.1       InLoop0
127.255.255.255/32 Direct  0   0           127.0.0.1       InLoop0
224.0.0.0/4        Direct  0   0           0.0.0.0         NULL0
224.0.0.0/24       Direct  0   0           0.0.0.0         NULL0
255.255.255.255/32 Direct  0   0           127.0.0.1       InLoop0
[H3C]

frr-test-01主机

在frr中查看路由表,可以看到vrf1中也学习到了10.0.110.100的路由

frr-test-01# show ip route vrf vrf1
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, A - Babel, F - PBR, f - OpenFabric,
       t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF vrf1:
C>* 10.0.10.0/24 is directly connected, br10, 19:11:49
L>* 10.0.10.1/32 is directly connected, br10, 19:11:49
B>* 10.0.110.1/32 [200/0] via 10.32.30.100, br100 onlink, weight 1, 00:02:04
B>* 10.0.110.100/32 [200/0] via 10.32.30.100, br100 onlink, weight 1, 00:02:04
frr-test-01# 

测试访问

从10.0.10.100 访问 10.0.110.100

测试结果可以正常访问

在frr-test-01 veth 接口抓包

源MAC:2e:15:af:31:52:f8

目的MAC为br10接口MAC地址:aa:bb:cc:00:00:6e

在frr-test-01 br10 接口抓包

在frr-test-01 br100 接口抓包

从这里开始源MAC为br10 接口MAC,目的MAC为CE6850 vbdi10的mac地址

在frr-test-01 vni100 接口抓包

在这个接口做VXLAN封装

内层源MAC为br10 接口MAC,目的MAC为CE6850 vbdi10的mac地址

外层源IP为100.64.0.1 目的IP为10.32.30.100

在frr-test-01 eth0 接口抓包

封装VXLAN使用三层vni100

CE6850 G1/0/1接口抓包

相关推荐

PC也能装MAX OS X

MACBOOK向来以其时尚的外观以及易用的OSX操作系统成为了时(zhuang)尚(bi)人士的最爱。但是其动不动就上万元的昂贵价格,也将一批立志时(zhuang)尚(bi)人士的拒之门外。但是最近...

一千多元的笔记本能买吗?英特尔11代+大屏幕,豆小谷值得选吗?

前言:有很多粉丝都问过本人,一千多元到底能买到什么样的笔记本?在此笔者只想说,这样的资金预算真的太低了!如果想买全新的,那大概率买的就是性能比较拉垮的上网本,比如搭载英特赛扬N系列、J系列处理器的轻薄...

首款配备骁龙X Elite处理器的Linux笔记本:采用KDE Plasma桌面环境

德国Linux硬件供应商TUXEDOComputers宣布正在开发一款配备高通骁龙XElite处理器(SnapdragonXEliteSoC)的ARM笔记本电脑,内部将该...

System76推出Gazelle Linux笔记本:配酷睿i9-13900H处理器

IT之家3月30日消息,主打Linux硬件的厂商System76于今天发布了新一代Gazelle笔记本电脑,共有15英寸和17英寸两个版本,将于3月30日接受预订,...

Kubuntu Focus Xe Gen 2笔记本发布,预装Linux系统

IT之家3月25日消息,KubuntuFocusXeGen2笔记本于近日发布,这是一款预装Kubuntu22.04LTSGNU/Linux发行版的轻薄本。上一代Kub...

这台Linux笔记本已用上英特尔12代酷睿,最高可选i7-1255U、卖1149美元起

Linux笔记本可能因为比较小众,一般都是拿Windows笔记本换个系统而来,硬件上也会落后同期Windows笔记本一两代,不过现在专门做Linux电脑的System76,推出了一款名为LemurP...

戴尔Inspiron 14 Plus骁龙笔记本迎新补丁,支持启动Linux

IT之家4月25日消息,科技媒体phoronix今天(4月25日)发布博文,报道称最新发布的Linux内核补丁,针对骁龙芯片的戴尔Inspiron14Plus笔记本,让其...

TUXEDO推出InfinityFlex 14二合一Linux笔记本,配i5-1335U

IT之家8月12日消息,Linux硬件企业TUXEDO当地时间本月2日推出了InfinityFlex14二合一Linux笔记本。该笔记本搭载2+8核的英特尔酷睿i5-...

登月探测器嫦娥使用什么操作系统,是Linux还是其它自主研发?

这是不是国家机密啊。事实什么样的不知道,但是从美国的探测器来看,就算不是也是相似的东西。下面我来说说我知道的。龙芯已经随北斗卫星上天了.就算登月探测器嫦娥是用"龙芯+Linux"也不出奇.没必要...

DNS分离解析实验

如果本文对你有帮助,欢迎关注、点赞、收藏、转发给朋友,让我有持续创作的动力目录一、分离解析概述二、实验需求三、实验步骤3.1双网卡服务器配置3.1.1添加两张网卡(内外网)3.1.2对两个网卡进...

一个小实验巩固下进程管理

先回顾下之前的三篇文章:Linux进程在内核眼中是什么样子的?Linux进程线程是如何创建的?Linux是如何调度进程的?通过这三篇文章的学习我们知道,无论内核进程还是用户进程,都是可以用task...

VMware Kali无线WIFI密码破解

WIFI破解前准备工作一张支持Kali系统监听的无线网卡VMware虚拟机安装好Kali系统(本实验用的是Kali2022版本)Kali系统下载、安装官方网站:https://www.kali.or...

python多进程编程

forkwindows中是没有fork函数的,一开始直接在Windows中测试,直接报错importosimporttimeret=os.fork()ifret==0:...

拔电源十台电脑藏后门!德国实验惊曝Windows致命漏洞

2025年4月15日,央视突然曝出一个超级大新闻!原来美国国家安全局通过黑龙江,往微软Windows系统里发送加密信息,激活了系统里藏着的后门程序,想破坏哈尔滨亚冬会!这消息一出来,大家才发现,竟然已...

深度探索RK3568嵌入式教学平台实战案例:设备驱动开发实验

一、产品简介TL3568-PlusTEB人工智能实验箱国产高性能处理器64位4核低功耗2.0GHz超高主频1T超高算力NPU兼容鸿蒙等国产操作系统二、实验目的1、熟悉基本字符设备的驱动程序...