2.5 管理大规模BGP对等应用
前一节已经指出,当AS规模变得较为巨大时,试图建立全连接的IBGP将变得难以承受,这就是BGP应用于大规模网络时呈现的问题之一。BGP提供了如下4种配置工具,以简化大量BGP对等体的管理问题。
• 对等体组(peer group)。
• 团体(community)。
• 路由反射器(route reflector)。
• 联盟(confederation)。
前2种工具用于简化多个对等体(内部对等体或外部对等体)之间的路由策略管理,后2种工具则用于简化大量对等体间的IBGP管理。
2.5.1 对等体组
对大规模的BGP互联网络来说,通常需要对多个对等体实施路由策略。比方说,可能需要在传送给多个对等体的Update消息中设置相同的属性,或者对来自多个对等体的路由使用相同的过滤器。此时,将这些共享相同策略的对等体加入对等体组(peer group)就可以大大简化相应的配置和管理工作。
通过一个组名和一套路由策略就可以在Cisco路由器上定义对等体组,之后就可以将对等体加入到对等体组中。此后,如果发生任何路由策略变化,都无需再逐一对每个对等体进行操作,而只需对对等体组进行操作。此外,对等体组对提高路由器的性能也非常有效,因为此时的路由器不再需要为每条发送给每个对等体的更新信息重复咨询策略数据库,路由器只要咨询一次策略数据库,创建单条Update消息,即可将多个拷贝分发给对等体组中的所有对等体。
有时,可能需要对某个对等体组中的一个或多个成员施加额外的路由策略,此时,除了要为对等体组配置通用路由策略之外,还要在相应的邻居上配置额外的路由策略。
2.5.2 团体
与对等体组是对一组路由器实施路由策略不同,团体是对一组路由实施路由策略。路由器将其COMMUNITY属性设置为某个标识自己为某团体成员的值之后,就可以将路由加入预先配置的团体中,之后,邻居路由器就可以基于COMMUNITY属性值将其策略(如过滤或重分发策略)应用于特定路由。COMMUNITY属性既可以被设置为周知值,也可以被设置为网管员预定义的值,有关COMMUNITY属性的详细信息请参见2.3.3小节的“COMMUNITY属性”。
可以为一条路由设置多个COMMUNITY属性。路由器在接收到一条拥有多个 COMMUNITY属性的路由后,既可以基于全部属性来设置路由策略,也可以基于部分属性来设置路由策略。当包含COMMUNITY属性的路由被聚合之后,聚合路由将继承所有被聚合路由的COMMUNITY属性。
2.5.3 路由反射器
当AS内包含了大量IBGP对等体时,路由反射器将非常有用。除非EBGP路由被重分发进自治系统的IGP,否则所有的IBGP对等体之间都必须建立全连接关系。对n台路由器来说,将意味着要在AS内建立n(n-1)/2条IBGP连接。例如,图2-35中显示了6台全连接的IBGP路由器,还算不上大量路由器,但即便如此,也需要建立15条IBGP连接。
图2-35 全连接IBGP对等体
路由反射器为全连接IBGP对等体提供了一种可选替代方案:将某台路由器配置为RR(Route Reflector,路由反射器),其他IBGP路由器则被称为客户(client),客户不再需要与每台IBGP路由器都建立对等关系,只要与RR建立对等体关系即可(如图2-36所示)。路由反射器及其客户被共同称为簇(cluster)。
路由反射器是通过放宽“IBGP对等体不允许对外宣告学习自其他IBGP对等体的路由”的规则来进行工作的,例如,图2-36所示的互联网络中,路由反射器学习了其全部客户的路由,与其他IBGP路由器不同,RR可以将这些路由反射给其他客户以及其他非客户对等体。换句话说,来自某IBGP对等体的路由可以被RR反射给其他客户。为了防止可能出现的路由环路或其他路由差错,要求路由反射器不得更改其从客户接收到的路由的属性。
路由反射簇中的客户路由器可以与外部邻居建立对等关系,但是在路由反射簇里只能与内部邻居或簇里的其他客户建立对等关系。不过,RR却可以与簇外的内部邻居和外部邻居建立对等关系,并且可以将它们的路由反射给客户路由器(详见图2-37)。
图2-36 路由反射簇中的IBGP客户只需与路由反射器建立对等关系即可,大大减少了所需的IBGP连接数
图2-37 路由反射簇的对等关系
如果RR接收到去往同一目的地的多条路由,将会启动BGP决策进程来选择最佳路径。RFC1966中定义了3条RR用来决定要宣告哪条路由的规则,具体使用时取决于路由是如何学习到的。
• 如果路由学习自非客户IBGP对等体,则仅反射给客户路由器;
• 如果路由学习自某客户,则反射给所有非客户和客户路由器(发起该路由的客户除外);
• 如果路由学习自EBGP对等体,则反射给所有非客户和客户路由器。
只要路由反射器支持路由反射器的功能即可,从客户的角度来看,它们只要与内部邻居建立对等体关系即可。这一点正是路由反射器吸引人的地方,因为路由器只要实现了基本的BGP功能就可以在路由反射簇中充当客户路由器。
路由反射器与本章前面所说的路由服务器的概念相似,这两类设备的主要目的都是通过为多个邻居提供单一对等点来减少对等会话数,之后邻居就依靠该类设备来学习它们的路由。路由反射器与路由服务器之间的区别在于,路由反射器本身也是路由器,而路由服务器则不是。
单RR与单路由服务器一样,会给整个系统带来单点故障问题。如果RR失效,所有的客户都将失去它们惟一的NLRI源,因而,从冗余性角度来考虑,一个簇中可以拥有多台路由反射器(如图2-38所示)。客户与每台路由反射器都有物理连接,而且每台路由反射器也都建立了对等关系,在其中一台RR出现故障的情况下,客户仍有一条去往另一台RR的连接,因而不会丢失可达性信息。
注意: 尽管一个客户在只有一条去往某一RR的物理链路的情况下,仍能与多个RR建立对等关系,但这种配置方式失去了冗余性的目的,因为此时仍然存在单RR(客户只与该RR有物理连接)的故障隐患。
图2-38 为实现冗余性,一个路由反射簇可以拥有多台路由反射器
一个AS也可以有多个路由反射簇,图2-39显示了一个拥有两个簇的AS,每个簇都配置了冗余的路由反射器,而且这些簇之间也实现了冗余互连。
由于客户并不知道它们是客户,因而路由反射器本身也可以是其他路由反射器的客户,这样就可以构建“嵌套式”的路由反射簇(参见图2-40)。
尽管客户无法与本簇之外的路由器建立对等关系,但是它们之间却可以建立对等关系,因而路由反射簇可以实现全连接(参见图2-41)。当客户之间建立全连接之后,即便配置了路由反射器,路由反射器也不会将一个客户的路由反射给其他客户。此时,路由反射器仅将客户的路由反射给非客户对等体,并将非客户对等体的路由反射给客户。
图2-39 一个自治系统中可以创建多个路由反射簇
图2-40 任一路由反射器都可以是其他路由反射器的客户
图2-41 可以建立全连接的路由反射簇
2.4节中提到,由于AS_PATH属性在同一个AS中不会发生变化,因而为了防止出现路由环路,要求BGP不能将学习自内部对等体的路由转发给其他内部对等体。但需要注意的是,路由反射器是一种被放宽了该规则的BGP路由器,因而为了防止出现路由环路,路由反射器必须使用两种BGP路径属性:ORIGINATOR_ID和CLUSTER_LIST。
ORIGINATOR_ID是一种由路由反射器创建的可选非传递性属性,是本地AS中路由发起者的路由器ID。路由反射器不会将某路由宣告回该路由的发起者,即便如此,如果发起者接收到的Update消息中包含了其自己的RID,则忽略该Update消息。
AS内的每个路由反射簇都以一个惟一的4个8位组来标识簇ID,如果簇中包含了多个路由反射器,则必须以手工方式为每个RR配置簇ID。
CLUSTER_LIST是一种可选非传递性属性,用于记录簇ID,就像AS_PATH记录AS号一样。当RR将来自客户的路由反射给非客户时,同时将其簇ID附加到CLUSTER_LIST中,如果CLUSTER_LIST为空,则RR将创建一个CLUSTER_LIST。RR接收到Update消息后就会检查CLUSTER_LIST,如果发现其簇ID位于簇列表中,则知道已经出现了路由环路,从而忽略该Update消息。
2.5.4 联盟
联盟是另一种控制大量IBGP对等体的方法,它就是一个被细分为一组子自治系统(被称为成员自治系统(member autonomous systems))的AS,如图2-42所示。联盟中的BGP发言者与同一成员AS中的对等体建立IBGP关系,而与其他成员AS中的对等体建立EBGP关系。BGP会为联盟分配一个联盟ID(confederation ID),该联盟ID被联盟之外的对等体视为整个联盟的AS号。外部对等体无法看见联盟的内部结构,它们将联盟视为一个AS。如图2-42所示,AS 9184就是一个联盟ID。
图2-42 一个典型的联盟示例
非常明显,实体细分概念可以提高可管理性,IP子网就是IP网细分后的产物,而VLSM可以进一步细分子网。与此类似,自治系统是大型互联网络(如Internet)的细分产物,而联盟则是自治系统的细分产物。
2.3.5小节中描述了两种类型的AS_PATH属性:AS_SEQUENCE和AS_SET。而联盟又增加了两种类型的AS_PATH,如下所示。
• AS_CONFED_SEQUENCE:一个去往特定目的地所经路径上的有序AS号列表,其用法与AS_SEQUENCE完全一样,区别在于该列表中的AS号属于本地联盟中的自治系统。
• AS_CONFED_SET:一个去往特定目的地所经路径上的无序AS号列表,其用法与AS_SET完全一样,区别在于该列表中的AS号属于本地联盟中的自治系统。
由于AS_PATH属性被用于成员自治系统之间,因而保留了环路预防功能。从成员AS中的BGP路由器的角度来看,其他成员AS中的对等体都属于外部邻居。
将Update消息发送给联盟之外的对等体时,将从AS_PATH属性中剥离AS_CONFED_SEQUENCE和AS_CONFED_SET信息,而将联盟ID附加到AS_PATH中。因此,外部对等体将整个联盟视为单个AS,而不是多个自治系统的集合。如图2-42所示,通用做法是从预留的AS号(64 512〜65 535)中为联盟中的成员自治系统进行编号。
在选择路由时,BGP的决策进程在保持一致的基础上增加了一条规则:联盟外部的EBGP路由优于成员AS的外部EBGP路由,而成员AS的外部EBGP路由优于IBGP路由。联盟与标准AS之间的另一个区别在于某些属性的处理方式不同,NEXT_HOP和MED等属性可以不加修改地宣告给联盟内其他成员AS的EBGP对等体。此外,还可以传送LOCAL_PREF属性。
与路由反射器环境下仅需要路由反射器支持路由反射不同,联盟中的所有路由器都必须支持联盟功能,这是因为联盟内的所有路由器都必须能识别AS_PATH属性中的AS_CONFED_SEQUENCE和AS_CONFED_SET。不过,由于在将路由宣告出联盟时会移除这些AS_PATH类型,因而其他自治系统中的路由器无需支持联盟功能。
在超大型自治系统中,可以同时使用联盟和路由反射器,可以在一个或多个成员AS中配置一个或多个RR簇,以便更好地控制IBGP对等体。