目录
BGP基础
BGP的发展历史
BGP在企业中的应用
距离矢量型协议和路径矢量型协议的区别
BGP的特征
1.可控性
2.可靠性
3.AS-BY-AS
BGP的对等关系
BGP的数据包
1.open报文
2.Keepalive报文
3.Update报文
4.Notification 报文
5.Route-refresh报文
BGP的状态机
BGP的工作过程
BGP的路由黑洞
BGP的环路问题
EBGP水平分割
IBGP水平分割
BGP的基本配置
BGP的对等体建立
BGP的路由发布
通过network命令发布路由
通过重发布发布路由
BGP的路由聚合
自动聚合
手工聚合
1.使用aggregate命令配置路由汇总
⒉.使用aggregate detail-suppressed命令配置路由汇总
3.使用aggregate detail-suppressed as-set命令配置路由汇总
4.在aggregate命令中使用suppress-policy关键字
BGP的路由反射器及联邦
路由反射规则
路由反射场景下的防环
originator_ID
Cluster List
反射器应用
联邦
联邦配置
BGP基础
我们之前所学的RIP也好,OSPE也好,都属于IGP协议---内部网关协议(Interior Gateway Protocol),而我们本章要学习的BGP协议,则属于EGP协议--外部网关协议(Exterior Gateway Protocol)。虽然都属于动态路由协议的范畴,但二者其实是存在本质的差别的,这个我们需要通过后续的课程,慢慢的研究清楚。
当然,我们首先需要搞清楚的,就是这个IGP协议和EGP协议是如何划分的。
这个划分依据其实我们在IA阶段去了解动态路由协议的时候,就已经提及到了,那就是依据工作范围来进行划分
1.内部网关协议IGP.(Interior Gateway Protocol) :在一个自治系统内部运行。RIP、OSPE、ISIS为常见的IGP.协议。
2.外部网关协议EGP(Exterior Gateway Protocol):运行于不同自治系统之间。BGP.是目前最常用的EGP协议。
而这里提到的自治系统,就是我们范围的划分依据,我们英文称为As(Autonomous system)。
OSPF、IS-IS等lGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长,lGP已无法管理大规模网络,AS的概念由此诞生。
1.AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IlGP可能存在暴露AS内部的网络信息的风
险。---自治
2.整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。---范围太大,协议跑不过来
(以上两点是需要进行AS划分的主要原因。)
AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。
我们通常使用的16位的AS号,其取值范围为1-65534(0和65535保留),而其中64512-65534为私有的AS号,即可以自行使用,所以,真正公有可用的AS号取值为1-64511。其数量相对较少,故有了32位拓展版的AS号。
为此在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的lGP协议:
1.BGP基于TCP,只要能够建立TCP连接即可建立BGP。
2.只传递路由信息,不会暴露AS内的拓扑信息。
3.触发式更新,而不是进行周期性更新。(太大了)
BGP的发展历史
这里我们只需要知道,我们目前在IPV4环境下,主要使用的是BGPM4版本;而目前,市场上也存在BGPV4+版本,即MP-BGP(Muti-protocol -BGP),可以支持多种地址族,能应用在IPV6环境下。之后,我们在MPLSVPN中,也需要用到。
BGP在企业中的应用
这里的内容主要是和实际企业应用相关,可以结合后续IP中期综合考试实验来讲解,也可以在这个地方进行简单的扩展。
这里可以思考一个问题,那就是我们BGP在完成AS之间路由共享的时候,需要采用哪种形式来进行共享?
·共享路由
·共享拓扑
--BGP共享AS之间的路由信息的方式应该是直接传递路由信息而不是共享拓扑信息,因为拓扑信息一方面更新量更大,其次将暴露本AS的拓扑情况,所以,传递路由信息更加合理。
这种做法显然有点类似我们之前接触的距离矢量型协议,但是,BGP并不属于距离矢量型协议,而我们通常称他为---“路径失灵型协议”
距离矢量型协议和路径矢量型协议的区别
所以,我们发现,BGP和我们之前学习的IlGP是存在本质的区别的,IGP协议的主要任务是将AS内部的未知网段信息计算获取到,而BGP则主要是将IGP协议计算出来的路由信息进行搬运和传递,并不去计算路由。
BGP的特征
这里列举一些BGP相比于IGP而言,不—样的关注点及其特征。
1.可控性
(1)因为BGP需要传递大量的路由信息,所以,需要强大的可控性,更方便对路由信息进行管理和配置策略。
(2)为此,BGP舍弃了开销值,取而代之的是设计了很多路径属性。
(3)每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择而不像IS-IS、OSPE只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。
Origin——起源属性
Nexthop——下一跳
2.可靠性
(1)BGP因为只有触发更新,而不存再周期更新(因为更新路由数量过大)。所以,需要确保可靠性。
(2)BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
(3)两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。
3.AS-BY-AS
BGP是将一个AS看作是一个整体
BGP的对等关系
1.与OSEE、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
2.缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。
3.BGP存在两种对等体关系类型:EBGP及IBGP:
(1)EBGP (External BGP)∶位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
两个路由器所属AS不同(即AS号不同)。
在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。---发送的数据包中的TTL值将被设置为1。
(2)lBGP (Internal BGP)︰位于相同自治系统的BGP路由器之间的B.GP邻接关系。
在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的连通性其实并没有DOWN(仍然可以通过R4到达彼此)
BGP的数据包
BGP存在5种数据包类型。(常用的是前四种)
1.open报文
open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系
需要比对协商的参数如下:
(1)AS号---BGP的open报文会携带本地的AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS。另外,如果对方的AS号和本地建邻时写的AS号不同,则将导致邻居关系无法建立。
(2)RID---在这里可以被称为BGPldentifier (BGP标识符),和OSPE中的RID相同,也是由32位二进制构成,按照P地址的格式来写。这个值在数据包中也会携带,将对比两边该值是否相同,相同则表示存在冲突,将导致建邻失败。
(3)BGP也可以进行认证,认证口令不同,则也将导致建邻失败
(4)open报文中还会携带Hold Time---保活时间。p在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文,则认为BGP连接中断。---该时间默认是180S。双方保活时间不一致,则将按照小的执行。
2.Keepalive报文
Keepalive报文主要用来周期保活
(1)周期保活时间默认是保活时间的1/3,默认60s。
(2)该报文还将在open报文协商参数时,临时充当确认报文---确认open报文中的参数是否认可。
3.Update报文
Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由。
(1)一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRl(Network LayerReachable Information,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
4.Notification 报文
Notification 报文是当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断。
5.Route-refresh报文
Route-refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。
BGP的状态机
BGP的状态机和QSPE的状态机不同之处在于---BGP的状态机仅描述的是对等体关系建立过程的状态变化。--主要是因为BGP可以将邻居建立过程和BGP路由收发过程分开
BGP一共存在六种状态机。
IDLE---空闲状态---所有设备启动BGP进程后将首先进入空闲状态。
当手工指定邻居关系后,将会进入到一个检查环节,需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP的会话,如果不可达,则邻居关系建立失败,停留在IDLE状态。
如果检查成功,则将进入到Connect状态---连接状态。----建立TCP会话连接的状态。
(注意,对等体关系指定是双向的,双方都将发起TCP会话连接请求,最终将会建立两个双向的TCP会话通道,只需要保留一个即可。所以,在之后发送的open报文中,将比较其中的RID参数,RID大的设备发起的TCP会话连接将被保留,RID小的发起的连接将被关闭。)
如果TCP会话连接失败,则将进入到Active状态.--尝试重新建立TCP会连接(多次失败后,将超时,回退到空闲状态,如果成功,则进入到opensent状态。)
如果TCP会话连接成功,则将直接进入到opensent状态---发送open报文来协商参数,建立对等体关系。同时,也将收到对方发来的open报文,则将查看其中的参数,如果参数没问题,则将发送keeplive报文进行确认。则将进入到openconfirm状态。---等待对方发送keeplive报文,确认本地参数。
如果,收到对方发送的keeplive报文,则代表双方open报文中的参数协商完成,则邻居关系建立成功,将进入到最终状态--- Established状态。
以下是BGP状态机变化的过程图。
BGP的工作过程
根据我们之前对BGP基础的了解,我们下面总结以下BGP的工作过程。
1.基于IGP实现P可达
2.指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。BGP之后所有的通信都将基于TCP会话通道来传输。包括提供传输的可靠性。
3.使用OPEN报文和Keeplive报文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
4.使用update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性;之后将发送以及收集到的路由信息记录在一张表中---BGP表。
5.之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
6.收敛完成后,将使用keeplive报文进行周期保活,默认的保活时间为180S,发送周期为60S。
7.如果出现错误,将使用notification报文进行告警。
8.若出现结构突变,则将使用update报进行触发更新。
BGP的路由黑洞
通过以下场景来说明该问题。
由于BGP协议可以非直连建邻,所以导致BGP协议可能出现跨越未运行BGP协议的设备,导致GP路由传递后,控制层面显示可达,但是,数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。
解决方案
1,让未运行BGP协议的设备运行BGP协议---问题,所有设备都需要运行BGP则都将承载大量的路由信息,造成设备成本增加。
2,在IGP协议中,重发布BGP协议的路由信息
3,MPLS
BGP的环路问题
BGP在解决路由环路问题是采取的方法我们也称为----水平分割
BGP的水平分割又分为两种,一种是专门针对EBGP对等体的EBGP水平分割,以及一个专门针对lBGP对等体的lBGP水平分割
EBGP水平分割
EBGP的水平分割---针对EBGP对等体之间可能出现的环路问题所提供的解决方案
所谓EBGP的水平分割,主要用于防止EBGP环境路由回传而形成环路---BGP协议在路由条目中将经过的AS号进行记录,生成一个属性---AS_PATH(记载所有经过的AS的AS号),之后,在接收到的路由条目中的AS_PATH属性中,如果存在本地的AS号,则将拒绝学习该路由信息,防止路由回传,形成环路。---AS_PATH属性也可以用于选路,其可以反应经过AS的数量。
IBGP水平分割
IBGP的水平分割---针对IBGP对等体之间可能出现的环路问题所提供的解决方案
R1传递的时候AS64512会传递过去
注意:因为EGP的AS-BY-AS的特性,要求其将一个AS看作是一个整体,所以,在默认情况下,AS内部传递的路由信息的路径属性是不会发生变化的。也就是说当BGP路由在一个AS内传递时,是无法依赖AS_Path提供的防环能力的,那么此时路由环路就有可能发生,IBGP水平分割规则就是用于解决这个问题的。
上图所示的网络中,R1与R2和R3分别建立EBGP对等体关系,而AS 64513内的三台路由器则两两建立IBGP对等体关系。现在R1将AS64512内的10.1.1.0/24路由发布到BGP。R1将这条路由通过BGP通告给自己的EBGP对等体R2,当然,我们并不担心这条路由在AS64512及AS 64513之间传递时会发生环路,因为AS_Path能够起到防环的作用。但是在AS内部的路由防环呢?当R2收到R1通告的10.1.1.0/24路由后,它将这条路由通告给自己的IBGP对等体R3及R4,R4会将该路由通告给lGP对等体R3,而R3又会将该路由通告给R2,这就极有可能引发路由环路。
所以,BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何G对等体,这就是IBGP水平分割规则。在本例中,R4 从IBGP对等体R2学习到的路由将不能再通告给R3,因为R3也是它的BGP对等体。同理,R3从R2学习到的BGP路由也不能通告给R4。
所以,BGP规定,当路由器从一个LBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何lBGP.对等体,这就是IBGP水平分割规则。在本例中,R4 从IBGP对等体R2学习到的路由将不能再通告给R3,因为R3也是它的IBGP对等体。同理,R3从R2学习到的BGP路由也不能通告给R4。
IBGP水平分割规则是一个非常重要的设计,它可以在极大程度上规避AS内BGP路由传递时可能引发的路由环路问题。然而在某些场景中,它也会带来一些新的问题。
上图展示了一个示例在这个网络中,R4增加了一个LBGP对等体R5。由于lBGP水平分割规则的限制,R4是无法将学习自lBGP对等体R2的10.1.1.0/24路由再通告给另一个IBGP对等体R5的,因此这将造成R5无法学习到去往AS64512的路由。实际上我们不可能放弃BGP水平分割规则,因为它确实非常重要,但是在许多场景下又必须解决lIBGP路由传递的问题。
解决方案:
这个问题有多种解决办法,例如可以在AS内部建立LBGP对等体关系的全互联模型。以AS 64513为例,需在该AS中所有的BGP路由器两两之间建立IBGP对等体关系。---当然,这样做会造成资源消耗增加,网络的可扩展性降低
所以,我们后面还会专门学习BGP里面的两个技术---路由反射器和联邦。都是为了解决IBGP水平分割所造成的通讯障碍的。
BGP的基本配置
BGP的基本配置可以分为对等体关系建立和发布路由两个部分来看。(因为前面说了,BGP可以实现邻居关系建立和发布路由分开实现)
BGP的对等体建立
[R1] bgp 100
[R1-bgp] peer 12.1.1.2 as-number 200
[R2] bgp 200
[R2-bgp] peer 12.1.1.1 as-number 100
或通过环回建立
[R1]ip route-static 2.2.2.0 24 12.1.1.2 //先使路由通
[R1]ip route-static 1.1.1.0 24 12.1.1.1
[R1] bgp 100
[R1-bgp] router-id 1.1.1.1
[R1-bgp] peer 2.2.2.2 as-number 200
[R1-bgp]peer 2.2.2.2 connect-interface LoopBack0
[R1-bgp]2.2.2.2 ebgp-max-hop 2 //TTL
[R2] bgp 200
[R2-bgp] router-id 2.2.2.2
[R2-bgp] peer 1.1.1.1 as-number 100
[R2-bgp]peer 1.1.1.1 connect-interface LoopBack0
[R2-bgp]1.1.1.1 ebgp-max-hop 2
BGP的路由发布
这里我们搭建如下拓扑来完成之前邻居建立和路由发布的演示。
路由发布---对于BGP而言,只要是路由表中存在的路由信息,都可以发布
通过network命令发布路由
[R1l-bgp]network 1.1.1.024----后面跟目标网络号及掩码信息
发布路由后,我们就会使用update包将路由信息传递出去,当然,也会将发布的路由信息记录在BGP路由表中。我们前面说了,BGP路由表是将所有BGP发布及收集到的路由信息记录的表。
那下来我们可以先看下R1的BGP表。---我们可以通过命令: [r1]display bgp routing-table来查看。
目前表中只存在一条路信息,因为我们R1本身就只发布了一条1.0网段的路由,其他路由器也并没有发布路由信息。
network ---目标网段及掩码信息
NextHop ---谁发送的路由信息,则下一跳就写谁;如果是自己始发的,则下一跳写0.0.0.0O---包括下一跳及后面的都是BGP设计的路径属性
状态码---路由条目最前面的符号,不同的状态码表示了该路由信息的不同状态。
*-代表可用。--所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用;如果不可达,则该路由信息将不可用----如果该路由条目不可用,则将不会参与路由信息的优选。
>--代表优选。----当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行加表及传递。
i--状态码为l,代表该路由信息是通过IBGP对等体学到的。
我们这条因为是自己发布出去的,证明这条路由本身就在我们的路由表中,所以,可用性自然是得到保证的。
而且,目前我们只有这一条1.0网段的路由信息,所以,我们肯定会让他优选的。那么这条路由就可以进行传递和加表了。
之后,我们可以看下R2的路由表,查到加表信息的路由信息如下。
1.1.1.0/24 EBGP 255 0 D 12.0.0.1 GigabitEthernet0/0/0 -—下一跳字段将直接使用下一跳属性中的地址,我们将BGP的路由信息的优先级设置为255。
当然,该路由信息在R2上也是可用且优的,则可以传递给R2的邻居---R4。(则查看R4的BGP表)
R4无法用R1所以也无法给R5
解决方法:
[R2]bgp 200
[R2-bgp]peer 4.4.4.4 Inext-hop-local //使下一跳为本地地址
如果都有bgp则r2和r4分别给r3写peer 3.3.3.3 Inext-hop-local //使下一跳为本地地址,在相互写一个
通过重发布发布路由
Network宣告的方式,是BGP协议最基本的通告路由的方法。当然,这样做也存在一定的缺点,就是当需要通告的路由量比较大的时候,使用这种方法就会十分的低效。
所以,我们还有另一种通告路由的方式,也就是批量通告的方式。那就是重发布。我们可以直接在BGP中将其他协议生成的路由重发布进来,以达到批量通告的目的。
[r2-bgp]import-route ospf 1——重发布
这里执行完成后,可以观察一下路由信息中最后一列的属性--- ogn---起源码起源码一共存在三种
I---代表这条路由信息起源于AS内部使用network通告出来的。
e ---代表来自于EGP协议。
?---除了以上两种方式,其他方式获取的路由信息都是?
BGP的路由聚合
在BGP中进行路由发布,除了以上两种以外,通过路由聚合也可以发布路由,可以算是BGP发布路由的第三种方法。----所谓路由聚合,其实就是之前接触的路由汇总,只是在BGP中换了个叫法。
BGP的聚合分为自动聚合和手工聚合,我们分别来进行讲解。
自动聚合
1.自动聚合的缺点:
(1)自动聚合功能只能针对重发布的路由条目生效
(2)自动聚合只能将明细路由直接汇总到主类。---样将会产生巨大的路由黑洞。所以,华为设备默认是关闭自动汇总功能的。
2.配置命令
[r1-bgp]summary automatic ---自动聚合的开启命令
Info: Automatic summarization is valid only for the routes imported through theimport-route command.---命令执行后会出现信息提示,说明只能针对重发布的路由条目生效。
汇总完之后,我们在BGP表中发现会多一条汇总网段的路由信息,下一跳是127.0.0.1。
R2的表,在R2上写的172.16的路由
汇总之后,也会在BGP中发布路由信息,下一跳指向本地环回地址,最终也会加表,出接口将递归到空接口。效果就是将在黑洞路由器上自动生成—条到达汇总的空接口路由用来防环。
面两个明细路由不再可用,状态码多了一个s。这个s代表的是suppressed ---抑制----被抑制的路由信息将不再加表和传递
手工聚合
因为自动聚合存在上述的两个缺点,所以,想要对路由信息进行精准的汇总,则需要使用到手工聚合。
手工聚合所使用的命令为--- aggregate
在上图中,路由器按图示的要求建立EBGP对等体关系。R3向BGP发布了172.16.1.0/24及172.16.2.0/24路由(当然,在实际的情况中R3发布的子网路由可能更多,简单起见此处只取了两个子网做代表)。R1及R2能够通过BGP学习到这两条路由。我们便可以在次场景下进行手工聚合。
1.使用aggregate命令配置路由汇总
首先在R1为172.16.1.0/24及172.16.2.0/24这两条子网路由生成汇总路由。R1的关键配置如下:
[R1]bgp 100
[R1-bgp]aggregate 172.16.0.0 16
使用aggregate命令,用户可以灵活地指定汇总路由的目的网络掩码长度,而且不受网络地址类别的限制。此处为了简单起见,我们直接将汇总路由配置为172.16.0.0/16。
完成上述配置后,如果R1的BGP路由表中存在172.16.0.0/16这个网络下的子网路由,它便会产生BGP汇总路由172.16.0.0/16,并且将这条汇总路由通告给所有的BGP对等体,包括R3及R2,如图7-34所示。这里实际上存在两个问题第一个问题是配置aggregate 172.16.0.016命令后,虽然R1的确产生了汇总路由,但是该汇总路由下的明细路由依然会被通告,也就是说R2将会学习172.16.1.0/24、172.16.2.0/24路由以及汇总路由172.16.0.0/16,因此实际上在R1上所做的路由汇总配置意义并不大,R1所通告的路由前缀数量并未减少,R2的路由表规模也并未减小。另一个问题是,R1所产生的这条汇总路由,由于丢失了明细路由的路径信息(尤其是AS_Path属性),因此它们会被通告给R3并被它接收,而且加载到路由表,这样就产生了路由环路的隐患。
(所以在哪里配置在哪里汇总)
⒉.使用aggregate detail-suppressed命令配置路由汇总
现在,我们修改R1上的配置,将aggregate命令修改为:
[R1]bgp 100
[R1-bgplaggregate 172.16.0.0 16 detail-suppressed
使用aggregate 172.16.0.016命令,R1将产生汇总路由172.16.0.0/16并且将汇总及明细路由都通告给R2,如果在这条命令中增加detail-suppressed关键字,R1将只通告汇总路由,而抑制明细路由,如上图所示。完成上述配置后,R1的BGP路由表如下:
3.使用aggregate detail-suppressed as-set命令配置路由汇总
当使用aggregate命令配置BGP路由汇总时,如果增加as-set关键字,则产生的汇总路由将会继承明细路由r的路径属性,其中AS_Path属性的继承最为关键。现在将R1的配置修改为如下:
[R1]bgp 100
[R1-bgp]aggrogate 172.16.0.0 16 deuail-suppressed as-set
未加as-set
加了
完成上述配置后,B1将抑制明细路由172.16.1.0/24及172.16.2.0/24,只通告汇总路由172.16.0.0/16(这得益于detail-suppresse关键字),而且由于命令中使用了as-set关键字,因此该条汇总路由将继承172.16.1.0/24及172.16.10.0/24这两条明细路由的路径属性。我们重点关注AS_Path属性的继承。首先查看一下B2的BGP路由表:
4.在aggregate命令中使用suppress-policy关键字
在使用aggregate命令配置路由汇总时,还可以搭配suppress-policy关键字,这个关键字用于通告汇总路由以及被选定的明细路由(换句话说,就是有选择性地抑制明细路由)。以上图为例,如果要求R1将汇总路由172.16.0.0/16以及除了172.16.1.0/24之外的其他明细路由都通告给R2,使用suppress-policy便可以轻松实现这个需求,R1的配置如下:
在上述配置中,我们首先定义了一个名称为no-subnet-1的I2前缀列表,并使用这个I2前缀列表允许了路由172.16.1.0/24。接着创建了一个名称为hcnp1的 Route-Policy,并在这个Route-Policy的节点10中调用已经定义好的I前缀列表no-subnet-1。最后,在BGP的配置视图下,使用aggregate 172.16.0.016 suppress-policy hcnp1命令通告汇总路由172.16.0.0/16以及被选定的明细路由(抑制172.16.1.0/24路由,放行其他明细路由)
BGP的路由反射器及联邦
路由反射器和联邦是两种专门针对lBGP水平分割设计的解决方案,我们依次来看下这两种技术。路由反射器
路由反射器的角色
1.引入路由反射器之后存在两种角色:
(1)RR的(Route Reflector) :路由反射器
(2)Client:RR客户端RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联。
2.将一台BGP路由器指定为RR的同时,还需要指定其Client。至于Client本身,无需做任何配置,它并不知晓网络中存在RR。
路由反射规则
RR在接收BGP路由时:
1.如果路由反射器从自己的非客户对等体学习到一条IBGP路由,则它会将该路由反射给所有客户
2.如果路由反射器从自己的客户学习到一条lBGP路由,则它会将该路由反射给所有非客户,以及除了该客户之外的其他所有客户
3.如果路由学习自EBGP对等体,则发送给所有客户、非客户IBGP对等体。
注意此处"反射"和"发送"的区别。"发送"指的是传统情况下(相当于RR不存在的场景下)的BGP路由传递行为,而"反射"指的是遵循路由反射规则的情况下,RR执行的路由传递动作,被反射出去的路由会被RR插入特殊的路径属性。
路由反射场景下的防环
1.RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
(1)originator_ID
(2)Cluster List
originator_ID
1.RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP.路由器Router ID。
2.若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR(若有)所更改。
3.当BGP路由器收到一条携带originator_ID属性的BGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新。
Cluster List
1.路由反射簇包括反射器RR及其Client。一个AS内允许存在多个路由反射簇(如上图)。
2.每一个簇都有唯一的簇ID (Cluster_ID,缺省时为RR的BGP. Router ID ) 。
3.当一条路由被反射器反射后,该RR(该簇)的Cluster_ID就会被添加至路由的Cluster_list属性中。
4.当RR收到—条携带Cluster_list属性的BGP路由,且该属性值中包含该簇的Cluster_ID时,RRi为该条路由存
在环路,因此将忽略关于该条路由的更新。
反射器应用
R1向BGP发布了10.0.1.0/24路由,R2会从R1学习到该路由并且将其通告给R3,但是R3从R2学习到的这条IBGP路由由于水平分割规则的存在故而不能够再被通告给R4及R5,为此可以将R设置为RR,R4,R5作为其客户端,这样R4、R5即可正常学习到BGP路由10.0.1.0/24。
配置方法
配置路由反射器及其客户端
[R3-bgp]peer 2.2.2.2 reflect-client //让R2为客户端,R3为反射器
联邦
在一个AS内部署全互联的IBGP对等体关系确实可以很好地解决IBGP路由传递的问题,但这是一个低扩展性的做法,在大型的网络中会给设备带来沉重的负担。在前面的章节中大家已经掌握了使用路由反射器解决这个问题的万法,接下来我们将为人豕研解另一个解决方案,它就是联邦。
联邦(Confederation)也被称为联盟,大致的思想定在一个大的AS内创建若干个小的AS(类似子AS的概念),使得AS内部出现一种特殊的EBGP对等体关系,从而解决IBGP路由在AS内的传递问题。
在上图中,AS 3456内并没有实现IBGP对等体全互联,这将导致该AS内的路由传递出现问题,这里可以随便举几个例子:
1.R3会将自己从R1学习到的BGP路由通告给R4,但是后者不能将该路由通告给R5,因此R2、R5及R6都无法学习到该路由。
2.R3发布的BGP路由会被其通告给R1及R4,但是R4不能将该路由通告给R5,因此R2、R5及R6都无法学习到该路由。
3.R4发布的BGP路由会被其通告给R3及R5,但是R5不能将该路由通告给R6,因此R6无法学习到该路由。
利用BGP联邦即可解决上述问题。如下图所示,我们在AS 3456内创建了两个"小AS"——AS64512及AS64513,这就有点像一个大的城市被划分成了两个行政区。
也就是说,联邦的AS之间仅遵守EBGP之间路由的传递原则,但不能像EBGP邻居之间一样修改路由属性。是一种特有的存在。
那这样也算是打破了IBGP的水平分割,该如何防环呢?这样其实就可以使用EBGP水平分割的那一套了,也可以将联邦的AS号加入到AS_PATH中,只不过,联邦的AS号回用括号括起来,来做区分。
联邦配置
[R2]bfp 64512 --启动小号
[R2-bgp]router-id 1.1.1.1
[R2-bgp]confederation id 200 ---声明自己的大号
[R2-bgp]peer 1.1.1.1 as-number 100
[R2-bgp]peer 1.1.1.1 connect-interface LoopBack0
[R2-bgp]peer 1.1.1.1 ebgp-max-hop 2 ----这几个还是正常处理
[R2]bfp 64512 --启动小号
[R2-bgp]router-id 2.2.2.2
[R2-bgp]confederation id 200 ---声明自己的大号
[R2-bgp]peer 3.3.3.3 as-number 64512 ----声明R3的小AS
[R2-bgp]peer 3.3.3.3 connect-interface LoopBack0
[R2-bgp]peer 3.3.3.3 ebgp-max-hop 2 ----这几个还是正常处理
[R3]bgp 64512
[R3-bgp]route-id 3.3.3.3
[R3-bgp]peer 2.2.2.2 as-number 64512 ----声明R2的小AS
[R3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[R3-bgp]confederation per-as 64513 --一定要先指定自己联邦成员的AS号,这个在R3和RA上需要成员AS建邻的路由器上声明就可以了
[R3-bgp]peer 4.4.4.4 as 64513
[R3-bgp]peer 4.4.4.4 connect-interface LoopBack0
[R3-bgp]peer 4.4.4.4 ebgp-max-hop 2----使用环回建立EBGP邻居时需要修改,包括联邦内的EBGP.
1) 所有配置全部基于小as号进行[r3]bgp 64512[r3-bgp]router-id 3.3.3.3[r3-bgp]peer 2.2.2.2 as-number 64512[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0[r3-bgp]peer 4.4.4.4 as-number 64513[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0[r3-bgp]peer 4.4.4.4 ebgp-max-hop 22)联邦内所有运行BGP协议的设备均声明自己所在的大AS号[r2]bgp 64512[r2-bgp]confederation id 23)小AS间互指peer;在联邦内的ebgp邻居关系间的两台设备,互相定义对端的小AS号;[r4-bgp]confederation peer-as 64512切记:华为设备,必须先定义联邦的id,和互相小AS号后再配置邻居关系建立的命令;在实际的工程案例中,联邦和反射器是同时被使用,降低配置量;