当前位置: 首页 > news >正文

BGP路由反射器

原理概述
缺省情况下,路由器从它的一个 IBGP对等体那里接收到的路由条目不会被该路由器再传递给其他IBGP对等体,这个原则称为BGP水平分割原则,该原则的根本作用是防止 AS内部的BGP路由环路。因此,在AS内部,一般需要每台路由器都运行 BGP协议并建立全互联的IBGP对等体关系,这样才能避免BGP路由黑洞等问题。对于有n个BGP路由器的AS来说,全互联的IBGP对等体关系将有n×(n-1)÷2个。对于大型AS来说,数量众多的IBGP对等体关系将导致配置和维护的工作量都非常大,且人为出错的可能性也随之增加。
解决上述问题的方法之一就是使用BGP路由反射器。BGP路由反射器的使用,可以在很大程度上减少大型AS中 IBGP对等体关系的数量并简化相应的配置和维护工作。BGP路由反射器是AS内部 IBGP网络环境中的一种特殊角色,其他的角色还有反射器的客户端和非客户端。一个反射器和它所有的客户端一起被统称为一个Cluster;客户端与它的反射器建立的是IBGP对等体关系;客户端之间无需建立IBGP对等体关系;非客户端和反射器建立的是IBGP对等体关系;非客户端之间需要建立全互连的IBGP对等体关系;非客户端和客户端之间无需建立IBGP对等体关系;一个AS内部可以有多个Cluster;一个Cluster中可以有多台反射器。另外,EBGP对等体之间是不存在 BGP路由反射器的概念的。
BGP路由反射器在反射路由的时候遵循的原则是:从一个非客户端那里接收到的路由,反射器会将它只传递给所有的客户端;从一个客户端那里接收到的路由,反射器会将它传递给所有其他的客户端以及所有的非客户端;从EBGP对等体那里接收到的路由,反射器会将它传递给所有的客户端和非客户端。


实验目的
理解 BGP路由反射器的应用场景·理解 BGP路由反射器的工作原理

掌握BGP路由反射器的基本配置方法实验内容

本实验网络包含了两个AS,两个Cluster。R1、R2、R3属于Cluster 1,R4、R5、R6属于Cluster 2,R7不属于任何Cluster。在AS 100内部,所有路由器都运行OSPF协议作为IGP,并将各自的Loopback 0接口宣告进OSPF进程中,使得各路由器可以使用Loopback 0接口来建立全互联的IBGP对等体关系。然后,为了减少配置工作量,决定使用路由反射器,要求是:在 Cluster 1中,R1为路由反射器,R2和R3为其客户端;在Cluster 2中,R4为路由反射器,R5、R6为其客户端;R7为非客户端;R1与R8为 EBGP对等体关系。

 

1、基础配置
R1:
sys
sysname R1
int loop 0
ip add 10.0.1.1 32
int g0/0/1
ip add 10.0.12.1 24
int g0/0/2
ip add 10.0.13.1 24
int g0/0/3
ip add 10.0.18.1 24
int g0/0/0
ip add 10.0.14.1 24
q
bgp 100
router-id 10.0.1.1
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.2.2 next-hop-local
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer 10.0.3.3 next-hop-local
peer 10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.4.4 next-hop-local
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.5.5 next-hop-local
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
peer 10.0.6.6 next-hop-local
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
peer 10.0.7.7 next-hop-local
network  10.0.1.1 32peer 10.0.18.8 as-number 200
ospf 1 router-id 10.0.1.1area 0.0.0.0network 10.0.1.1 0.0.0.0network 10.0.12.0 0.0.0.255network 10.0.13.0 0.0.0.255network 10.0.14.0 0.0.0.255R2:
sys
sysname R2
int loop 0
ip add 10.0.2.2 32
int loop 1
ip add 10.0.22.22 32
int g0/0/1
ip add 10.0.12.2 24
q
bgp 100
router-id 10.0.2.2
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer 10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
network 10.0.2.2  32
ospf 1 router-id 10.0.2.2area 0.0.0.0network 10.0.2.2 0.0.0.0network 10.0.12.0 0.0.0.255R3:
sys
sysname R3
int loop 0
ip add 10.0.3.3 32
int g0/0/2
ip add 10.0.13.3 24
q
bgp 100
router-id 10.0.3.3
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
network 10.0.3.3 32
ospf 1 router-id 10.0.3.3area 0.0.0.0network 10.0.3.3 0.0.0.0network 10.0.13.0 0.0.0.255R4:
sys
sysname R4
int loop 0
ip add 10.0.4.4 32
int g0/0/0
ip add 10.0.14.4 24
int g0/0/1
ip add 10.0.47.4 24
int g0/0/2
ip add 10.0.46.4 24
int g0/0/3
ip add 10.0.45.4 24
q
bgp 100
router-id 10.0.4.4
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
network 10.0.4.4  32
ospf 1 router-id 10.0.4.4area 0.0.0.0network 10.0.4.4 0.0.0.0network 10.0.14.0 0.0.0.255network 10.0.45.0 0.0.0.255network 10.0.46.0 0.0.0.255network 10.0.47.0 0.0.0.255R5:
sys
sysname R5
int loop 0
ip add 10.0.5.5 32
int g0/0/1
ip add 10.0.45.5 24
q
bgp 100
router-id 10.0.5.5
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer 10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
network 10.0.5.5  32
ospf 1 router-id 10.0.5.5area 0.0.0.0network 10.0.5.5 0.0.0.0network 10.0.45.0 0.0.0.255R6:
sys
sysname R6
int loop 0
ip add 10.0.6.6 32
int g0/0/2
ip add 10.0.46.6 24
qbgp 100
router-id 10.0.6.6
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.7.7 as-number 100
peer 10.0.7.7 connect-interface LoopBack 0
network 10.0.6.6  32
ospf 1 router-id 10.0.6.6area 0.0.0.0network 10.0.6.6 0.0.0.0network 10.0.46.0 0.0.0.255R7:
sys
sysname R7
int loop 0
ip add 10.0.7.7 32
int g0/0/0
ip add 10.0.47.7 24
q
bgp 100
router-id 10.0.7.7
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface LoopBack 0
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface LoopBack 0
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface LoopBack 0
peer  10.0.4.4 as-number 100
peer 10.0.4.4 connect-interface LoopBack 0
peer 10.0.5.5 as-number 100
peer 10.0.5.5 connect-interface LoopBack 0
peer 10.0.6.6 as-number 100
peer 10.0.6.6 connect-interface LoopBack 0
network 10.0.7.7 32
ospf 1 router-id 10.0.7.7area 0.0.0.0network 10.0.7.7 0.0.0.0network 10.0.47.0 0.0.0.255R8:
sys
sysname R8
int loop 0
ip add 10.0.8.8 32
int g0/0/0
ip add 10.0.18.8 24
q
bgp 200router-id 10.0.8.8peer 10.0.18.1 as-number 100#ipv4-family unicastundo synchronizationnetwork 10.0.8.8 255.255.255.255peer 10.0.18.1 enable

 可以看到,AS 100内部的路由器都已经接收到了关于10.0.8.8/32的路由信息。R8只接收到了关于10.0.1.1/32的路由信息,而没有接收到关于AS 100内部其他路由器的Loopback 0 的路由信息,这是因为AS 100内部OSPF路由协议的优先级要高于BGP路由协议的优先级,于是R1就不会将除了本地起源(即下一跳为0.0.0.0)的路由之外的其他路由信息传递给R8。显然,这会导致R8与AS 100内部的路由器的互通问题。为了使R8能够与AS 100内部的所有路由器的Loopback 0接口所在的网络进行通信,可以在R8上配置一条聚合的静态路由,下一跳为10.0.18.1。
[R8]ip route-static 10.0.0.0 20 10.0.18.1
配置完成后,网络通信正常,但是整体配置工作量较大。

 对于大型网络来讲,使用路由反射器可以大大减少IBGP对等体关系的数量。路由反射器的使用,会明显减少配置工作量,人为出错的可能性也会大大降低。
下面将进行关于路由反射器的实验,首先清除之前各路由器上的BGP进程。在此需要提醒读者的是,在实际场景中如果这样操作,将会导致网络瘫痪一段时间。
以R1为例,清除原来的BGP进程。

undo bgp 100

R2和R3是路由反射器R1的客户端,它们只需和R1配置成IBGP对等体关系即可,R2和R3之间无需配置为IBGP对等体关系。另外,将R2的Loopback 1 (10.0.22.22/32)接口通告进 BGP进程。

配置R1为R2和R3的路由反射器,配置Cluster-ID为1,配置Rl与R4之间的IBGP对等体关系,配置RI与R8之间的EBGP对等体关系。

 

r1:bgp 100router-id 10.0.1.1peer 10.0.4.4 as-number 100peer 10.0.4.4 connect-interface LoopBack0peer 10.0.18.8 as-number 200group in1 internalpeer 10.0.2.2 as-number 100peer 10.0.2.2 group in1peer 10.0.3.3 as-number 100peer 10.0.3.3 group in1#ipv4-family unicastundo synchronizationreflector cluster-id 1peer 10.0.4.4 enablepeer 10.0.4.4 next-hop-localpeer 10.0.18.8 enablepeer in1 enablepeer in1 reflect-clientpeer in1 next-hop-localpeer 10.0.2.2 enablepeer 10.0.2.2 group in1peer 10.0.3.3 enablepeer 10.0.3.3 group in1r2:bgp 100router-id 10.0.2.2peer 10.0.1.1 as-number 100peer 10.0.1.1 connect-interface LoopBack0#ipv4-family unicastundo synchronizationnetwork 10.0.0.0network 10.0.2.2 255.255.255.255network 10.0.22.22 255.255.255.255peer 10.0.1.1 enabler3:bgp 100router-id 10.0.3.3peer 10.0.1.1 as-number 100peer 10.0.1.1 connect-interface LoopBack0#ipv4-family unicastundo synchronizationnetwork 10.0.3.3 255.255.255.255peer 10.0.1.1 enabler8:
bgp 200router-id 10.0.8.8peer 10.0.18.1 as-number 100#ipv4-family unicastundo synchronizationnetwork 10.0.8.8 255.255.255.255peer 10.0.18.1 enable

 R5和R6是路由反射器R4的客户端,它们只需和R4配置成IBGP对等体关系即可,R5和R6之间无需配置为IBGP对等体关系。

配置R4为R5 和R6的路由反射器,配置Cluster-ID为2,配置R4与R1之间的IBGP对等体关系,配置R4与R7之间的IBGP对等体关系。

r4:
bgp 100router-id 10.0.4.4peer 10.0.1.1 as-number 100peer 10.0.1.1 connect-interface LoopBack0peer 10.0.7.7 as-number 100peer 10.0.7.7 connect-interface LoopBack0group in2 internalpeer 10.0.5.5 as-number 100peer 10.0.5.5 group in2peer 10.0.6.6 as-number 100peer 10.0.6.6 group in2#ipv4-family unicastundo synchronizationreflector cluster-id 2peer 10.0.1.1 enablepeer 10.0.7.7 enablepeer in2 enablepeer in2 reflect-clientpeer 10.0.5.5 enablepeer 10.0.5.5 group in2peer 10.0.6.6 enablepeer 10.0.6.6 group in2r5:
bgp 100router-id 10.0.5.5peer 10.0.4.4 as-number 100peer 10.0.4.4 connect-interface LoopBack0#ipv4-family unicastundo synchronizationnetwork 10.0.5.5 255.255.255.255peer 10.0.4.4 enabler6:
bgp 100router-id 10.0.6.6peer 10.0.4.4 as-number 100peer 10.0.4.4 connect-interface LoopBack0#ipv4-family unicastundo synchronizationnetwork 10.0.6.6 255.255.255.255peer 10.0.4.4 enabler7:
bgp 100router-id 10.0.7.7peer 10.0.4.4 as-number 100peer 10.0.4.4 connect-interface LoopBack0#ipv4-family unicastundo synchronizationnetwork 10.0.7.7 255.255.255.255peer 10.0.4.4 enable

观察发现,R3、R4、R8的BGP路由表中都存在关于10.0.22.22/32的路由信息。由此可见,R1将10.0.22.22/32这条路由传递给了R3和R4,不再受BGP水平分割原则的限制,同时,这条路由也被R1传递给了EBGP对等体R8。实验表明,BGP路由反射器从它的一个客户端接收到路由之后,会将该路由反射给它的其他客户端、非客户端,以及EBGP对等体。


可以看到,R4将10.0.22.22/32这条路由传递给了R5和R6,但是没有传递给R7,说明路由反射器会把从非客户端收到的路由传递给客户端,但不会传递给其他非客户端。由于路由反射器认为非客户端之间应该是存在IBGP对等体关系的,所以路由反射器和非客户端之间依然遵循水平分割原则。
路由反射器R4认为R1与R7之间应该存在IBGP对等体关系,所以没有将从非客户端R1接收到的BGP路由传递给R7。

但实际上,R1与R7之间并没有被配置为IBGP对等体关系,这就导致了R7的 BGP路由表中并没有关于10.0.22.22/32的路由。解决此问题的办法就是将R1和R7配置为IBGP对等体关系。

r1:
bgp 100peer 10.0.7.7 as-number 100peer 10.0.7.7 connect-interface LoopBack0peer 10.0.7.7 next-hop-local
r7:
bgp 100peer 10.0.1.1as-number 100peer 10.0.1.1 connect-interface LoopBack0peer 10.0.1.1 next-hop-local

 可以看到,R7上的10.0.22.22/32这条路由信息是从R1 (10.0.1.1)传递过来的,而不是从R4传递过来的,这说明路由反射器和非客户端之间是遵循水平分割原则的。

可以看到,R1 从 EBGP对等体R8接收到关于10.0.8.8/32的路由之后,将这条路由传递给了R2、R3、R4,说明路由反射器会把从EBGP对等体接收到的路由传递给它的客户端和非客户端。

在前面的配置中,R1上使用了命令peer in_1 reflect-client。这条命令的含义是指定BGP对等体组in_1中的路由器(即R2和R3)为R1的客户端,从相反的角度来说,也就是R1被指定成为BGP对等体组in_1中的路由器(即R2和R3)的路由反射器。
在R1、R3、R4上查看10.0.22.22/32这条路由的具体属性。

 

 

可以观察到,在R1、R3、R4上关于10.0.22.22/32的路由的属性是有所区别的。在R3和R4上关于此路由多了Originator和 Cluster List这两个属性。Originator 属性的作用是防止路由在反射器和客户端/非客户端之间出现环路。路由第一次被反射的时候,反射器会将Originator 属性加入这条路由中,用 BGP Router-ID表示,用来标识这条路由的起源路由器。如果路由中已经存在Originator属性,则反射器不会创建新的Originator。当其他BGP对等体接收到这条路由时,将对收到的Originator和本地的BGP Router-ID进行比较,如果两者相同,BGP对等体将会忽略掉这条路由,不做处理。Originator属性可以传递给其他的Cluster,路由在AS内传递时该属性不会丢失。
Cluster List属性可用来防止 Cluster间的路由环路。当路由反射器在客户端之间或客户端与非客户端之间反射路由时,会将自己的Cluster-ID添加到Cluster List 中。路由反射器接收到BGP路由后会去检查其中的Cluster List,如果发现自己的Cluster-ID位于Cluster List 中,则表明出现了路由环路,因而会忽略该路由。AS内的每台路由反射器都采用了一个唯一的4个8位组来标识Cluster-ID,如果 Cluster中包含了多台路由反射器,则必须以手工的方式为每台路由反射器配置Cluster-ID。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)
  • mysql字符类型字段设置默认值为当前时间
  • react配置代理的3中方法
  • 9. 机器学习汇总(数据、模型、流程、心血管疾病预测)
  • 编程类精品GPTs
  • 05 循环神经网络
  • Webpack 5 Tree Shaking与Module Federation
  • 【管控业财一体化】
  • k8s核心知识总结
  • 构造函数的详解和new操作符
  • 项目架构知识点总结
  • 计算机网络(四)数字签名和CA认证
  • C#使用Clipper2进行多边形合并、相交、相减、异或的示例
  • 鸿蒙笔记--存储
  • Matplotlib : Python 的绘图库
  • 【347天】每日项目总结系列085(2018.01.18)
  • canvas 绘制双线技巧
  • Fundebug计费标准解释:事件数是如何定义的?
  • Gradle 5.0 正式版发布
  • Js基础知识(一) - 变量
  • PAT A1050
  • SpringCloud集成分布式事务LCN (一)
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue-router 实现分析
  • Yeoman_Bower_Grunt
  • Zepto.js源码学习之二
  • 翻译--Thinking in React
  • 高程读书笔记 第六章 面向对象程序设计
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 山寨一个 Promise
  • 使用Gradle第一次构建Java程序
  • 我从编程教室毕业
  • 再次简单明了总结flex布局,一看就懂...
  • ​iOS实时查看App运行日志
  • ​力扣解法汇总946-验证栈序列
  • ​什么是bug?bug的源头在哪里?
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #数据结构 笔记三
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)STL算法之比较
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (备忘)Java Map 遍历
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (强烈推荐)移动端音视频从零到上手(下)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)终结任务
  • .net dataexcel 脚本公式 函数源码