【原创】BGP中有关路由注意事项

发布时间 2023-09-19 10:31:53作者: 艳花三月下春秋

                                                                                                                      BGP中有关路由注意事项

1、对于BGP中的路由宣告,必须要和本地路由条目中的路由保持一致么?

答:不是,只需要保证本地路由条目中的路由是宣告路由中的子网即可。比如,我们在写静态路由时ip route x.x.x.x 255.255.255.255 next-hop y.y.y.y,但是我们在进行router bgp AS之下,进行network时,可以network x.x.x.0 mask 255.255.255.0,这样的方式同样可以将要宣告的路由宣告进BGP中。

 

2、对于EBGP邻居关系的路由器学习到的EBGP路由能否被它的IBGP邻居关系的路由器学习到?

答:不可以,因为对于EBGP邻居关系的路由器来说,当它对其另一个EBGP的邻居发送路由更新时,它会自动将更新路由的下一跳变为自己,即是变成其EBGP邻居关系路由器的下一跳;而对IBGP来说,它仍然保持不变,所以对其IBGP邻居来说,它只能产生IBGP路由,但是不是最优路由,从而不能进入到路由表中(show ip route),要想解决这个问题,就必须要在其IBGP的邻居建立过程中需要配置下一跳自我,即neighbor x.x.x.x next-hop-self,这样才可以形成完整的路由。

 

3、对于从IBGP邻居关系的路由器宣告出来的IGP路由能否被EBGP关系的路由器学到?

答:不可以,如果非要学到可以进行路由重分布。

 

4、简述IBGP路由的特点。

答:这里所说的IBGP路由,指的是从EBGP邻居学习到的路由,然后被该EBGP路由器的IBGP邻居学习到的路由。它具有下一跳不变,即是该EBGP路由被IBGP路由器学习到后,它的路由下一跳仍然是EBGP路由的下一跳(下一跳不变原则),要想解决这个问题,此时它需要配置next-hop-self,将下一跳指向该IBGP邻居的EBGP路由器的neighbor地址;另外一个特点就是从EBGP学习到的路由,只能传给其IBGP邻居的就近一跳,也就是所谓的只传一跳原则,因为这是BGP路由的防环特性决定的。

 

5、如何打破BGP只传一跳原则?(如何打破BGP防环机制形成的数据黑洞?)

答:有几种方式可以打破这一BGP固有属性。具体有IBGP全互联(Full-mesh)RR(路由反射器)、RC(联邦)、MPLS(多协议标签交换)等技术可以完美解决这一数据黑洞!相关思路及配置如下:

MPLS(多协议标签交换):由于存在数据黑洞,导致数据在AS内部被丢包,而内部的路由器没有运行IBGP协议,所以无法传递从BGP远端学到的该路由,既然没有相关的BGP配置,那引入该MPLS协议,通过标签转发

逻辑拓扑如右R1(运行BGP/IGP协议)----R2(运行IGP协议)-----R3(运行IGP协议)----R4(运行BGP/IGP协议)

R1上配置如下:

R1#configuration

R1(configuration)#ip cef(运行MPLS协议必须要开启该ip cef功能,默认是开启的),对于思科设备来说真正的转发是依赖show ip cef表来进行路由转发的

R1连接R2的出接口上配置mpls ip回车即可

 

同理在R2、R3两端互联的接口上配置mpls ip,在R4连接R3的互联端口配置mpls ip

Mpls默认使用的是ldp邻居协议,旧版本使用的是tdp协议,若改变默认的邻居协议,可以在configuraton模式下配置mpls lab protocol ldp/tdp,另外我们配置每台路由器的ldp协议的router-id,即mpls ldp router-id loopback 0(这里一般都是用环回口作为路由器的身份标识)查看相关的邻居命令如下:

Show mpls ldp neighbor  or show tag-switching tdp neighbor

Mpls路由的标签分发表项show mpls ldp bindings 形成了mpls转发表项show mpls forwarding-table

 

C(联邦):打破IBGP只传一跳原则,用联邦也可以完美解决,逻辑拓扑如下

R0(运行BGP协议)---R1(运行BGP/IGP协议)----R2(运行IGP协议)-----R3(运行IGP协议)----R4(运行BGP/IGP协议)---R5(运行BGP协议)

配置思路即是将R1与R2配置一个小AS,将R3与R4配置成另一个AS,这二个AS从属于R1、R2、R3和R4整体大AS的内部次AS组成小AS之间的联邦。

R1上常规配置与R0的BGP邻居后,还要加一条配置bgp confederation identifier 大AS号(若R2和R3配置该条命令和不配置该条命令会对学习到的路由属性会有些区别,但路由的学习还是没问题),这是为了告诉R2,它们是既属于大AS内部的共同小AS,同理R3和R4也一样,但是由于R2和R3的特殊性,它们是大AS内部小AS之间的IBGP邻居关系, 所以还要配置一条bgp confederaton peers 对方的小AS号(指明大AS内部BGP联邦对等体,如果有多数量peers,则直接在后面依次添加即可,形成bgp confedaraton peers x y z等),大AS内部小AS之间的BGP邻居关系我们认为是一种特殊的BGP邻居关系。联邦AS在建立BGP邻居的时候是按照EBGP的邻居来建立的,但是在传递路由和属性则是按照IBGP的特点去传递的。

 

RR(路由反射器):route-reflector做路由反射器为了防止路由黑洞,所有AS间和AS内部的路由器配置EBGP邻居和IBGP邻居的基础性配置基本是一致的。它的整体思路是区分邻居形态,然后制定形态规则,打破只传一跳原则!制定RR时,它会把BGP的路由器区分为客户和非客户(IBGP的对等体)、EBGP peers(EBGP对等体),在客户和非客户的区分中对路由传递的对象有一个要求:就是客户可以把路由传递给客户、非客户、EBGP对等体;非客户把路由传递给客户、EBGP对等体;EBGP把路由传递给客户、非客户、EBGP对等体。记住:非空非不传!RR(路由反射器)它只是定义路由的可传对象!指定则为client(客户),不指定即为非客户!这种对别的路由器进行定义的身份只有本地有意义,再次申明:RR是指定义别人的身份!!!RR在实际应用中灵活性太强,所以很多时候只要是IBGP邻居,则统统相互配置成客户Route-reflector!!!(万精友式转发),在实际大的省际网络中,一般都有两个大的RR,用于路由的传递。

逻辑拓扑如下

R0(运行BGP协议)---R1(运行IBGP)----R2(运行IBGP协议)-----R3(运行IBGP协议)----R4(运行BGP协议)

配置思路就是:对于RR反射器,BGP路由的传递遵循指定的客户和非客户,而且对于明细路由在属性上有区别!当一条路由通过带有RR技术的设备发出去的,和一个普通的BGP的路由器发出去的,带RR技术的路由器会引入路由器的两条属性,一条是originator(起源:引入某条路由的路由器),一条是cluster list(簇列表:配置RR技术的路由器)。

这二条属性的重要作用就是取代BGP只传一跳原则,并且用于防环!Originator用于防止多角成环,而cluster list主要用于防止三角成环。

 

Cluster list里面并不是RR设备的环回接口或router-id的IP地址,而是是在router bgp X之下面的bgp cluster-id X中的X。默认cluster-id等于RR设备的router-id。如果出现cluster-id一致的RR,则路由是学不到的,但BGP邻居是正常建立,它以为该路由曾经经过了自己,所以当看到带有相同的cluster-id的属性路由过来时,它会拒收,直接丢弃!!!

 

在路由反射器的实施中,如果一个RR需要将路由传递给多个peers,我们可以用一种简便集中的方式进行配置管理,以减少命令行,减少占用buffer。对相同的出站策略对等体进行定义,所有对等体组成员共同维护同一个出站策略,但可以有多个不同的入站策略。相关命令配置方式如下:

 

neighbor long peer-group

neighbor xxxx peer-group long

neighbor yyyy peer-group long

neighbor zzzz peer-group long

neighbor long remote-as AS号

neighbor long route-map XXX out

 

具体查看对等体组peer-group的命令

Show ip bgp peer-group

 

我们正常的配置方式如下:

neighbor xxxx remote-as A

neighbor xxxx update-source loopback0

neighbor xxxx route-reflector-client

 

这里面把这些类似的配置以一种对等体组的方式进行配置:

neighbor long peer-group

neighbor long remote-as A(这个配置要在neighbor XXXX/yyyy/zzzz配置之前,否则后面的配置配置不上去)

 

neighbor long update-source loopback0

neighbor long route-reflector-client

 

Neighbor xxxx peer-group long

Neighbor yyyy peer-group long

Neighbor zzzz peer-group long

上述使用对等体组的方式在运营商级别需要大量的设备进行数据转发,而RR设备作为中间设备进行路由的传递才会用到这种RR的对等体组的方式。

 

 

6、IGP路由能否凭空宣告一条不存在路由条目或学习到的路由么?

答:对于IGP(Ospf、Rip、Eigrp或IS-IS)路由如果随便network一条凭空的路由条目或学习到的路由是无效的,它只能宣告直连路由或以出接口形式的静态路由,但是对于运行BGP路由协议的路由器来说,这种network(直连、出接口静态路由或学习到的路由)方式是可以的。

(注意:在BGP中internal和local的管理距离均为200,是为了防止本地路由被flapping,即是不希望本地BGP路由替代了或冲掉了IGP的路由)

 

7、BGP中network的路由条目必须要和路由中的保持一致么?

答:不一定,只是对于是否关闭auto-summary有不同的路由学习方式(这里不再赘述,下一篇文章中我会对是否关闭auto-summary和synchonization作一个简单的说明)