NP笔记——10 BGP反射与联盟和多归属

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/x503809622/article/details/82629843

为了实现路由信息的交互,BGP要求一个AS内的所有BGP Speaker相互形成IBGP对等体全互连,而这一要求使得IBGP的扩展成为了一个很大的问题。BGP反射器以及BGP联盟则是为了解决该问题而提出的BGP扩展技术。

 

BGP反射和联盟的简介:

         BGP的防环方式:

                   EBGP:

通过AS-Path属性,丢弃从EBGP对等体接收到的在AS-Path属性里包含自身AS号的任何更新信息

IBGP

BGP路由器不会将任何从IBGP对等体接收到的更新信息传给其它IBGP对等体

IBGP防止环路机制带来的问题

为保证更新信息可以到达所有IBGP对等体

解决方案:

IBGP Speaker与IBGP Speaker之间要保证会话的全互连

从而又带来IBGP会话数n(n-1)/2的问题

增加的路由的负担;解决新方案,路由反射(RFC2796),联盟(RFC3065)

 

路由反射(RFC2796)

         降低对指定路由器IBGP路由通过机制限制,允许将从IBGP对等体接收到的更新信息传给某些IBGP对等体

        

联盟(RFC3065)

         将大的AS分成若干个小的AS,而小的AS之间建立EBGP对等体关系

 

路由反射器中的不同角色的对等体:

我们使用路由反射来描述一个BGP Speaker通告一条IBGP路由到另外一个IBGP对等体的操作。而这样的一个BGP Speaker通常被称为路由反射器(Route Reflector, RR),这样的一条IBGP路由被称为反射路由。

IBGP对等体可以有三种角色:

路由反射器 (Route Reflector)

客户机 (Client)

非客户机 (Non-Client)

路由反射器和它的客户机组成一个集群(Cluster)。路由反射器在客户机之间传递(反射)路由信息,所以客户机之间不需要建立BGP连接。

既不是反射器也不是客户机的BGP路由器被称为非客户机(Non-Client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。

反射器(RR)的内部对等体被分为两组:

      1) 客户对等体 (Client peers)

      2) 非客户对等体 (Non-Client peers)

一个RR负责在客户对等体组之间反射这些组的路由信息。一个RR和它的客户对等体形成一个单独的簇(簇的概念在后面)。非客户对等体组之间必须IBGP全连接,而客户对等体组之间不需要建立IBGP全连接,只需要维护与RR之间的IBGP会话就足够了。

对等体之间的关系:

         Client只需维护与RR之间的IBGP会话

RR与RR之间需要建立IBGP的全互连

Non-Client与Non-Client之间需要建立IBGP全互连

RR与Non-Client之间需要建立IBGP全互连

 

路由反射宣告的原则:

当RR收到BGP对等体发来的路由,首先使用BGP选路策略来选择最佳路由。RR在发布学习到的路由信息时,RR按照RFC2796中的规则发布路由。

从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机。

从客户机学到的路由,发布给此RR的所有非客户机和客户机(发起此路由的客户机除外)。        

从EBGP对等体学到的路由,发布给所有的非客户机和客户机。

        

让R2——R4——R3,让R4作为RR

命令:

         AR2宣告一个IP,netw x.x.x.x MASK

         R4:

         bgp ID

         peer 33.1.1.1 reflect-client(该命令敲完之后,R4就称为了RR,R2就是client)

         peer 22.1.1.1 reflect-client (R3成为客户端)

         查看方式:display bgp peer 33.1.1.1 verbose

 

路由反射簇(Cluster):

         当一个AS内存在多台RR为Client提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念。

左边的4台路由器为一个簇,右边的三台路由器为一个簇,防止出现环路

簇的意义:

         通过4字节的Cluster_ID来标识Cluster,通常会使用Loopback地址作为Cluster_ID(RR)

         一个cluster里可以包括一个或者多个RR,一个client可以同时属于多个cluster

         通常,一个客户的簇只拥有一个RR,并由RR的BGP Router-id去标识该簇。有时,为了防止单点失效,在单一簇里引入多个RR

 

路由反射环路防止机制——originator_ID

         当一个路由被反射的时候,可能会由于错误的配置形成路由环路。因此路由反射定义了以下的方法去检测和防止路由信息环路的产生:

Originator_ID属性用于防止路由在反射器和客户机/非客户机之间产生环路。

Originator_ID属性长4字节,可选非过渡属性,属性类型为9 ,是由路由反射器(RR)产生的,携带了本地AS内部路由发起者的Router ID。

当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID。(打上的标记是产生该路由的路由器ID)

当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理。

         可以display route-table x.x.x.x查看

 

路由反射环路防环机制——cluster_list

         对于AS之间,BGP用于防止环路的主要措施是通过AS_Path属性记录途经的AS路径,带有本地AS号的路由将被路由器丢弃;对于AS之内,BGP防止路由环路的方法是禁止IBGP对等体发布从AS内部学来的路由。

路由反射器的实现是基于放宽对“BGP在AS内学到的路由不会在AS中转发”的要求,即允许IBGP对等体之间发布从AS内部学来的路由。在这种情况下,Cluster_List属性被引入,用于防止AS内部的环路。

Cluster_List是可选非过渡属性,属性类型编码为10。

Cluster_List由一系列的Cluster_ID组成,描述了一条路由所经过的反射器路径,这和描述路由经过的As路径的AS_Path属性有相似之处。Cluster_List由路由反射器产生。

当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个。

当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由。

Cluster_List只被RR用来检测路由环路,不是RR的客户机和非客户机不会检测该属性。

Cluster_List只在AS内部传播,从EBGP对等体收到的含有Cluster_List的路由将被丢弃。

 

试验:

         R3——R4

         4是3的client。3也是4的client

                   bgp ID

                   peer x.x.x.x reflect-client

                   配置cluster ID

                   ipv4-family unicast(可以不用敲)

                   reflector cluster-id x.x.x.x

                   (两个路由器都需要配置)

                   同一个簇的需要配置相同的ID

AS内多个簇

一个AS中可能存在多个簇(Cluster)。各个RR之间是IBGP对等体的关系,一个RR可以把另一个RR配置成自己的客户机或非客户机。因此可以灵活的配置AS内部簇与簇之间的关系。

一个AS内被分成多个反射簇,每个RR将其它的RR配置成非客户机,各RR之间建立全连接。每个客户机只与所在簇的RR建立IBGP连接。这样该自治系统内的所有BGP路由器都会收到反射路由信息。

 

层次化路由反射:

         路由反射减少了域中IBGP会话的总数。然而,因为RR相互之间必须全互连,在大型网络中,存在一种可能性,即RR之间仍然需要大量的IBGP会话。为了进一步减少会话数量,引入层次化的路由反射。

层次化路由反射的层数可以按照需要逐步加深,但通常在现网中两层或三层已经足够了

 

BGP联盟:

         联盟通过把大的AS分成多个更小的AS来解决IBGP全互连的问题,这些自治系统叫做成员AS。因为成员AS之间使用EBGP会话,它们之间不需要全互连。然而在每一个成员AS中,IBGP全互连的要求仍然适用。

联盟中的EBGP会话和常规的EBGP会话有所不同。为了区分它们,这种类型的EBGP会话叫做联盟内的EBGP会话。与普通EBGP会话区别就发生在当通过会话传播路由的时候,联盟内的EBGP会话在一方面遵循路由通告的部分IBGP规则,在另一方面又遵循路由通告的部分EBGP规则。如:在发送更新的时候,NEXP_HOP、MED和LOCAL_PREF被保留,而AS-PATH被修改。

对于外部邻居来说(联盟外的的对等体),成员AS拓扑是不可见的。也就是说,在发向EBGP邻居的更新消息中,已经剥去了联盟内被修改的AS_PATH。从其他的自治系统来看,联盟就像单个AS一样。

每个成员AS中,IBGP全连接是需要的。路由反射也可以被部署。部署联盟的一个明显优势就是其成员AS不需要使用相同的IGP。每个成员AS不需要向其他成员AS通告自己的内部拓扑。不过,当使用不同的IGP时,每一个成员AS内必须保证BGP下一跳的可达性。

 

当前,AS_PATH属性被定义为公认必遵属性,该属性由AS号所组成。AS_PATH属性字段由三元组所组成:

Path Segment Type, Path Segment Length, Path Segment Value

在BGPv4里,path segment type字段是由1字节长的数值所组成,主要是标识AS_PATH的不同类型:

   Value     Segment Type

      1       AS_SET: 由一系列AS号无序地组成,包含在UPDATE消息里。

      2       AS_SEQUENCE: 由一系列AS号顺序地组成,包含在UPDATE消息里。

      3       AS_CONFED_SEQUENCE: 在本地联盟内由一系列成员AS号按顺序地组成,包含在UPDATE消息中,只能在本地联盟内传递。

      4       AS_CONFED_SET: 在本地联盟内由一系列成员AS无序地组成,包含在UPDATE消息中,同样只能在本地联盟内传递。        

 

联盟内采用AS-CONFED来防止子AS间的路由环路。

联盟内的AS-PATH属性变化:

联盟内的EBGP会话

子AS号被添加到AS-PATH中的AS-CONFED-SEQUENCE前面

联盟内的IBGP会话

不修改AS-PATH

外部BGP会话

子AS号从AS-PATH中清除,而大AS号被添加到AS-PATH前面

当一个BGP Speaker通告一条来自其它BGP Speaker的路由时,是否需要修改或者怎样修改AS_PATH属性值,根据对端BGP Speaker的位置所决定:

当BGP Speaker和要通告路由去的另外一台BGP Speaker属于同一个AS的时候,通告路由器不需修改AS_PATH。

当BGP Speaker和要通告路由去的另外一台BGP Speaker属于本地联盟内的邻居成员AS的时候,通告路由器需要根据以下情况对AS_PATH进行修改:

如果该AS_PATH的类型为AS_CONFED_SEQUENCE,则列前(把AS号放到AS_PATH列表最左的地方)本地AS到该AS_PATH里。

如果该AS_PATH的类型不是AS_CONFED_SEQUENCE,则列前本地AS号到新的AS_CONFED_SEQUENCE列表里,并保留原有AS_PATH里的AS号

当BGP Speaker通告路由到另外一台远端BGP Speaker时,并且该远端BGP Speaker属于联盟外的AS时,通告路由器应该按以下条件更新AS_PATH属性:

如果发现AS_PATH属性里存在AS_CONFED_SEQUENCE或AS_CONFED_SET时,从AS_PATH属性里删除AS_CONFED_SEQUENCE和AS_CONFED_SET并执行第2步或第3步

如果AS_PATH属性里只存在AS_SEQUENCE时,本地系统会加上自身的联盟ID到AS_SEQUENCE里,并作为最后一个经过的AS(放到AS_SEQUENCE里的最左位置)

如果删除AS_CONFED_SET/AS_CONFED_SEQUENCE后并没有什么AS_PATH信息,或如果AS_PATH里只存在AS_SET时,更新时应该新添加AS_SEQUENCE到AS_PATH,并加上自己的联盟ID号(本地AS号)

命令配置:

         AR2——AR4——AR3

部署联盟的时候需要干掉原有的BGP配置

         undo bgp ID

2和4之间:

2:

         bgp 65534

         peer 44.1.1.1 as-number 65534

         peer 44.1.1.1 connect-interface loopback 0

4:

         bgp 65534

         peer 22.1.1.1 as-number 65534

         peer 22.1.1.1 connect-interface loopback 0

4和3之间建立EBGP连接:

4:

         peer 33.1.1.1 as-number 65535

         peer 33.1.1.1 connect-interface loopback 0

         peer 33.1.1.1 ebgp-max-hop

3:

bgp 65535

peer 44.1.1.1 as-number 65534

peer 44.1.1.1 connect-interface loopback 0

                   peer 44.1.1.1 ebgp-max-hop

         让234作为一个联盟,所以在每个路由器上都要标识联盟的AS号

         2、3、4:

                   bgp

                   confederation id 200

         3和4之间是EBGP连接,所以要指定联盟peer邻居的的AS号

         3、4:

                   bgp ID

                   undo peer 44.1.1.1 as-number 65534(需要先undo掉,不然会报错)

                   confederation peer-as 65534

                   peer 44.1.1.1 as-number 65534

                   peer 44.1.1.1 connect-interface loopback 0

                   peer 44.1.1.1 ebgp-max-hop

         4的配置与3的相同

         传递的路由在联盟之内会带上小括号

         联盟内的传递的路由信息的规则与IBGP中传递的路由规则相同,即使是联盟内的EBGP路由的传递

 

 

多归属的定义:

         多于一条外部路径到达本地网络,比如:

多路径连接到相同的ISP网络

多路径连接到不同的ISP网络

通常会使用两台或两台以上的路由器连接外部网络

提供有效的冗余确保可靠的服务

实现路由选择和负载分担

         只要网络有多于一条路径到达外部,那么它就是多归属的,比如网络通过多条路径到达单个ISP或者多条路径到达不同的ISP。

使用多归属的目的是为了通过冗余链路提供可靠性或实现负载分担。

负载分担即允许路由器将入流量以及出流量分配到多条路径上。多路径可以通过静态路由协议或者动态路由协议进行学习,比如:RIP,OSPF等。

BGP在默认的情况下,只允许使用最佳路径并且不支持负载分担。

 

BGP多归属可以分为以下几种类型:

单归属末端网络

多归属末端网络

单台边界路由器

多台边界路由器

多归属到不同ISP网络

单台边界路由器

多台边界路由器

 

单归属末端网络:

         单归属末端网络指的是两个AS各通过一台边界路由器互连,两路由器之间可以通过多条链路实现冗余。当前VRP能支持的最大等值路径数为6条。

单归属网络的冗余性不高,适合用在小型的网络里。

可以使用静态路由或者缺省路由代替BGP

 

多归属末端网络:

一、

         多归属末端网络的冗余强度就在于单条上行链路失效或者单台ISP路由器失效都不会影响网络正常运行。

(AS内一台边界路由器,连接ISP网络内的两个AS边界路由器)

         可以使用静态/缺省或者BGP实现负载分担

         可以使用私有的AS号

在部署这一设计方案时,应该使用BGP来为可能的负载分担提供额外的控制。单个上游提供商的情况使得企业能够使用私有AS号。这意味着企业不需要从注册机构那儿获得唯一公用的、且能被外界看到的AS号。上游提供商可以从接收到的更新信息中清除私有AS号。

在这种设计中使用BGP使企业能够很大程度地影响入流量并更好地控制出流量。在链路带宽不相等的情况下,这特别有用,因为可以使用路由选择策略根据链路带宽来按比例地分担流量。

 

  •  

多台边界路由器

更好地控制出流量,能够根据按链路带宽按比例地分担流量

边界路由器与边界路由器之间必须运行IBGP会话及核心IGP会话

                   (一个AS区域内的两台区域边界路由器分别连接ISP区域的两台边界路由器,同时这两台路由器建立IBGP邻居)

使用单台企业边界路由器可能会产生单点故障。再增加一台或多台边界路由器就消除了最后的故障单点。这种设计要求企业网络中有多台边界路由器,每一台路由器有连接到上游提供商的一条或多条连接。在该设计中,仍然使用单个上游提供商。

在这种设计中,企业仍然可以使用私有AS号。使用私有AS号的主要好处在于企业不需要再花费额外开销去获得一个新的公有AS号。运行BGP的目的在于它能够为企业定义出入境路由选择策略时提供额外的支持。除了需要与上游提供商建立EBGP会话外,企业还应该在边界路由器之间和涉及到有可能为边界路由器提供穿越服务的所有第3层设备之间建立IBGP全连接会话。这一要求保证了流量不会被发送到没有去往目的地址的路由选择信息的设备上。

为了防止在边界路由器的上行链路失效的情况下,IGP流量沿着缺省路由流到边界路由器上,边界路由器应该在链路建立并激活的条件下发布缺省路由。这种条件性通告可以基于指向上行接口的静态缺省路由来完成,或者基于从BGP接收到的缺省路由。如果从上游提供商接收到其他路由信息,不要将这些信息引入到边界路由器上运行的IGP进程中,以免引起路由震荡。

 

BGP多归属到不同的ISP网络

         AS区域内的一个区域边界路由器连接;两个不同AS区域的边界路由器

在这种设计下,企业边界路由器和它们的上游提供商之间建立了EBGP对等体关系。所有的边界路由器之间IBGP全连接会话。接收到的路由信息量可能只有缺省路由,也可能有完整的路由表。

最常见的负载分担机制只涉及到使用部分的路由选择信息。这可能意味着企业将从上游提供商请求部分路由选择信息并和缺省路由一起使用,或者请求完整的路由表并修改过滤策略,从而获得合理的负载分担。最后使用的方法依赖于企业的实际情况。最简单的方法就是把一条链路用作主用链路,而把其他链路纯粹用作备用链路。最难的就是在多条链路上实现合理的负载分担。

 

多归属的负载分担:

         单归属的负载分担:

一、(等值路由的负载分担)

         两台路由器之间使用单个EBGP会话, 这个EBGP会话利用Loopback接口作为更新源,代替物理接口。对每一个物理直连接口都配置了一条指向远端Loopback地址的静态路由或者通过IGP来建立其与远端Loopback地址的TCP会话。这种方法解析了下一跳地址,并通过到下一跳的迭代路由来形成负载分担。

必须注意的是需要手动更改EBGP的TTL值大于等于2,否则BGP会话将不能建立。

         二、命令指定

         自治系统间的每条链路都建立EBGP会话。

由于BGP缺省不支持负载分担,所以通信双方都需要通过命令maximum load-balancing设置最大等价路径的条数。EBGP多路径允许路由器配置的最大路径数为8条

多归属到相同的ISP——主备方案

         主备链路方案:(AS内的两台边界路由器分别连接ISP的两台路由器)

                  都通告聚合网络

                   主备链路都正常通过路由

                   备用链路在outbound方向加大cost(MED)值,在inbound方向减小local-preference

         但是该AS区域发送给ISP后,ISP在转发该路由给其他AS时会删除该AS私有的AS号,

 

多归属到相同ISP——负载分担方案

         入方向负载分担:(AS内的两台边界路由器分别连接ISP的两台路由器)

                   将一条聚合路由分为两条或多条(例如24的路由向后延伸1位变为两条25的路由)

                   将分割后的路由在每个路由器的链路上通告一条

                   可以通过在分割实现等值的负载分担

                  同时每台路由器通告原有聚合的路由

         出向流量的负载分担:

                   使用缺省路由

                   接收上游的路由信息

                            通过“最近的出口”实现基于出流量的负载分担

ISP的边界路由器只接收下游的路由信息,ISP删除AS 里的子网信息,ISP向外通告路由时需要删除私有AS号

 

多归属到不同的ISP

         一个AS的边界路由器连接多个不同的AS边界路由器,经过不同的AS到达ISP

         需要使用公共的AS号

                  在其他的AS允许的情况下可以使用私有的AS号

多归属到不同的ISP——主备方案

         主备链路方案:

                   两链路上都通告聚合后的路由

                            主用链路采用标准路由通过

                            备用链路延长AS-PATH长度通过路由

                  当一条链路失效,通过另一条链路保证连接

多归属道不同ISP——负载分担方案

         负载分担方案

两链路上都正常通告/24聚合路由

同时把/24聚合路由细分为两/25路由,每链路通告一条

实现入流量的负载分担

修改通告路由的AS_PATH长度

当一链路失效时,通过另一条链路保证连接

 

 

猜你喜欢

转载自blog.csdn.net/x503809622/article/details/82629843