实验一 电子商务网站建设与维护,网站开发培训网站,wordpress引导页插件,小制作小发明视频教程目录
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在企业中的应用
距离矢量型协议和路径矢量型协议的区别
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.可靠性
1BGP因为只有触发更新而不存再周期更新(因为更新路由数量过大)。所以需要确保可靠性。
2BGP使用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对等体之间的连接关系
需要比对协商的参数如下:
1AS号---BGP的open报文会携带本地的AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS。另外如果对方的AS号和本地建邻时写的AS号不同则将导致邻居关系无法建立。
2RID---在这里可以被称为BGPldentifier (BGP标识符)和OSPE中的RID相同也是由32位二进制构成按照P地址的格式来写。这个值在数据包中也会携带将对比两边该值是否相同相同则表示存在冲突将导致建邻失败。
3BGP也可以进行认证认证口令不同则也将导致建邻失败
4open报文中还会携带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协议的路由信息
3MPLS 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及R4R4会将该路由通告给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.引入路由反射器之后存在两种角色:
1RR的(Route Reflector) :路由反射器
2Client: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路由添加两个特殊的路径属性来避免出现环路:
1originator_ID
2Cluster 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设置为RRR4R5作为其客户端这样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号后再配置邻居关系建立的命令在实际的工程案例中联邦和反射器是同时被使用降低配置量