3.4大型BGP

大型BGP(Large-scale BGP)是一个主观用词,需要由自己来判断本网的BGP拓扑结构是否已经大到需要使用本节所讨论的各种工具。不过,作为一条规则,应该在中等及以上规模的互联网络中使用对等体组和团体。虽然有时也会在中等及以上互联网络中见到路由反射器,但是只有在超大的BGP拓扑结构(如大型ISP)中才会使用BGP联盟。本节的案例研究将逐一解释上述工具的使用情况。

3.4.1案例研究:BGP对等体组

在前一个案例研究中,图3-24给出的BGP拓扑结构是一个自治系统多归属到多个其他自治系统。但是,假如路由器Colorado拥有150个EBGP对等体(而不再是5个EBGP对等体),那么除了标准的配置之外,还需要为每条邻居连接配置出站和入站路由过滤器,因而对每个邻居来说,需要配置以下5条BGP语句。

• 1条neighbor remote-as语句;

• 1条neighbor ebgp-multihop语句,因为BGP连接位于环回地址之间;

• 1条neighbor update-source语句,原因同上;

• 1条neighbor filter-list out语句;

• 1条neighbor filter-list in语句。

这样一来,对150个EBGP对等体来说,将需要配置750条BGP语句。

当需要为多个BGP对等体实施相同的路由策略时,通过将这些对等体指定为某对等体组 的成员,可以极大地简化路由器的BGP配置工作。此时,大多数配置选项和路由策略都无需再为每个邻居进行单独配置,只需要为对等体组配置一次即可。对等体组仅与其所定义的路由器有关,不与该路由器的对等体进行通信。按照下面的步骤就可以定义对等体组。

第1步:指定对等体组名称。

第2步:指定适用于对等体组全部成员的路由策略和配置选项。

第3步:指定属于本对等体组的邻居。

例3-122中的配置文件在路由器Colorado上创建了一个名为CLIENTS的对等体组。

例3-122:在路由器Colorado上创建一个名为CLIENTS的对等体组。

img208a

语句neighbor CLIENTS peer-group用于创建对等体组,接下来的4条语句定义了适用于对等体组全体成员的配置选项和路由策略,之后使用neighbor remote-as来指定EBGP邻居,然后增加了一条语句将该邻居指定到对等体组CLIENTS中。

通过合并共享的配置选项和路由策略,对等体组可以极大地缩短BGP的配置文件,回到Colorado拥有150个EBGP的应用场景。如果所有对等体都是对等体组CLIENTS的成员,那么配置文件将从750条语句缩减到305条语句,配置将变得更简单,也更容易理解。可以在一处地方定义所有的配置选项,惟一需要知道的就是哪些邻居属于哪个对等体组。

如果对等体组的所有成员都属于同一个AS,那么在对等体组配置中指定公共AS还可以进一步缩减配置文件。虽然所有的成员都可能是同一个远程AS的EBGP对等体,但大多数情况下,同一个AS中的大量对等体都是IBGP对等体。如图3-25所示,路由器NewMexico和Idaho被增加为Colorado的对等体。

例3-123显示了Colorado的配置情况。

例3-123:利用对等体组配置Colorado的内部对等体。

img208b

(待续)

img209a

img209b

图3-25为AS 100增加了2个IBGP对等体

NewMexico和Idaho被加入到对等体组LOCAL中,在对等体组配置中为它们指定了公共AS号,就像公共的出站路由策略一样。


注意: AS_PATH access-list 3允许所有来自AS 200、400或600的路由,而来自AS 300和AS 500的路由都被隐式拒绝,与源自Colorado的本地路由一样。


为单个对等体组成员定义的入站路由策略优先于为整个对等体组定义的入站路由策略。例如,假如要求Colorado不但接收来自EBGP对等体California的子网10.1.5.0/24,而且要遵循其他对等体组路由策略和选项,那么就需要按照例3-124重新配置Colorado。

本例在邻居配置中为California(10.1.255.4)增加了一个distribute-list 10,虽然Colorado的配置将California定义为CLIENTS对等体组的一个成员,但分发列表却优先于为California定义的入站filter-list 2。

例3-124:为对等体组中的单个邻居应用路由策略。

img210a

利用命令show ip bgp peer-groups可以显示路由器上所定义的对等体组的详细情况。如例3-125所示,通过在该命令的末尾指定对等体组的名称,还可以观察特定对等体组的细节情况。

例3-125:命令show ip bgp peer-groups可以显示路由器上所定义的对等体组的详细情况。

img210b

3.4.2案例研究:BGP团体

对等体组可以将公共路由策略应用于一组邻居,而团体(community)则可以将路由策 略应用于一组路由。团体是一种BGP路由属性,因而在BGP发言者之间进行传递。按照以下步骤即可配置团体属性。

•第1步:利用路由映射标识将要设置属性的路由。

•第2步:利用命令set community设置属性。

•第3步:利用命令neighbor send-community指定属性所要发送的邻居。

在图3-26中,AS 100通过NAP连接到AS 2000上,AS 2000中的路由策略要求,子网10.2.2.0/24只能宣告给AS 100,但不能宣告给Colorado所连接的其他EBGP对等体。为了实施本路由策略,需要使用NO_EXPORT属性,该属性允许路由通过某邻居AS进行宣告,但不允许该AS将该路由宣告给其他自治系统。

img211a

图3-26用于BGP团体案例研究的拓扑结构

例3-126显示了路由器Austria的配置情况。

例3-126:限制AS 2000中的子网被宣告到AS 100之外。

img211b

例3-127显示了例3-126配置的输出结果。Colorado的BGP表包括了去往10.2.2.0/24的路由,表明Idaho已经将该路由宣告给了IBGP对等体,但Nevada的BGP表并不包含该路由,因而可以 看出,Colorado已经遵守了NO_EXPORT属性,并且已经抑制该路由发送给其EBGP对等体。

例3-127:去往10.2.2.0/24的路由被设置了NO_EXPORT属性,因而Colorado不将该路由宣告给其EBGP对等体(如Nevada)。

img212a

当然,任何自治系统都不可能是真正自治的,因为其他AS还会告诉它应该怎么做。假定希望AS 100忽略由Austria设置的NO_EXPORT属性,并将10.2.2.0/24宣告给了Colorado的EBGP对等体,那么就需要按照例3-128来配置Idaho,以实现该路由策略。

例3-128:配置Idaho以删除AS 2000所宣告的团体属性。

img212b

Idaho配置中的语句set community none没有设置团体属性,而是删除了已有的团体属性,这就是为什么不需要在本配置中使用语句neighbor send-community的原因。例3-129给出了Colorado和Nevada的配置输出结果。

例3-129:此时的Colorado已看不见为去往10.2.2.0/24的路由所设置的NO_EXPORT属性,因而将该路由宣告给其EBGP对等体。

img212c

(待续)

img213a

NO_ADVERTISE团体属性发送的消息与NO_EXPORT一致——让路由器不将路由宣告给任何对等体。两者的不同之处在于,NO_ADVERTISE是发送给IBGP对等体(而不是EBGP对等体)的。假如图3-26中的Idaho希望将子网10.2.1.0/24和10.2.3.0/24宣告给Colorado,但不希望该对等体(Colorado)将这些路由再宣告给自己的IBGP或EBGP对等体,那么就需要按照例3-130来配置Idaho。

例3-130:在Idaho上为选定的前缀配置NO_ADVERTISE团体属性。

img213b

回顾一下Austria的配置,宣告10.2.2.0/24时携带了NO_EXPORT团体属性,而AS 2000的其他两个子网未携带团体属性。现在的Idaho已经完全颠覆了该路由策略,子网10.2.2.0/24已无团体属性,而子网10.2.1.0/24和10.2.3.0/24则携带了NO_ADVERTISE属性,以防止这两条路由被宣告到AS 100之外。例3-131显示了该配置的输出结果。

例3-131:Colorado知道来自AS 2000的3条路由,但仅将10.2.2.0/24宣告给其对等体。

img213c

(待续)

img214a


注意:例3-131给出了命令show ip bgp的另一种使用方式,此处使用了一个正则表达式来显示AS_PATH中带有AS号2000的全部路由。


被称为LOCAL_AS的团体属性在一定程度上是NO_EXPORT和NO_ADVERTISE的混合属性,该属性与BGP联盟(在一个AS中配置自自治系统)同时使用,携带LOCAL_AS属性的路由可以被宣告给联盟中的其他子自治系统,但无法被宣告到构成联盟的AS之外。

到现在为止,已经解释了被BGP发言者自动执行的周知团体属性,也可以自定义配置这此团体属性。可以采取以下两种方式来指定这些团体属性:

•十进制格式,在1~4 294 967 200之间。

•AA:NN格式,其中AA是一个16bit AS号,取值范围在1~65535之间,NN是一个任意的16bit数,取之范围在1~65440之间。

在图3-26中,AS 100的每个“客户”自治系统都有两个子网。假设AS 100需要对每个客户AS的某个子网实施一定的路由策略,而对另一个子网实施不同的路由策略,此时就可以在Colorado上使用一个冗长的访问列表通过其NLRI来标识每条路由(回顾前面所说的拥有150个客户自治系统(而不是5个客户自治系统)的应用场景)。另一种方法是让每个客户AS都为每个子网分配两个预定义团体属性中的一种属性。例如,每个客户AS都为某个子网分配团体值5,而为另一个子网分配团体值10。例3-132给出了Utah的配置情况。

例3-132:在Utah上为子网分配团体属性。

img214b

Colorado的其他EBGP对等体的配置都相似,如例3-133所示。除了让Colorado为每种路由策略标识路由更为简单之外,该方法还为客户自治系统的管理员提供了一定的回旋余地,即用于决定哪些路由被用于哪些路由策略。

例3-133:Colorado的EBGP对等体所宣告的每条路由都是community 5或community 10的成员。

img215a

团体列表(community list)被用于标识路由(通过它们的团体属性),该列表是访问列表的一种特殊应用形式:列表中可能会有多行语句,每行都有一个“permit(允许)”或“deny(拒绝)”动作;该列表由1〜99的数字所标识,并且在最后都有一个隐式的“拒绝全部”之意。在例3-134中,Colorado使用团体列表来为路由分配LOCAL_PREF属性(根据它们的团体值)。


注意:在客户自治系统被多归属到AS 100时可能会使用该路由策略。为简化起见,本例未展示这样的拓扑结构。


例3-134:利用团体列表为路由分配LOCAL_PREF属性(根据它们的团体值)。

img215b

待续

img216a

来自对等体组CLIENTS成员的入站路由被发送到名为COMM_PREF的路由映射中。路由映射的序列10使用community-list 1来标识团体值为5的路由,并为这些路由的LOCAL_PREF分配值150。序列20使用community-list 2来标识团体值为10的路由,并为这些路由的LOCAL_PREF分配值200。例3-135显示了Colorado的BGP表结果。

例3-135:属于团体5的路由(如例3-131所示)的LOCAL_PREF被分配为150,而属于团体10的路由的LOCAL_PREF被分配为200。

img216b

RFC 1997和RFC 1998(描述了BGP的团体属性)说明了AA:NN的使用方法。在默认情况下,Cisco IOS使用较老式的十进制格式。如果希望使用新格式,就需要在全局路由器配置模式下使用命令ip bgp-community new-format,以该格式输入团体时,可以直接以AA:NN格式来输入团体(十六进制或十进制)。例如,下面3种形式都可以用来指定团体400:50(AS 400,数值50)。

• set community 400:50

• set community 0x1900032

• set community 26214450

上面的3条命令都指定了一个32bit数,其中,前16bit是十进制数400,后16bit是十进制数50。无论使用上述3种命令中的哪一种,在路由器配置文件和BGP表中显示的团体都是400:50。

例3-136给出了利用该格式表示的Utah配置。

例3-136:让Utah以AA:NN格式显示团体。

img217a

就像有标准访问列表和扩展访问列表一样,团体列表也有标准团体列表和扩展团体列表之分。与IP访问列表相似,标准团体列表被编号为1~99,而扩展团体列表则被编号为100~199,这两种类型团体列表的区别在于,扩展团体列表可以使用正则表达式来指定团体(在使用AA:NN格式时非常有用)。如果希望利用AA:NN格式在Colorado上实现前面所说的LOCAL_PREF策略,则需要按照例3-137所示方式重新配置Colorado。

例3-137:使用扩展团体列表。

img217b

(待续)

img218a

例3-137中Colorado的配置除了使用了扩展团体列表之外,其余配置与例3-134中的配置完全相同。如果使用的是标准团体列表,就需要为每个AS增加一个独立的语句行,如例3-138所示。

例3-138:使用标准团体列表。

img218b

使用了扩展团体列表之后,只要一行就可以完成匹配条件。正则表达式。*匹配任意AS号,5则表示匹配团体号的公共部分。

例3-139显示了路由器Colorado上匹配community-list 101和community-list 102的路由情况。对大规模BGP实现(可能会有几万条BGP路由项)来说,联合使用团体列表和命令show ip bgp community-list将非常有用。因为通过团体列表,可以很容易地在如此众多的路由中找到特定团体属性的路由,之后再显示与团体列表相匹配的路由。

例3-139:命令show ip bgp community-list显示了与特定团体列表相匹配的BGP路由。

img218c

(待续)

img219a

一条路由可以拥有多个团体属性,假设图3-26中的路由器Austria将其所有的子网(携带2000:100团体属性)都宣告给Idaho,这些来自Ausreia的路由在Idaho上也都成为团体100:2000的成员。例3-140显示了Idaho的配置情况。

例3-140:让Idaho为来自Ausreia的路由增加一个团体值。

img219b

上面的配置中有两点值得关注。首先,由路由映射IDAHO中的语句10将团体值设置为6555600。IOS 12.0及以后版本都支持命令ip bgp-community new-format,路由器Idaho运行的是IOS 11.0,因而不支持AA:NN格式,不过通过快速计算可以看出,十进制数6555600正好等于32bit数100:2000(或0x6407d0),由于Colorado运行的是IOS 12.0,因而能正确解析以AA:NN格式出现的32bit数。值得说明的一点是,虽然团体属性可以用AA:NN、十进制或十六进制等格式来表示,但无论如何,团体值都是一个32bit数。

其次,是与命令set community一起使用的关键字additive。如果命令set community 6555600未使用关键字additive,那么Idaho将会替换所有被匹配的携带团体100:2000的路由的已有团体属性,而这个案例的目的是增加一个团体值,不是要替换由Austria发送的团体值。例3-141显示了Colorado的配置结果。

例3-141:团体属性2000:100由Austria加入,而团体属性100:2000则由Idaho加入。

img219c

当某条路由拥有多个团体属性时,团体列表和匹配语句的使用将有些许不同。语句ip community-list 1 permit 2000:100匹配团体属性中有2000:100的所有路由,而语句ip community-list 1 permit 2000:100 100:2000则匹配团体属性中有2000:100或100:2000或两者的所有路由。如果仅希望匹配团体值为2000:100和100:2000(不多也不少)的路由,那么就需要在匹配语句中加入关键字exact-match,如例3-142所示。使用了该关键字之后,团体属性中只有2000:100或100:2000或者除两者之外还有其他团体属性的路由都没有被匹配上。

例3-142:使用关键字exact-match之后,仅匹配那些与指定团体列表完全匹配的路由。

img220a

如果可以为一条路由分配多个团体属性,那么就应该有方法在不删除全部团体属性(如语句set community none的功能)的情况下删除某些团体属性,该功能由命令set comm-list delete来完成。

在前面的配置中,去往图3-26所示AS 2000中的子网的路由携带了团体属性2000:100和100:2000,在AS 400中,应保留的团体属性是100:2000,而不是2000:100。例3-143显示了California的配置情况。

例3-143:让California选择性地删除特定团体值。

img220b

路由映射DROP_COMM引用了community-list 1,并删除了该团体列表指定的团体,例3-144显示了该配置的输出结果。可以看出,在团体列表的单行中可以指定多个团体属性,但是,当团体列表被用于命令set comm-list delete时,团体列表的每一行只能指定一个团体。因此,如果希望从路由中删除2000:100、NO_EXPORT和300:5等团体属性,就必须在团体列表中配置3行语句。

例3-144:没有在California的BGP中匹配到同时拥有团体属性2000:100和100:2000的路由,但来自AS 2000的路由都携带了单一团体属性100:2000。

img221a

3.4.3案例研究:私有AS号

读者对私有IP地址(定义于RFC 1918中)已经很熟悉了,私有IP地址的范围是10.0.0.0〜10.255.255.255、172.16.0.0〜172.31.255.255和192.168.0.0〜192.168.255.255。这些地址的出现是为了应对IP地址不断被耗尽的威胁,当某互联网络需要IP地址,但不需要将这些地址对外公开(也就是说,不需要通过Internet直接可达)时,就可以使用私有IP地址,而无需使用公有IP地址。但是由于任何人都可以使用私有IP地址,因而这些地址不是全球惟一的,不能将这些地址宣告给公众Internet。

与私有IP地址类似,也存在私有AS号,这些私有AS号也是为了应对AS号不断被耗尽的威胁。私有AS号的取值范围是64 512~65 535,被保留用作私有用途。如果采用BGP的用户是单归属到一个ISP,那么该用户就可以使用也鼓励该用户使用私有AS号。

例如,对于前面图3-26的案例研究来说,连接在路由器Colorado上的自治系统都被称为AS 100的“客户”自治系统,通过NAP连接到AS 100的AS 2000表示公众Internet。AS 100可能是一个ISP,连接在其上的自治系统可能是其用户;AS 100也可能是某大型企业互联网络中公开连接的一部分,其他连接在其上的自治系统则是其私有分部。无论是哪种情况,图3-26中的5个“客户”自治系统都只能通过NAP和AS 100才可达,它们拥有独立AS号 的惟一原因就是可以使用BGP将它们连接到AS 100上,AS 100可以将它们的路由宣告到Internet(不包含AS号)。图3-27给出的拓扑结构与图3-26类似,区别在于此处的“客户”自治系统使用的AS号不在私有AS号池之内。

img221b

图3-27连接在Colorado上的自治系统使用私有AS号

与私有IP地址类似,不能将私有AS号宣告到Internet,因为这些AS号不是全球惟一的。如例3-145所示,无需进一步配置,AS 100的客户AS号都通过NAP被宣告给了路由器Austria。

例3-145:Austria的BGP表显示了来自AS 100的某些路由的AS_PATH中存在私有AS号,如果Austria是公众Internet的一部分(通过NAP连接到AS 100上),则不能在AS_PATH中携带这些私有AS号。

img222a

在例3-146中,Idaho被配置为禁止通过NAP向外宣告私有AS号。

例3-146:过滤私有AS号。

img222b

命令neighbor remove-private-AS的作用从其名字中就可以看出来,其作用是在路由被宣告给指定邻居之前从AS_PATH中删中删除私有AS号。通过例3-147可以看出,此时所有从Idaho宣告到Austria的路由的AS_PATH属性中仅包含AS 100,AS 100中的路由器仍然有客户自治系统的全部路径信息,能够将数据包正确转发到目的AS。从这方面来说,AS 100在宣告客户子网时就像这些子网是AS 100的一部分一样,是一种自治系统级别的路由汇总。

例3-147:在Idaho的配置中增加命令neighbor remove-private-AS之后,AS 100客户自治系统的私有AS号对Austria来说都不可见了。

img223a

3.4.4案例研究:BGP联盟

BGP联盟可以将AS分割为多个子自治系统,从而让大型转接自治系统变得更具管理性。被分割的AS本身将成为联盟,而分割后的子自治系统则成为成员自治系统。联盟之外的自治系统将整个联盟视为一个AS,看不见成员自治系统。由于成员自治系统对外界来说是隐而不见的,因而可以使用公有或私有AS号(虽然最佳实践建议使用私有AS号)。

联盟的好处是可以极大地降低IBGP对等会话的数量。IBGP通常用于每个成员AS之内,而被称为联盟EBGP(confederation EBGP)的特殊EBGP版本运行于成员自治系统之间,无需在联盟内部的一个AS的BGP发言者与另一个AS的BGP发言者之间配置IBGP会话。

图3-28给出了一个BGP联盟示例,AS 1200被分割为3个联盟自治系统:AS 65533、 AS 65534和AS 65535。从外部自治系统(如AS 1000和AS 1500)的角度来看,整个联盟就 是一个AS,即AS 1200,这些外部自治系统并不知道联盟的成员自治系统。

img223b

图3-28 AS 1200是一个BGP联盟,虽然包含了多个子自治系统,但邻居自治系统仍将联盟视为一个AS 1200

联盟EBGP运行于Panorama和Sunshine、Sunshine和Talisman、Talisman和Whitetooth之间。例3-148给出了Talisman的配置情况。

例3-148:将Talisman配置为一台联盟路由器。

img224a

Talisman被配置为联盟路由器之后,其本地AS为65 534。与其他EBGP连接一样,其与Whitetooth及Sunshine的对等连接也已建立,并且与Lakeridge之间的连接为IBGP连接。命令bgp confederation identifier的作用是告诉路由器:其是BGP联盟的成员及其联盟ID。而命令bgp confederation peers则列出Talisman所连接的成员自治系统,该命令告诉BGP进程,该EBGP连接是联盟EBGP,而不是普通的EBGP。

联盟可以仅运行BGP,可以在整个联盟中运行一个公共IGP,也可以在每个成员AS中运行不同的IGP。如图3-28所示,AS 1200中的所有路由器都运行OSPF, OSPF允许联盟内的所有本地通信,并且告诉BGP进程如何发现它们的邻居。在例3-148所示配置中,没有在任何路由器上进行OSPF和BGP的路由重分发,随后的配置示例中将不再显示OSPF的配置情况。

例3-149显示了Lakeridge和Sugarloaf的配置情况。

例3-149:在联盟路由器Lakeridge和外部路由器Sugarloaf之间配置EBGP。

img224b

在Lakeridge的配置中未使用命令bgp confederation peers,这是因为Lakeridge未运行联盟EBGP,而是与Sugarloaf之间运行了普通的EBGP连接。请注意,从Sugarloaf的角度来看,Lakeridge位于AS 1200之中,而不是位于AS 65534之中,这是因为Sugarloaf作为联盟之外的路由器,根本不知道成员自治系统的情况。

从某种程度上来说,联盟EBGP是普通BGP和IBGP的混合物。在联盟内部应遵守以下规则。

•联盟外部路由的NEXT_HOP属性在整个联盟中都被保留。

•被宣告到联盟之内的路由的MULTI_EXIT_DISC属性在整个联盟中都被保留。

•路由的LOCAL_PREF属性在整个联盟中都被保留,而不仅仅是在为它们赋值的成员AS之内。

•在联盟内部需要将成员AS的AS号加入到AS_PATH中,但这些AS号不能被宣告到联盟之外。在默认情况下,成员AS号被列在AS_PATH中作为AS_PATH属性类型4,即AS_CONFED_SEQUENCE。如果在联盟中使用了命令aggregate-address,关键字as-set会使位于聚合点之后的成员AS号被列在AS_PATH中作为AS_PATH属性类型3,即AS_CONFED_SET。

• AS_PATH中的联盟AS号用于实现环路避免功能,但是在联盟中选择最短AS_PATH时则不考虑这些联盟AS号。

上述特性的的本质原因是整个联盟都被外界视为一个自治系统。下面将给出不同的例子来说明上述特性。

如图3-28所示,AS 1000中的路由从Bridger宣告到Nakiska,并携带NEXT_HOP属性172.17.255.1,这些路由经IBGP从Nakiska宣告到Sunshine时将保留该属性。如果Sunshine采用普通的EBGP连接连接到Talisman,那么Sunshine在将这些路由宣告到Talisman之前会将这些路由的NEXT_HOP属性更改为10.33.255.1。但是,由于该连接是联盟EBGP连接,因而将保留该原始NEXT_HOP属性,Lakeridge将拥有下一跳地址为172.17.255.1的去往172.17.0.0和172.18.0.0的路由。由于Lakeridge到Sugarloaf的连接是普遍的EBGP连接,因而这些路由被宣告给Sugarloaf时的NEXT_HOP属性为10.34.255.2。

在图3-28所示的整个联盟中都使用了命令neighbor next-hop-self,因而通过IGP都能知道下一跳地址。读者可以观察Talisman和Lakeridge配置中的这些命令。

Bridger被配置为宣告MED为50的路由,Nakiska被配置为将相同路由的LOCAL_PREF设置为200,详见例3-150所示的配置结果。虽然在普通EBGP会话中,Sunshine不会宣告源自AS 1000的MED,也不会宣告仅与AS 65533相关的LOCAL_PREF,但是由于联盟被外部视为单一AS,因而这些值在整个联盟内部都必须保持一致。

例3-150:路由器Lakeridge上的来自AS 1000的路由的MED值为50, LOCAL_PREF值为200,这些值在整个联盟EBGP连接中保持一致。

img225

(待续)

img226a

从例3-150可以看出,在去往AS 1000网络的路由的AS_PATH中包含了AS 65533。例中所示的AS_CONFED_SEQUENCE之所以出现在圆括号中,原因有二:一是该属性没有被宣告到联盟之外(如例3-151所示),二是该属性仅用于在联盟内部实现环路避免功能(而不是路径选择功能)。

例3-151:Sugarloaf将图3-28中的联盟视为单一自治系统,无法看见联盟内的成员自治系统;例3-150中出现在圆括号内的AS_CONFED_SEQUENCE被联盟ID 1200所替代。

img226b

如例3-152所示,从Whitetooth和Panorama的BGP表可以看出,成员AS号并没有对路径选择进程产生任何影响,这两台路由器都有两条路径去往AS 1000和AS 1500中的目的地——一条是通过其IBGP邻居,另一条是通过其联盟EBGP邻居。例如,Whitetooth有两条路径去往网络172.17.0.0,这两条路径的AS_PATH分别是(65534, 65533, 1000)和(65533, 1000),很明显后一个AS_PATH较短;但实际上,成员AS号是要被忽略的,因而这两条路径被视为等价路径:(1000)。对BGP决策进程来说,在其他条件均相同的情况下,普通EBGP路由优于联盟EBGP路由,联盟EBGP路由优于IBGP路由。在例3-152中,需要在联盟EBGP路由和IBGP路由之间做出决策,通过这两台路由器的BGP表可以看出,每个实例均选中了联盟EBGP路径。

例3-152:在AS联盟中选择最短AS_PATH路由时,不考虑以圆括号形式出现在Whitetooth和Panorama BGP表中的AS_CONFED_SEQUENCE。

img226c

(待续)

img227a

对图3-28所示的拓扑结构来说,忽视成员AS号不会产生任何问题。但是接下来分析一下图3-29所示的拓扑结构,与图3-28相比,只有AS 65534和AS 65535中的BGP路由器ID不同(被互换了),其余完全一致。虽然该变化看起来有些微不足道,但分析一下该变化对Sunshine的BGP决策进程的影响就会看出问题了:Talisman和Panorama同时宣告了去往AS 1500网络的路由,由于成员AS号被忽略了,且这两个邻居是联盟EBGP对等体,因而这两条路由的AS_PATH长度一致;同时,由于Talisman和Panorama都使用了命令neighbor next-hop-self,因而这两条路由去往下一跳的IGP路径也都相同;为此,只能选择邻居路由器ID最小的路径了,从而最终选中Panorama。如此一来,Sunshine将选择通过AS 65535经Panorama的路径,而不是更直接的、经Talisman的路径(如例3-153所示)。

img227b

图3-29交换了AS 65534和AS 65535中的路由器的路由器ID

例3-153:由于Panorama的路由器ID较小,致使Sunshine选择了次优路径去往AS 1500中的网络。

img227c

几乎没有任何办法能够解决图3-29所示拓扑结构带来的问题,试着过滤路由或控制管理性权值将会使配置变得非常复杂,而创建联盟的一个主要原因就是简化配置。试着利用LOCAL_PREF或MED属性来控制路由选择则充满了差错危险,因为这些属性是在整个联盟内进行宣告的。如果拓扑结构中存在环回,那么这些属性将会把路由选择到非期望地点。

因而必须通过联盟的设计来避免图3-29所示拓扑结构所引起的问题。从OSPF的设计中可以获得一个通用设计技术,即OSPF要求所有区域(area)都必须通过单一骨干区域来进行互联,从而消除了区域间的环路可能性。

图3-30中的路由器与前面的案例完全一样,但重新设计了成员自治系统:AS 65000是骨干自治系统,其他自治系统都要通过AS 65000进行互联。这样做的一个直接结果就是,任何非骨干区域AS之间的路径都有相同的距离值。从图中还可以看出,AS 65000和AS 65535之间的连接仍然可以具备冗余连接,但非骨干自治系统之间则没有冗余连接,利用BGP的环路避免机制,就可以阻止AS间的次优路径。

img228

图3-30 AS 65000是联盟中的骨干AS,其他区域都通过AS 65000进行互联,使得所有非骨干自治系统间的AS_PATH都有相同的长度

像图3-30所示的无环路拓扑结构的另一个好处是可以在成员自治系统之间使用MED属性。为什么MED在这样的拓扑结构中就安全呢?首先来看一下图3-31所示的拓扑结构。该拓扑结构与图3-28中的联盟类似,只是AS 65534到AS 65535有冗余连接,假如这里使用了MED,那么AS 65535将优选Whitetooth/Lakeridge链路(而不是Panorama/Talisman链路)去往AS 1500。虽然可以在这两个自治系统之间获得正确的路由选择,但问题是MED也被路由器从AS 65534转发到了AS 65533,因而依赖于AS 65533如何处理MED以及Talisman传送的是哪个MED,AS 65533仍有可能会选择一条次优路由。

对图3-30来说,AS 65500可以安全地将MED发送给AS 65535,这是因为AS 65535去往其他非骨干自治系统的惟一路径就是通过骨干AS。Sunshine或Talisman都不会接受AS_PATH中包含65500的路由,因而MED被这些路由器发送到AS 65535的时候,其他成员自治系统是看不见的。

在默认情况下,对图3-30中的Panorama和Whitetooth来说,联盟EBGP路由将优于IBGP路由,因而Panorama将会把所有去往AS 1000和AS 1500网络的流量都发送给Sunshine, Whitetooth则将去往相同目的地的流量发送给Talisman。由于可以使用MED,因而AS 65535可以将所有去往AS 1000网络的流量都通过Panorama/Sunshine链路进行发送,而将所有去往AS 1500网络的流量 都通过Whitetooth/Talisman链路进行发送。例3-154显示了Sunshine和Talisman的配置情况。

img229a

图3-31 MED属性在整个联盟内都被转发。如果AS 65534希望利用MED来影响AS 65535的优先级,则AS 65533也将收到这些MED

例3-154:让Sunshine和Talisman将MED发送给AS 65535。

img229b

(待续)

img230a

Sunshine将AS_PATH中包含1000的所有路由的MED值均设为100,而将AS_PATH中包含1500的所有路由的MED值均设为200,Talisman则与此相反。例3-155给出了配置前后Panorama的BGP表情况。在第一个BGP表中,路由器优选联盟EBGP路径去往所有目的地;而在第二个BGP表中,由于更改了MED值,因而Panorama选择了与Whitetooth间的IBGP链路来发送去往AS 1500网络的流量,而Whitetooth则优选联盟EBGP链路来转发流量。

例3-155:AS 65000中的路由器被配置成发送EMD属性前后的Panorama的BGP表对比情况。

img230b

如图3-32所示,在联盟中增加了两个本地子网:AS 65533中的10.33.5.0/24和AS 65535中的10.35.5.0/24,Sunshine和Talisman被重新配置成对这两个子网应用与外部网络相同的路由策略。也就是说,设置MED,让AS 65535将所有去往10.33.5.0/24的流量都通过Panorama/Sunshine链路进行发送,而将所有去往10.35.5.0/24的流量都通过Whitetooth/Talisman链路进行发送。

img231a

图3-32在AS 65533和AS 65535中增加了本地子网

从例3-156中的Panorama的BGP表可以看出,路由策略并没有发挥出所期望的效果。虽然正确配置了MED,但是路由器仍然优选其联盟EBGP路径去往这两个子网,而没有为去往10.35.5.0/24的流量优选MED较小的IBGP路径,原因在于:在默认情况下,BGP决策进程是不考虑联盟内部路由(即AS_PATH属性中无外部AS号的路由)的MED属性的。

例3-156:Panorama根据最小MED值来选择路径去往联盟外部的目的地,但是在选择联盟内部路径时却不考虑MED属性。

img231b

命令bgp deterministic-med的作用是让BGP进程在选择去往联盟内部目的地的路径时比较MED值。例3-157示范了让Panorama使用命令bgp deterministic-med时的配置情况。

例3-158显示了Panorama使用了命令bgp deterministic-med之后的输出结果,此时的Panorama就使用了MED最小的路径,而不再区分该路径是成员AS内部或外部路径了。通过使用前面案例研究中提及的命令bgp always-compare-med也能达到相似的效果,与命令bgp deterministic-med不同,命令bgp always-compare-med始终比较去往同一目的地的路径 MED属性,而不管MED是否宣告自相同的AS。对一个基于骨干的联盟来说(如图3-32所示),这不会有什么问题,因为任一个AS都只有一条路径去往邻居AS。

例3-157:Panorama在选择去往联盟内部目的地的路径时比较MED值。

img232a

例3-158:Panorama在选择联盟内部和联盟外部路由时均考虑MED属性。

img232b

还可以使用命令bgp bestpath med confed来完成上述目标。该命令与bgp deterministic-med的效果相同,区别在于:如果某条路由的AS_PATH中有一个外部AS号,而其他去往同一目的地的路由的AS_PATH中只有联盟AS号,那么路由器将选择MED最小的联盟内部路径,而忽视带有外部AS号的路径。不过这种情形极少出现,去往同一目的地如果存在两条路由,且其中一条路由指示该目的地位于联盟内部,而另一条路由指示该目的地位于联盟外部,则可以很明显地看出,要么配置有误,要么设计很差。

3.4.5案例研究:路由反射器

路由反射器是大规模自治系统中减少IBGP对等连接数量的另一种有效方法。与BGP联盟相比,路由反射器有如下两个好处。

•联盟中的所有路由器都必须理解和支持联盟机制,而路由反射只需要路由反射器了解路由反射机制即可,客户路由器将与RR间的连接都视为普通的IBGP连接;

•无论是从所需的配置命令还是从拓扑结构的设计上,路由反射的实现都相对简单些。

另一方面,如果希望利用各种EBGP控制机制来管理大规模AS,联盟将是一种较好的选择。本案例研究将示范使用两种方法的可能性。

图3-33对图3-32中的AS 65533做了一些改动,Frotress是一台路由器反射器,Nakiska和Marmot都是客户路由器。

img233a

图3-33带有路由反射器的拓扑结构:Frotress是路由器反射器,Nakiska和Marmot是客户

例3-159给出了上述3台路由器的配置情况。

例3-159:将Frotress配置成路由器反射器,将Nakiska和Marmot配置成客户路由器。

img233b

除了仅与RR之间建立IBGP对等关系之外,Nakiska和Marmot都是标准的IBGP配置。 此外,Nakiska还与路由反射簇之外的Bridger建立了对等连接。为Fortress增加的惟一命令就是为每个客户路由器都增加一条语句neighbor route-reflector-client,使得Fortress成为路由反射器。该语句的作用是实现路由反射器所需的松散的IBGP规则(在第2章讨论过)——顾名思义,就是将学习自某个客户的IBGP路由宣告给其他客户以及路由反射簇之外的IBGP对等体,将学习自路由反射簇之外的IBGP对等体的IBGP路由宣告给客户。

例3-160显示了Marmot BGP表中的路由项10.33.5.0/24,最后一行显示了由RR加入的ORIGINATOR_ID和CLUSTER_LIST属性,由RR加入的ORIGINATOR_ID属性表示了宣告该路由的客户,去往10.33.5.0/24的路由的发起者是Nakiska(10.33.255.2),该属性可以确保路由不会在簇内形成环路。如果Fortress在Update(更新)消息中接收到该NLRI,那么就会识别出Nakiska的路由器ID,从而忽略该路由。由于该属性是可选非传递性属性,因而路由器无需支持和理解该属性就能加入路由反射簇中,只是会丧失环路预防等功能。

与ORIGINATOR_ID类似,CLUSTER_LIST也是一种环路预防机制。长为4个8位组的簇ID用于标识路由反射簇,由RR将簇ID加入到CLUSTER_LIST中,如果RR接收到的更新消息的CLUSTER_LIST中包含其自己的簇ID,则知道已经出现了路由环路,从而忽略该路由。该功能在路径穿越多个路由反射簇时非常有用。图3-33中路由的CLUSTER_LIST是10.33.255.4,即Fortess的路由器ID。在默认情况下,RR会在CLUSTER_LIST中录入自己的BGP RID,为了在CLUSTER_LIST中指定RR的RID之外的簇ID,需要使用命令bgp cluster-id,簇ID的取值范围为1〜4294 967 295,也可以用点分十进制的格式来指定簇ID。

例3-160:从Marmot关于子网10.33.5.0/24的BGP表项中可以看出,ORIGINATOR_ID和CLUSTER_LIST属性都是由路由反射器加入的。

img234a

如果希望在一个簇中配置多台路由反射器,就需要使用命令bgp cluster-id,以确保所有RR都将自己标识为同一簇中的成员。如图3-34所示,在拓扑结构中增加了路由器Norquay,并被配置成第二台RR,以增强路由反射簇的冗余能力。

img234b

图3-34在路由反射簇中增加Norquay以增强冗余能力

例3-161显示了Fortress和Norquay的配置情况。

例3-161:将Fortress和Norquay配置为路由反射器。

img235a

这两台RR的簇ID均被配置为33,它们之间通过标准的IBGP建立对等关系,并利用语句neighbor route-reflector-client与路由反射客户建立对等关系。从而,这两台RR可以将路由反射给客户,但IBGP规则却阻止它们宣告IBGP路由。

路由反射客户配置发生的惟一变化就是为Norquay增加IBGP配置,如例3-162所示。

例3-162:路由反射客户Nakiska和Marmot分别与Fortress和Norquay建立对等关系。

img235b

(待续)

img236a

例3-163给出了Marmot BGP表中子网10.33.5.0/24的情况。例3-160中只有单条路径去往目的地,但现在已经有了两条路径,而且这两条路径完全等价;由于路由器没有被命令maximum-paths配置为同时使用这两条路径,因而路由器将选择来自10.33.255.4的路由(即下一跳地址最小的路由)。

例3-163:Marmot正在接收来自RR(Fortress和Norquay)的路由。

img236b

虽然路由反射客户可以拥有EBGP连接(如图3-34所示的Nakiska),但通常情况下,客户应该仅与RR建立IBGP连接,而不应拥有其他IBGP邻居。这也就意味着,路由反射簇之间的连接必须通过路由反射器来建立,而不能由客户直接建立,原因就在于客户路由器不会检查所接收路由的CLUSTER_LIST属性,客户无法检测簇间环路。RR之间通过标准的IBGP建立对等关系,并遵守所有的IBGP规则,RR之间传递的额外信息是用于环路预防的CLUSTER_LIST属性。AS内的路由反射器之间必须建立全连接关系,并且还要与本AS内不属于路由反射簇的路由器之间建立全连接关系,如图3-35所示。

对于客户只能与其RR建立对等关系的规则来说,存在两种例外情况。第一种是客户本身又是另一个簇的路由反射器,这种情况就形成了路由反射器“嵌套”,也就是创建了层次化的路由反射簇(如第2章的图2-40所示)。

第二种例外情况是客户之间建立了IBGP全连接(如第2章的图2-41所示)。客户之间建立全连接关系有助于提高网络的健壮性,采用这种设计方式时,需要利用命令no bgp client-to-client reflection来配置路由反射器。这样一来,全连接的客户之间就可以按照普通的IBGP规则进行路由交换了,而且RR也不在客户之间反射路由了,但仍然需要将来自客户的路由反射给簇外的对等体,并将来自簇外对等体的路由反射给客户。

img237a

图3-35互联路由反射簇的链路必须位于路由反射器之间,而不能位于客户路由器之间