3.1基本的BGP配置

本节将介绍BGP进程以及最常用的BGP控制技术的基本配置步骤若想了解详细的BGP实现细节信息,就请全面学习本节提供的全部内容。

3.1.1 案例研究:在BGP路由器之间建立对等关系

路由器之间的BGP会话需要通过以下两个步骤进行配置。

•第1步:利用命令router bgp建立BGP进程并指定本地AS号。

•第2步:利用命令neighbour remote-as指定邻居及邻居的AS号。

图3-1显示了两台位于不同自治系统中的路由器,这些路由器的BGP配置内容与EGP不同。第1章中提到,利用命令route egp来指定远程AS,利用命令autonomous-system来指定本地AS。而此处正好相反,命令router bgp指定的是本地AS,而每个邻居的AS号是通过命令neighbour remote-as来指定的。这个区别非常重要,只有核心EGP路由器能与多个远程AS建立对等关系(利用命令router egp 0),而任何BGP进程都能与任意数量的远程AS建立对等关系。此外,还取消了EGP中要求通过核心AS来连接末梢自治系统的限制,自治系统在BGP下可以建立全连接关系。

例3-1给出了图3-1中的路由器Taos和Vail的EBGP配置情况。

img124a

图3-1在路由器Taos和Vail之间建立BGP会话

例3-1:图3-1中路由器的EBGP配置。

img124b

例3-2显示了路由器Vail所记录的Taos的信息,其中显示的大部分信息对故障检测及排除工作都非常有用。附录A中提供了命令show ip bgp neighbors显示的全部字段信息。

例3-2:命令show ip bgp neighbors的输出结果中包含了与邻居建立对等连接的细节信息。

img124c

(待续)

img125a

例3-2输出结果中的第1行显示了路由器Taos的IP地址(192.168.1.255)、AS号(200)以及该路由器的BGP连接类型(外部链路),第3行显示了Vail和Taos之间使用的BGP的版本号以及Taos的路由器ID。第4行首先显示BGP有限状态机的状态,BGP表发生变化后,路由表版本号就会递增,由于例3-2中去往路由器Taos的对等连接在建立后就没有发生变化,因而路由表的版本号始终为1。如例3-2所示,Vail与Taos已连续对等了19小时32分2秒钟。

此外,还需注意底层的TCP连接。例3-2以高亮方式显示了这些输出行,表明该TCP连接的状态为Established(已建立), Vail通过TCP端口11025向外发送BGP消息,Taos侧的目的端口为179。当希望在一条承载了多条BGP会话的链路上抓取数据包时,源端口号就非常重要。

如图3-2所示,在AS 100中增加了另一台路由器Aspen,由于Vail和Aspen位于同一AS中,因而它们属于内部邻居。

img125b

图3-2 Vail和Aspen之间以IBGP进行通信

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

例3-3:图3-2中路由器Vail的配置。

img125c

例3-4显示了Aspen的配置过程,利用BGP调试技术可以观察对等体会话的建立过程。其中的数字显示了从创建BGP配置(18:24:13)到BGP对等体开始协商(18:24:33)之间的时间为20秒,TCP连接就是在这段时间内建立的。之后BGP就从Idle(空闲)状态跃迁到Active(活跃)状态,整个协商过程持续了大约10秒钟时间。

例3-4:命令debug ip bgp events显示了Aspen与Vail间建立对等关系的BGP有限状态机的状态。

img125d

(待续)

img126a

例3-5:Aspen的邻居信息显示了Vail的路由器ID来自于某个物理接口。

img126b

请注意,Vail的路由器ID是192.168.1.226,是与Taos连接的接口地址。BGP路由器ID的选择规则与OSPF路由器ID的选择规则完全一样,如下所示。

•路由器首先选择其环回接口上数值最大的IP地址;

•如果没有配置环回接口的IP地址,那么路由器将选择其物理接口上数值最大的IP地址。被选为路由器ID的接口上无需运行BGP。

由于Vail未配置环回接口,因而路由器选择物理接口上数值最大的IP地址作为路由器ID。使用与环回接口相关的IP地址有以下两个好处。

•环回接口比物理接口更稳定,环回接口在路由器启动后就一直处于活跃状态,而且仅当整台路由器失效后该接口才失效;

•网络管理员可以有更多的余地将可预测或可识别的IP地址分配为路由器ID。

Cisco的BGP实现会始终使用学习自物理接口的路由器ID,即便该接口后来失效或被删除。因而,环回接口的稳定性只是一个微不足道的优点,其主要优点在于对路由器ID的控制能力,使得其易于与其他IP地址相区别。

例3-6演示了如何为Vail配置一个惟一的路由器ID。

但是,为一台正在运行的BGP路由器配置环回地址之后并不会改变路由器ID,必须对路由器Vail应用命令clear ip bgp(将在3.3节做更为详细的讨论),以清除其全部BGP会话。 此时再去看一下例3-7中的路由器Aspen的邻居信息,就可以发现Vail的当前路由器ID已经是环回接口0的IP地址了。

例3-6:为路由器Vail配置一个惟一的路由器ID。

img127a

与例3-5相比,例3-7中关注的是路由表的版本。重置了路由器Vail的会话之后,路由表的版本就被递增到2,该变化还会同时反应在Connections establisheddropped字段中。需要注意的是,这些字段的内容不应发生经常性的变化,否则表明邻居不稳定。

例3-7:为路由器Vail配置了环回地址并重置其BGP会话之后,Vail的路由器ID将变为其环回地址。

img127b

此外,还可以手工设置BGP发言者的路由器ID,以绕过物理接口地址和环回接口地址,完成次操作的命令是bgp router-id。例如,例3-8就将Vail的BGP路由器ID设置为1.1.3.2。

例3-8:手工设置BGP路由器ID。

img127c

在环回接口需要用作它用(如用作OSPF路由器ID或SNMP功能)时,命令bgp router-id将非常有用,但是,接口上的IP地址与所期望的BGP路由器ID则有所不同。

3.1.2案例研究:将IBGP路由注入BGP

第2章曾强调过,在AS边界处,出站路由宣告会影响入站流量,而入站路由宣告则会 影响出站流量。因而,应分别考虑出站和入站路由宣告。本小节将通过几个将路由注入BGP的基本方法来讨论BGP的路由宣告问题。

图3-3中的AS 200使用EIGRP作为IGP, Taos需要将3个IP地址宣告给EBGP对等体:学习自EIGRP的192.168.200.0/24、直连到Taos的192.168.100.0/24以及连接Taos和AngelFire的192.168.1.216/30。前两个地址是完整的C类地址,而最后一个地址为子网地址,192.168.1.0的其他子网位于AS 200之外,因而需要将该子网(而不是主网地址)宣告出去。

img128a

图3-3 AS 200的IGP为EIGRP

例3-9给出了路由器Taos的“first-pass”配置情况。

例3-9:Taos的基本EIGRP和BGP配置。

img128b

例3-10显示了Vail的BGP表,所有的EIGRP网络都通过EBGP链路向外宣告。需要注意的是,该例配置中未使用命令redistribute来指定度量值,因而每条路由的度量值都是默认的EIGRP度量值,如例3-11中所示的Taos路由表。直连网络的度量值为0,192.168.200.0/24的度量值为409600。可以利用命令default-metric来更改默认的度量值选择方法。


注意: BGP的度量值是MULTI_EXIT_DISC,该属性的使用和操作将在3.3.8小节中进行详细论述。


例3-10:Taos正确宣告了192.168.100.0/24和192.168.200.0/24,但子网192.168.1.216/30被汇总为主网。

img128c

例3-11:Taos路由表显示其EIGRP度量值与Vail的BGP表中的度量值一样。

img128d

(待续)

img129a

虽然AS 200中的两个主网得到了正确宣告,但例3-9中的子网192.168.1.216/30却被汇总成了主网,原因是BGP-4在默认情况下在网络边界处进行路由汇总(虽然BGP-4是无类别的路由协议)。在图3-3所示的互联网络中,这种路由汇总不会带来任何问题,路由器Vail与192.168.1.0的两个子网有直连关系,因而知道这两条精确路由。但随着网络规模的扩大以及在其他路由器上使用192.168.1.0的其他子网,这种路由汇总将会给路由选择带来差错。要想关闭BGP的自动汇总功能,需要按照例3-12的方法配置路由器Vail。

例3-12:配置路由器Vail以关闭BGP的自动汇总功能。

img129b

例3-13显示了路由器Vail的BGP表。可以看出,Vail在宣告192.168.1.0的子网的同时,还宣告了主网192.168.1.0。通过例3-11中Taos的路由表即可看出原因,EIGRP也会执行自动路由汇总功能,并在路由表中为Null0增加一条汇总路由。除了子网路由之外,BGP还会获知该汇总路由,并将其宣告给路由器Vail。

例3-13:关闭了路由器Taos的BGP自动汇总功能之后的路由器Vail的BGP表。

img129c

要想关闭路由器Vail的EIGPR自动汇总功能,可以使用命令no auto-summary(如例3-14所示)。

利用重分发机制将路由注入BGP的好处是在几乎不更改BGP配置的情况下,能够将域内路由的变化宣告给BGP。如果AS 200的EIGRP域内增加或删除了一个网络,该变化会自动宣告给路由器Vail。此外,IGP-to-BGP重分发机制的另一个主要好处是可以宣告每一条IGP 路由。例如,AS 100和AS 200的网络管理员可能/也可能不希望将子网192.168.1.224/30从Taos宣告给Vail,如例3-15所示,如果不希望宣告该子网,就需要使用路由过滤。3.3节中将通过几个案例来解释各种不同的路由过滤配置选项。

例3-14:配置路由器Vail以关闭EIGPR的自动汇总功能。

img130a

例3-15显示了此时路由器Vail的BGP表情况。

例3-15:关闭了路由器Taos的EIGRP自动汇总功能之后的路由器Vail的BGP表。

img130b

将IGP重分发到BGP中时,基本上都需要进行路由过滤。在默认情况下,每条由IGP学习到的路由都要被重分发到BGP中,但AS的网络管理员可能希望仅宣告IGP路由中的某个子网,这样就需要过滤掉其他子网。或者,某个多归属AS不希望为其任何邻居AS提供转接服务,此时就需要使用路由过滤,来阻止将学习自某AS的外部路由宣告给其他AS。不过此时将存在路由回馈问题,即接收自EBGP的外部路由被宣告到IGP中之后又从IGP中被重分发到EBGP中。最佳实践要求在使用路由过滤时,应该用来确保仅重分发正确路由。在实际应用中,由于缺乏精确控制手段,很少会将IGP前缀重分发到BGP中。

一种可选的将IGP路由重分发到BGP中的方式是使用命令network,如第1章所述,该命令在IGP中的功能与在EGP和BGP中的功能是不一样的。当应用于IGP中时,命令network用于指定某接口或一组接口(这些接口上将要启用路由协议)的IP地址,而应用于EGP和BGP时,命令network则用来指定将要宣告的IP前缀。对每个由该命令指定的前缀来说,BGP都会检查其路由表,如果表中的某个表项与network前缀完全匹配,那么该前缀就会进入BGP表并被向外宣告。

例3-16显示了对路由器Taos应用命令network而不是重分发机制的配置情况。

例3-16:用命令network配置Taos。

img130c

(待续)

img131a

如例3-16所示,命令network分别指定了主网192.168.100.0和192.168.200.0,此外,还指定了子网192.168.1.216的子网掩码。需要注意的是,只有在BGP-4下才可以指定子网及子网掩码,对EGP或BGP的早期版本来说,虽然都是无类别协议,但只能指定主网。

请注意,在这种配置场合下,命令no auto-summary不能应用于EIGRP或BGP。这是因为,在未配置路由重分发的情况下,无需关闭自动汇总功能。例3-17显示了该配置结果。

例3-17:使用命令network重新配置Taos之后的Vail的BGP表。

img131b

与例3-15不同,子网192.168.1.224/30没有被宣告,这是因为没有使用命令network来指定该子网。网络管理员有比重分发更多的控制手段,也不需要路由过滤。对比例3-15和例3-17可以看出,ORIGIN代码有所不同:例3-15中被重分发的路由被标记了一个?,表示ORIGIN为“不完全的(incomplete)”;而例3-17中的路由则被标记了一个i,表示ORIGIN为IGP。由于第2章中讨论过的BGP决策进程的关系,这种标记在不同场合下可以是不同的,ORIGIN代码1(IGP)的优先级要高于代码3(不完全的)。

利用命令network最多可以指定200个地址,如果需要通过BGP连接宣告更多的地址,就需要使用重分发机制。

3.1.3案例研究:将BGP路由注入IGP

学习自EBGP邻居的前缀可以被自动增加到路由表中。如图3-4所示,AS 300正在宣告两条路由:192.168.250.0/24和192.168.1.212/30。对本例来说,AS 300的IGP以及路由器Tahoe的配置都不重要,重要的是Tahoe向其外部BGP对等体所宣告的前缀在Taos路由表中都显示为可达路由,并且向AS 300中的目的地发起的ping操作都正常(参见例3-18)。由于Taos的串口192.168.1.224/30没有对外宣告,因而需要使用扩展的ping。所有学习自BGP的路由在路由表中都被标记为B。

例3-18:向图3-4的AS 300中的某个地址发起ping操作,显示正常。

img131c

(待续)

img132a

img132b

图3-4在图3-3的拓扑结构中加入AS 300

尽管通过路由器Taos可以通达AS 300的网络,但是在AS 200中的内部路由器能够通达这些网络之前,必须将BGP路由宣告到EIGRP中。一种方式就是在路由器Taos上配置重分发机制,如例3-19所示。

例3-19:将BGP路由宣告到EIGRP中。

img132c

(待续)

img133a

如例3-20所示,AS 300的前缀已被宣告给了AngelFire,并且这些目的地均可达。但是对入站路由和出站路由来说,重分发的许多问题仍然存在。重分发会将每条BGP路由都宣告给IGP,但网络管理员可能希望仅重分发BGP路由中的某个子网,此时,仍然需要利用路由过滤来抑制非期望路由。


警告:不将BGP路由重分发到IGP中还有一个非常重要的原因。目前Internet全路由表大约包含80 000条前缀,如果IGP需要处理如此大量的路由会导致IGP进程出现“拥塞”,因而将所有或大部分Internert路由都重分发到IGP中,将会产生严重的网络崩溃。本章所讨论的各种重分发对前缀数量有限的企业网来说非常有用,但绝对不应该将BGP-to-IGP重分发机制应用于面向Internet的路由器当中。


例3-20:Taos将其学习自BGP的路由宣告给了EIGRP。

img133b

如果希望更加严格地控制将哪些路由宣告到AS 200中,可以使用静态路由,如例3-21所示。

例3-21:通过静态路由来控制要宣告到AS 200的路由。

img133c

(待续)

img134a

例3-21所示配置中只向AS 200宣告了192.168.250.0/24。如例3-22所示,AngelFire并不知晓子网192.168.1.212/30。利用本配置中的静态路由还可以保持AS 200的稳定性,如果AS 300中的网络192.168.250.0出现翻动现象,那么这些路由变化在被传递到Taos之后,不会被进一步传递到AS 200中。

例3-22:子网192.168.1.212/30没有被宣告给AngelFire。

img134b

当然,对单归属AS(如图3-4中的AS 200)来说,几乎没有任何理由需要将外部路由注入AS中。除非需要将精确路由注入到AS中,否则默认路由已完全足够,详见例3-23。

例3-23:在单归属AS中配置一条默认路由。

img134c

如例3-23所示,Taos生成了一条默认路由,并将该路由宣告给了所有EIGRP发言者;也可以通过配置,让BGP生产一条默认路由。如果Vial希望将默认路由宣告给其BGP邻居, 则可以按照例3-24的方式进行配置。

例3-24:将默认路由宣告给BGP邻居。

img135a

如例3-24所示,以静态方式创建了一条去往接口Null0的默认路由,并利用命令network将该路由进行了宣告。例3-24所示配置的一个假设是路由器Vail知道全部路由信息,所有数据包都被转发给了Vail,任何无法匹配到精确路由的目的地址都将匹配该默认路由,且被丢弃。

对某些设计案例来说,可能只允许将默认路由发送给部分邻居,而不是所有邻居。此时,如果只希望将默认路由从Vail发给Taos(而不是Vail的其他邻居),可以按照例3-25的方式进行配置。

例3-25:将默认路由发送给特定BGP邻居。

img135b

BGP命令neighbor default-originate与OSPF命令defaultinformation-originate always类似,无论路由器是否有默认路由都会宣告默认路由。请注意,日U一个配置中出现的静态路由在本配置中已不再出现,但是去往0.0.0.0/0的路由仍然被宣告给了Taos,如例3-26所示。此外,例3-26还显示了Tahoe的路由表,与Taos不同,Tahoe的路由表中没有0.0.0.0/0表项。

例3-26:默认路由被宣告给了Taos,但没有宣告给Tahoe。

img135c

(待续)

img136a

将默认路由器宣告给BGP邻居并不会抑制精确路由,如例3-26所示,来自AS 300的路由仍然在Taos的路由表中。有时这一点非常重要,例如,某ISP可能希望向其某个客户发送去往其他客户的路由(部分Internet路由表)以及去往Internet其余地方的默认路由,这种应用场景在多归属到同一ISP时非常有用,此时客户网络可以优选最佳路由去往该ISP的其他客户,并使用默认路由到达其他外部目的地。

如果希望仅发送默认路由,那么就需要利用路由过滤来抑制精确路由。如例3-27所示,使用了命令neighbor distribute-list,这只是过滤BGP路由的一种方法,其他方法将在3.3节进行详细论述。

例3-27:利用命令neighbor distribute-list过滤BGP路由。

img136b

3.1.4案例研究:无IGP时的IBGP

如图3-5所示,在AS 100中增加了其他路由器,该路由器通过EBGP连接到其他AS。此时,AS 100为转接AS,将承载既不是源自AS 100也不是终结于AS 100的流量。

img136c

图3-5运行了IBGP的AS 100将承载AS 400与其他两个自治系统间的转接流量

为了承载转接流量,AS 100中的内部路由器将建立全连接的IBGP,配置如例3-28所示。

例3-28:配置AS 100中的内部路由器以建立全连接的IBGP。

img137a

例3-29显示了Alta的路由表,通过多个ping操作验证了AS 200和AS 300中的目的地是可达的。

例3-29:通过AS 100中的IBGP连接将AS 200和AS 300中的路由传递给了AS 400。

img137b

(待续)

img138a

在配置图3-5所示的IBGP时,应记住以下重要内容:

•必须关闭同步机制;

•每台IBGP路由器都必须与其他IBGP路由器建立对等关系;

•必须知晓连接IBGP路由器的所有网络和子网。

如例3-28所示,已经使用命令no synchronization关闭了同步机制。回顾第2章讨论过的同步规则可知,路由器不得将IBGP路由宣告给EBGP对等体,除非已通过IGP知晓了该路由。换句话说,BGP必须与IGP实现同步。无论是重分发,还是netowork语句,都不会将路由表中不存在的路由宣告出去。

如果IBGP学习到的路由已进入路由表,那么就可以绕开同步规则。此时,重分发或netowork语句都能与路由表中的IBGP路由进行匹配并宣告该路由,即使IGP并不知道该路由。因而,当启用了同步机制之后,IBGP路由将不得进入路由表中。

例3-30显示了在启用了同步机制之后Aspen的情况。通过BGP表可以看出,虽然该路由器已经学习了所有由其IBGP对等体所宣告的全部路由,但IGP路由表却显示没有任何路由进入路由表。尽管Aspen无EBGP对等体,但转发仍会受到影响。例如,当Telluride向192.168.250.1转发数据包时,由于Aspen的路由表中没有关于该目的地的表项,因而会丢弃该数据包。

例3-30:启用了同步机制之后,通过IBGP学习到的路由不会进入路由表。

img138b

(待续)

img139a

在例3-31中,Aspen关闭了同步机制,此时IBGP路由就进入了路由表。


注意:如果要关闭正在运行的BGP进程中的同步机制,在更改生效之前必须利用命令clear ip bgp*重置BGP进程。有关该命令的用法将在3.3.1小节做详细解释。


例3-31:关闭了同步机制之后,Aspen的IBGP路由就进入了路由表。

img139b

观察图3-5以及AS 100中的路由器配置情况可以看出,3台路由器中每一台都与其他两台路由器建立了对等关系,原因是路由器不能将学习自某个IBGP对等体的路由宣告给其他IBGP对等体。例如,路由器Vail从其与Tulluride的IBGP会话中学习到了AS 400的相关地址,如果不存在该IBGP会话,Vail将无法从Aspen学习路由。Aspen也通过相应的IBGP连接从其对等体Vail和Telluride学习路由。如果Aspen没有学到这些路由,将无法在Vail和Telluride之间转发数据包。

将EBGP学习到的路由宣告给IBGP对等体时,该路由的下一跳地址将不会发生变化。观察例3-30中Aspen的BGP表就会发现,去往其他自治系统的全部路由的下一跳地址都是发起这些EBGP路由的路由器的接口地址。例如,去往192.168.200.0/24的路由的下一跳地址是192.168.1.225,即Taos的接口地址。这些下一跳地址都进入了路由表,因而所有的IBGP路由器都必须知道如何到达这些下一跳地址。在图3-5的配置中,Vail和Telluride都对去往各自EBGP对等体的链路的子网地址应用了语句network,正是有了这些语句,才使得IBGP对等体知道如何到达这些链路上的下一跳地址。

Aspen也对其两条数据链路应用了语句network,所以Telluride知道如何到达位于路由 器Vail的下一跳地址192.168.1.221,Vail也知道如何到达位于Telluride的下一跳地址192.168.1.197,这些地址对构建Vail与Telluride之间的IBGP对等会话也非常重要。如图3-5所示,虽然逻辑连接建立于Vail与Telluride之间,但IBGP会话所使用的TCP连接却穿越了Aspen,如果Vail与Telluride都不知道如何发现对方,那么将无法建立TCP连接。

使用network语句的位置也非常重要,例如,如果在路由器Vail(而不是路由器Aspen)上应用语句network 192.168.1.220 mask 255.255.255.252,那么该子网将无法通过Aspen向外宣告,Telluride也就无法知道如何到达下一跳地址192.168.1.221。

向IBGP对等体宣告路由时,EBGP路由的下一跳地址不会发生变化这一规则将不适用于相反方向。如果路由器将学习自IBGP的路由宣告给EBGP对等体,那么下一跳地址就是该宣告路由器的接口地址,即使该路由最初是从EBGP学习到的也依然如此。对比Aspen的BGP表中路由的下一跳地址(见例3-31)与Alta的BGP表中路由的下一跳地址(见例3-32),请注意,路由器Aspen显示了192.168.250.0/24的下一跳地址为位于路由器Tahoe的192.168.1.210,但路由器Alta针对同一路由的下一跳地址却是位于Telluride的192.168.1.206。事实上,路由器Alta学习自EBGP的每条路由的下一跳地址都完全一样。

例3-32:学习自EBGP的路由的下一跳地址总是宣告该路由的EBGP对等体的地址。

img140a

在向IBGP对等体宣告路由时,利用命令neighbor next-hop可以越过“EBGP路由的下一跳地址不发生变化”这一规则。例3-33解释了如何在AS 100中的路由器Vail和Telluride上使用命令neighbor next-hop。

例3-33:向IBGP对等体宣告路由时,将强制更改EBGP路由的下一跳地址。

img140b

(待续)

img141a

如例3-33所示,删除了先前在路由器Vail和Telluride上配置的network语句,由于此时这两台路由器在宣告学习自EBGP的路由时都将自己的地址作为下一跳地址,因而就不再需要network语句。例3-34显示了重配置之后路由器Aspen的BGP表。

例3-34:Vail和Telluride在向Aspen宣告学习自EBGP的路由时将自己宣告为下一跳地址。

img141b

本小节的主要目的是解释与IBGP行为相关的一些基本概念,但具体的解释方法却不完全一样。虽然在路由新闻组中可以找到许多有关“无IGP时使用IBGP”的相关讨论信息,但在实际中很少会有人这么做。如果确实这么做了,将会发现这样的部署方式。例如,本小节所示案例中就在配置中应用了network语句,这样内部路由器就能知道如何到达外部的下一跳地址。现实生活中的IBGP部署方式,要么使用next-hop-self功能,要么在外部接口上运行被动模式的IGP,偶尔使用的第三种选项就是将所连接的接口重分发到AS边界路由器的IGP中,但这种配置方式是一种非常笨拙的方法,一般不推荐使用。

更重要的是,IGP还能增强TCP会话(IBGP运行于TCP会话之上)的健壮性,当然也就能增强IBGP本身的健壮性。下面各小节将给出各种更为现实的BGP配置案例。

3.1.5案例研究:IBGP作用于IGP之上

如图3-6所示,重新配置了AS 100中的路由器。在图中所示的拓扑结构中,OSPF作为自治系统的IGP, IBGP仅运行于路由器Vail和Telluride之间。

例3-35显示了AS 100中的3台路由器的配置情况。

例3-35:AS 100中的路由器Vail、Aspen和Telluride的配置情况。

img141c

(待续)

img142a

img142b

图3-6在AS 100的路由器中增加了OSPF

在BGP配置中,启用了同步机制,EBGP路由被重分发到OSPF中(由于同步机制是默认启动功能,因而配置中无任何相关命令),这两个配置步骤是保证IBGP链路正确运行所必不可少的。此处的重分发所起的作用与前面案例研究中IBGP链接到路由器Aspen的作用相同,如果Aspen接收到一个源自AS 400、目的地是AS 200的数据包,那么就不知道该路由,将丢弃该数据包。

同步机制可以保证重分发工作的正确性。例如,假设去往192.168.100.0/24的路由没有被重分发到路由器Vail的OSFP中,那么将不会显示在路由器Telluride的路由表中。虽然Telluride从IBGP连接中知晓了该路由,但由于该路由没有位于其路由表中,因而无法将该路由宣告给Alta,致使没有任何去往该目的地的流量能从AS 400被转发到AS 100。当然,如果从AS 400到AS 100还有其他可选路径(图3-6中没有画出),那么就可以使用该路进。

例3-36显示了Telluride的BGP表和路由表,例3-37显示了Alta的路由表。注意观察 Telluride的配置信息就可以看出,没有从OSPF向BGP重分发任何路由,也没有应用BGP network语句。所有必需的路由都已存在于Telluride的BGP表中,而且这些路由也是要宣告给Alta的路由,Telluride路由表中的路由仅仅是为了满足同步的需要。

例3-36:图3-6中路由器Telluride的BGP表和路由表。

img143a

例3-37:图3-6中的路由器Alta的路由表。

img143b

图3-6所示的拓扑结构中存在一个非常严重的脆弱性,如果Aspen或其任一链路出现故障,AS 400将与其他互联网络失去网络连接。如图3-7所示,为了提高冗余性,在Vail和 Telluride之间增加了一条链路,并通过该链路建立了第二条IBGP会话。

img144a

图3-7在Vail和Telluride之间增加了一条新链路和第二条IBGP会话,以实现冗余性

例3-38显示了路由器Vail和Telluride的配置情况。

例3-38:AS 100中的路由器Vail和Telluride的配置情况。

img144b

例3-39显示了Telluride的BGP表情况,所有学习自Vail的路由都指示了两个下一跳地址,表示两个IBGP连接。A>表示当前使用的路径,如果该链路出现故障,则可以使用另一条链路。

例3-39:通过Telluride的路由表可以看出,为来自Vail的路由都提供了备选路径。

img144c

img145a

尽管图3-7所示的网络配置提供了冗余性机制,但故障倒换却很慢。默认情况下,BGP保持激活间隔为60秒,保持时间为180秒(如例3-40所示),在BGP检测到IBGP连接出现故障并切换到其他链路之前,很有可能已经超出了180秒。利用命令timers bgp可以重置BGP保持激活间隔和保持时间,从而改善故障倒换时间。例如,timers bgp 3 9可以将保持激活间隔设置为3秒,将保持时间设置为9秒。

例3-40:默认的BGP保持激活时间为60秒,默认的保持时间为180秒。

img145b

图3-8显示了一种更好的提供冗余机制的方法,此时不再通过备选路径创建两个IBGP会话,而是在路由器的环回接口之间创建单个IBGP会话。OSPF的作用是为IBGP会话找出最佳路径,并且在链路出现故障时可以更快地重路由IBGP会话。

img145c

图3-8在路由器Vail和Telluride的环回接口之间创建单个IBGP会话

例3-41显示了图3-8下的路由器Vail和Telluride的配置情况。

例3-41:在路由器Vail和Telluride的环回接口之间配置单个IBGP会话。

img146a

除了创建环回地址这个非常明显的不同之外,这些配置之间的重要区别就是语句neighbor update-source,该命令让BGP消息被溯源至环回接口的IP地址,而不是消息被发出的物理接口的IP地址。如果没有该语句,那么TCP会话的TCP源将成为出站接口的地址,TCP会话的端点将无法匹配,而且也无法到达。另一个重要区别就是OSPF下的network语句,该语句的作用是宣告环回地址;如果没有该语句,该地址将不可达,而且也无法创建IBGP会话。例3-42显示了重新配置后的Telluride的BGP表。

例3-42:来自Vail的路由的下一跳地址是Vail的环回地址。

img146b


注意:虽然本小节的案例中,利用BGP-to-IGP重分发机制可以更好地解释基本的IBGP行为,但值得一提的是,此时将会从外部BGP对等体接收到大量路由,将BGP路由重分发到IGP中将是一件很危险的事情。在与图3-8相似的网络拓扑中,最安全的方法就是配置全网状的IBGP连接——即在AS 100中的全部3台路由器的环回接口之间建立IBGP会话。之后,Aspen就可以学习到直接从BGP转发来的数据包的必要信息,并且无需部署重分发机制。


3.1.6案例研究:EBGP多跳

如前所述,正如可以在路由器的环回接口之间建立IBGP会话一样,也可以在环回接口之间建立EBGP会话,图3-9就显示了这样的EBGP会话。此时,Telluride和Alta之间的EBGP会话端点是环回接口。

img147a

图3-9在Telluride和Alta的环回接口之间建立EBGP会话

例3-43显示了图3-9中路由器Telluride和Alta的初始配置。

例3-43:在路由器Telluride和Alta的环回接口之间建立EBGP会话的配置情况。

img147b

请注意,每台路由器都配置了静态路由,这些静态路由的目的是让每台路由器都知道如何发现其邻居的环回接口的地址,以便建立TCP会话。前一个案例研究中,在OSPF中配置network语句的作用与此一样。在本应用场景下,由于路由器之间没有运行IGP,因而需要使用静态路由。在检测和排除IBGP故障时,请务必记住,在建立IBGP会话、交换BGP路由之前,IBGP路由器必须知道如何发现它们的对等体,如果两个IBGP邻居未建立对等关系,那么首先需要做的就是检查这两台路由器是否知道如何到达对方。

不幸的是,邻居们并不能总是按照配置所示的那样建立对等关系。例3-44提供了该问题的线索,高亮显示的配置行表明邻居之间没有直连。环回接口的地址确实没有直连,这也是需要静态路由的原因,但BGP所指出的这个事实却非常重要。

例3-44:show ip bgp neighbors输出结果显示Telluride到Alta的EBGP连接未建立。

img148a

重要之处就在于,虽然可以通过多跳路由器创建IBGP连接,但在默认情况下,EBGP邻居必须是直连的。如图3-9所示,源自Alta环回接口的数据包必须被路由到串行接口,而对Telluride来说,数据包必须要从串行接口路由环回接口。换句话说,TCP包必须穿越环回接口之间的两跳路由。

启用命令neighbor ebgp-multihop之后,通过更改EBGP包的TTL默认值1,可以克服EBGP的一跳限制。例3-45解释了命令neighbor ebgp-multihop的使用情况,并将EBGP包的TTL更改为2。

例3-45:利用命令neighbor ebgp-multihop来克服Alta和Telluride之间的一跳EBGP限制。

img148b

img149a

例3-46给出了配置变更后的输出结果。可以看出,已经建立了EBGP会话,而且给出了新的跳数限制。

例3-46:命令show ip bgp neighbors显示已经与Alta建立了EBGP连接。

img149b

与IBGP通常在环回接口之间配置不同,大多数EBGP会话都是在直连接口上进行配置的,因而并不会经常使用ebgp-multihop。当两个外部邻居之间有多条冗余直连链路(如多条ATM或帧中继虚电路)时,在环回接口之间配置EBGP就非常有用。因为此时仅希望有一个EBGP会话,在EBGP所使用的链路出现故障后,EBGP会话还可以重路由到备用链路。

3.1.7案例研究:聚合路由

如图3-10所示,AS 100包含了8个C类地址,所有这些地址都可以被聚合为192.168.192.0/21。Stowe通过EIGRP学习内部网络路由,并通过EBGP向Sugarbush宣告聚合路由。

BGP下有两种聚合地址创建方式:第一种方式是在路由表中为聚合地址创建静态表项,之后再利用network命令宣告该聚合地址;第二种方式是使用命令aggregate-address。

1.利用静态路由进行聚合

例3-47示范了如何使用静态路由项为Stowe创建聚合地址,并使用命令network宣告该聚合地址。

img149c

图3-10 AS 100的所有内部网络都能被聚合为单一地址192.168.192.0/21

例3-47:在BGP下使用静态路由项及命令network创建聚合地址。

img150a

由于聚合地址本身并不是合法的终端目的地址,因而静态路由指向Null接口,该路由在Stowe路由表中仅代表一条精确路由。如果数据包的目的地址属于AS 100的C类地址,那么AS 100的外部路由器将匹配该聚合地址并转发给Stowe,到了路由器Stowe之后,数据包将被匹配到更精确的地址,并被转发到正确的内部下一跳路由器。如果因某种导致更精确的C类地址不在Stowe路由表中的话,将把该数据包转发到Null接口并予以丢弃。

例3-48显示了Stowe和Sugarbush的BGP表,Stowe的BGP表中只有这么一条聚合地址,路由器的BGP配置使得任何其他地址都没有进入BGP表。

例3-48:Stowe和Sugarbush都仅包含了一条聚合路由。

img150b

2.抑制精确路由

对图3-10所示的简单拓扑结构来说,前面所说的聚合地址创建方式已经足够了。但是,随着拓扑结构和路由策略复杂程度的提高,命令aggregate-address提供的配置选项会更有用,本案例研究的后半部分将主要介绍命令aggregate-address及其配置选项。

要想宣告由aggregate-address指定的聚合地址,必须通过重分发或network命令要求聚合地址中至少有一个更精确的地址进入BGP表。例3-49示范了如何利用aggregate-address和重分发机制配置Stowe。

例3-49:在BGP下利用命令aggregate-address创建聚合地址。

img150c

img151a

例3-50显示了Stowe和Sugarbush的BGP表情况,本例中Stowe的BGP表与例3-48中的有很大不同。此时,表中包含了全部精确路由,但Sugarbush的BGP表却仍然保持不变,仅被宣告了聚合地址。

例3-50:Stowe的BGP表中包含了全部精确路由,而Sugarbush仅被宣告了聚合地址。

img151b

Stowe BGP表中精确路由左侧的状态代码表示这些路由都被抑制了,原因在于应用命令aggregate-address时使用了summary-only选项。如果没有该选项,则将同时宣告聚合路由和这些精确路由。

3.宣告聚合路由和精确路由

对于像图3-10所示的简单拓扑结构来说,同时宣告聚合路由和精确路由没有任何意义,但这种情况对图3-11所示的应用场景却非常有用。此时,AS 100多归属到AS 200,AS 200需要从AS 100接收全部路由以设置路由策略,但AS 200仅能向AS 300发送聚合路由。

img151c

图3-11 AS 100多归属到AS 200

虽然宣告了AS 100的精确路由,但是在发送给AS 200时携带了值为NO_EXPORT的COMMUNITY属性。如第2章所述,携带该属性的路由不能发送给EBGP对等体,因而虽然AS 200知道这些路由,但不会宣告给AS 300,宣告给AS 300的只有那些未携带COMMUNITY NO_EXPORT属性的聚合路由。例3-51显示了Stowe的配置情况,Mammoth的配置与此类似(将在本小节后面内容中描述)。

例3-51:配置Stowe以同时宣告聚合路由和精确路由。

img152a

如上例所示,命令aggregate-address中删除了关键字summary-only,因而可以向AS 200同时宣告聚合路由和精确路由;命令neighbor 192.168.1.253 send-community指定将COMMUNITY属性发送给Sugarbush;命令neighbor 192.168.1.253 route-map COMMUNITYout通过名为COMMUNITY的路由映射过滤BGP出站路由。如果路由映射与访问列表101的更新相匹配,则不会设置COMMUNITY属性;如果路由与访问列表101不匹配,则该路由的COMMUNITY属性将被设置为NO_EXPORT。

读者可能会对access-list 101的用法感到陌生。通常情况下,扩展IP访问列表中指定的第一个IP地址是源地址,第二个地址是目的地址,而本案例中的第一个地址是路由前缀,第二个地址是前缀的掩码,使用这种访问列表的原因是必须精确指定前缀。如果使用了access-list 1 permit 192.168.192.0 0.0.7.255,那么将同时匹配聚合地址192.168.192.0/21和精确路由192.168.192.0/24。

例3-52给出了Sugarbush的BGP表,可以看出,表中包含了聚合路由和精确路由。此外,还使用了命令show ip bgp community no-export,以显示携带NO_EXPORT COMMUNITY属性的路由情况,列出了Stowe除聚合路由外的其他全部路由。

例3-52:Sugarbush的BGP表中包含了聚合路由和精确路由,除聚合路由外,Stowe的其他全部路由都携带了NO_EXPORT COMMUNITY属性。

img152b

(待续)

img153a

例3-53:显示了Burke的BGP表,除聚合路由之外没有宣告任何路由。

例3-53:Burke的BGP表中仅包含聚合路由。

img153b

Mammoth做出了与Stowe相同的路由宣告。出于示范目的,例3-54中采用了不同的配置方式来实现相同的目的,即对Mammoth使用了IP前缀列表(而不是访问列表)。

例3-54:图3-11中的Mammoth配置。

img153c

(待续)

img154a

与路由映射相似,前缀列表也是以名字而不是数字进行标识的。如例3-54所示,前缀列表的名字为AGGREGATE,列表中的每行都用一个序列号(seq)来标识该行在多行列表中的位置,以方便编辑。如果在录入前缀列表时没有输入序列号,Cisco IOS Software会自动按照顺序为当前录入的行加入一个序列号。在关键字permit|deny之后,需要指定一个前缀及前缀长度。

如例3-54所示,Mammoth配置中的前缀列表与192.168.192.0/21完全匹配。当然,也可以增加配置选项以匹配一段前缀,如命令ip prefix-list AGGREGATE seq 5 permit 192.168.192.0/21 ge 24将匹配所有前21bit与192.168.192.0相匹配,且长度大于等于24bit的前缀,该行将匹配AS 100中的所有精确路由。另一方面,关键字le用于匹配长度小于等于指定bit数的前缀。

Diamond的BGP表与Sugarbush非常相似,聚合路由和精确路由都在表中。除了来自Sugarbush的聚合路由之外,例3-53中Burke的BGP表显示了该聚合路由也被Diamond宣告了。例3-55详细列出了Diamond的聚合路由和其中的一条精确路由,可以看出,聚合路由未携带任何COMMUNITY属性(尽管聚合路由有ATOMIC_AGGREGATE和AGGREGATOR属性集),而精确路由则携带了COMMUNITY属性。

例3-55:详细分析Diamond BGP表中的两条路由的属性情况。

img154b

(待续)

img155a

4。宣告聚合路由和选定的精确路由

在前面的应用场景中,向AS 200发送了AS 100的精确路由,从而让AS 200能实施其路由策略。也就是说,AS 200可以利用这些路由对发往AS 100的流量设置路由优先级,AS 100通过控制其出站宣告也可以影响其入站流量。例如,通过Stowe/Sugarbush链路而不是Mammonth/Diamond链路进行路由宣告可以让入站流量使用Stowe/Sugarbush链路,在AS具有多样化的地理分布特征时,管理员可能就希望实施这样的路由策略。例如,Stowe可能位于佛蒙特,而Mammoth则位于加利福利亚,此时,管理员可能希望入站流量使用最靠近目的地的入口点,从而最大程度地减少内部路由选择操作。

为了完成上述目的,下面列出了需要在图3-11中的AS 100上应用的路由策略。

•通过Stowe/Sugarbush链路宣告192.168.192.0/24、192.168.193.0/24和192.168.194.0/24。

•通过Mammonth/Diamond链路宣告192.168.196.0/24、92.168.197.0/24和192.168.198.0/24。

•不宣告192.168.195.0/24和192.168.199.0/24。

•通过上述两条链路宣告聚合路由以做备用,在任一条链路出现故障的情况下,所有的入站流量都可以被路由到另一条链路。

为了抑制聚合路由的子网,需要在aggregate-address命令中使用选项suppress-map,例3-56给出了上述路由策略在Stowe和Mammoth上的配置情况。由于COMMUNITY路由映射及EIGRP的配置与前面一小节完全一致,因而本例不再重复列出。

例3-56:在aggregate-address命令中使用选项suppress-map抑制选定的前缀。

img155b

(待续)

img156a

Stowe的配置中使用了一个名为VERMONT的路由映射,用于确定要抑制的路由,而路由映射又反过来使用了access-list 1来标识适当的路由。该访问列表允许前缀192.168.195.0/24及所有前22bit与192.168.196.0/22相匹配的前缀,其他所有前缀则与访问列表最后隐含的”拒绝所有”相匹配,因而没有被抑制。


注意:理解路由映射的逻辑有时很痛苦,在上面的这个案例中,被访问列表所拒绝的路由是“拒绝以免被抑制”,也就是说,允许宣告该路由。相反,那些被访问列表所允许的路由则是“允许以便被抑制”,也就是说,不允许宣告这些路由。


Mammoth的配置中使用了一个名为CALIFORNIA的路由映射,用于确定要抑制的路由。Mammoth使用前缀列表(而不是访问列表)来标识适当的路由。前缀列表中的序列5允许所有前22bit与192.168.192.0/22相匹配,且长度小于等于24的前缀,序列10则允许前缀192.168.199.0/24。带有这些前缀的路由宣告都将被抑制,而其他被前缀列表隐式拒绝的路由则不受抑制。

例3-57显示了Sugarbush和Diamond的BGP表情况。例如,Sugarbush将去往192.168.193.0/24的数据包转发给了Stowe(192.168.1.254),而将去往192.168.196.0/24的数据包转发给了Diamond(192.168.1.237);Diamond反过来又将去往192.168.196.0/24的数据包路由给了Mammoth(192.168.1.245)。Stowe和Mammoth都在宣告聚合路由,当某条链路出现故障时,正常情况下通过该链路转发的数据包将通过另一条链路来匹配聚合路由。

例3-57:BGP表显示Stowe和Mammoth都宣告了AS 100中精确路由的不同子网,但同时宣告了聚合路由。

img156b

(待续)

img157a

5.更改聚合路由的属性

命令aggregate-address的另一个可用选项是attribute-map,该选项可以更改聚合路由的属性。如例3-57所示,由于精确路由都是从EIGRP重分发到BGP中的,因而这些精确路由都携带值为Incomplete(不完全的)的ORIGIN属性。但是,由于聚合路由都源自Stowe和Mammoth的BGP进程,因而这些聚合路由的源都是IGP。假设管理员希望AS 200通过Mammoth/Diamond链路沿着聚合路由来传递全部流量,而将Stowe/Sugarbush链路作为备用链路。如第2章所述,对去往同一目的地的两条路由来说,BGP决策进程将优选ORIGIN为IGP的路由,次选ORIGIN为Incomplete(不完全的)的路由。如果Stowe将其聚合路由的ORIGIN更改为Incomplete(不完全的),那么AS 200中的路由器将优选Mammoth/Diamond链路。例3-58给出了此时的Stowe配置情况。

例3-58:Stowe将其聚合路由的ORIGIN更改为Incomplete(不完全的)。

img157b

例3-59显示了Sugarbush的BGP表情况。在重新配置之前,Sugarbush优选学习自EBGP的聚合路由,次选学习自IBGP的聚合路由(参见例3-57)。但是由于在BGP决策进程中,ORIGIN属性的优先级要高于IBGP/EBGP,因而选择了来自Diamond、ORIGIN为IGP的IBGP路由。

有趣的是,重新配置Sugarbush后还会影响AS 300中的路由选择。如例3-60所示,Sugarbush的优选路由是IBGP路由,由于启用了同步机制,因而不会将该IBGP路由宣告给EBGP对等体Burke,这样一来,Burke仅能学习到来自Diamond的聚合路由。

例3-59:由Stowe(192.168.1.254)宣告的聚合路由的ORIGIN为Incomplete(不完全的),由Diamond宣告且源自Mammoth的聚合路由是优选路由。

img158a

例3-60:只有Diamond将聚合路由宣告给Burke。

img158b

6。为聚合路由使用AS_SET

图3-12中的互联网络是对图3-11进行修改后的版本,同时还修改了聚合地址的源。AS 100和AS 200都将AS 100的全部路由宣告给了AS 300和AS 400,没有做任何聚合。

img158c

图3-12 Burke创建了一个聚合路由并宣告给了Sun

AS 300中的路由器Burke抑制了AS 100的精确路由并将聚合路由发送给AS 400中的Sun。例3-61中的Burke配置与本案例研究中已经看到过的配置非常相似。

例3-61:Burke被配置成抑制AS 100的精确路由并向AS 400中的Sun发送聚合路由。

img159a

例3-61中Burke的配置与先前看到的配置之间的一个不同之处就是命令neighbor distribute list的使用。该命令实现了一个路由过滤器,且操作方式与《TCP/IP路由技术(第一卷)》中讨论的命令distribute-list一致。本例中的路由过滤器是为了防止将聚合路由重新宣告回Sugarbush。

例3-62显示了Sun的BGP表情况。正如所预料的那样,Sun的BGP表中包含了来自Sugarbush的精确路由以及来自Burke的聚合路由。对本案例研究来说,需要关注的是与聚合路由相关的AS_PATH属性。聚合路由的AS_PATH属性的AS_SEQUENCE以发起该聚合路由的AS为起始,由于该聚合路由是由Burke发起的,因而AS_SEQUENCE中仅包含AS 300,但该聚合路由实际指向的却是AS 100。与所有路由汇总一样,路由聚合会丢失大量的路由选择信息。

例3-62:来自Burke的聚合路由的AS_PATH中仅包含AS 300(即发起该聚合路由的AS)。

img159b

如例3-63所示,Burke在聚合路由中设置了ATOMIC_AGGREGATE和AGGREGATOR属性,以指示出现了信息丢失。

例3-63:Burke在聚合路由中设置了ATOMIC_AGGREGATE和AGGREGATOR(由AS300 192.168.1.250聚合)属性,以指示出现了信息丢失。

img159c

在图3-12所示的拓扑结构中,路径信息的丢失会出现一个问题。与Burke不同,Sun并 没有路由过滤器来防止将聚合路由宣告给Sugarbush, Sugarbush在接收到来自Sun的聚合路由后,由于发现自己的AS号没在AS_PATH中,因而将该聚合路由加入自己的BGP表中(如例3-64所示)。

例3-64:由于Sugarbush未发现自己的AS号位于AS_PATH中,因而接受来自Sun的聚合路由。

img160a

如果来自AS 100的某条精确路由失效,则Sugarbush将会丢弃所有去往那个网络的数据包。但是如果有聚合路由,那么这些数据包将会被匹配到该聚合路由上。例如,假设去往AS 100中192.168.197.0/24网络的接口出现故障,那么Stowe将宣告该情况,导致所有BGP表都将删除去往该目的地的路由;接着,Sugarbush收到一个目的地址为192.168.197.5的数据包,由于没有找到精确路由,因而将该目的地匹配到聚合路由并将数据包转发给Sun;同样,Sun也没有找到精确路由,因而又将该目的地匹配到聚合路由并将数据包转发给Burke;由于Burke是该聚合路由的发起者,也没有精确地址,因而丢弃该数据包。这样一来,发往无效目的地的数据包在被正确丢弃前仍然要无谓地经过两跳额外的路由器进行转发。如果Sugarbush将聚合路由宣告给了Burke,那么问题将更加严重,此时不再是数据包被延迟丢弃,而是将出现路由环回,直至TTL到期。

为了解决这个问题,Burke除了可以将AS_SEQUENCE作为AS_PATH属性的一部分,还可以在aggregate-address语句中增加关键字as-set来宣告AS_SET。如第2章所述,AS_SET是一个去往精确地址(组成聚合路由)路径上的无序的AS号列表,与AS_SEQUENCE不同,AS_SET不用于确定最短路径,其作用仅仅是恢复聚合路由中丢失的环路检测功能。

例3-65给出了Burke宣告AS_SET的配置情况。

例3-65:配置Burke以宣告AS_SET。

img160b

例3-66给出了Sun的BGP表情况,去往精确地址路径上的所有AS号都包含在聚合地址中的AS_PATH中。这样一来,当聚合路由被宣告给Sugarbush时,Sugarbush就可以发现 其AS号200位于AS_PATH中,因而会拒绝接受该路由。

例3-66:路由器Burke在AS_PATH属性中包含AS_SET后,去往精确地址路径上的所有AS号都将包含在聚合地址中。

img161a

在宣告AS_SET时非常重要的一点是,聚合路由将继承所有被聚合路由的属性。如图3-12所示,所有精确路由的AS_PATH是(300,200,100),因而AS_SET是以一个有序列表的方式出现在Sun的BGP表中,与AS_SEQUENCE没有任何区别。

图3-13给出了一个不同的拓扑结构,图中增加了一个新的AS,网络192.168.197.0/24从AS 100迁移到了AS 500。虽然Burke仍然能接受到同样的路由,但现在并不能匹配所有的AS_PATH属性,因而此时的AS_SET将被宣告为一个无序列表(如例3-67所示)。

img161b

图3-13网络192.168.197.0/24从AS 100迁移到了AS 500,此时Burke无法再将AS_SET表示为一个有序列表

例3-67:与AS_SEQUENC的有序形式不同,此时的AS_SET以一个无序列表的形式出现在Sun的BGP表中。

img161c

(待续)

img162a

7.基于选定的精确路由构建聚合路由

在宣告带有AS_SET的聚合路由时,有时可能希望聚合路由不要继承所有被聚合路由的属性。如图3-14所示,Sugarbush收到了所有来自AS 100和AS 500的路由,并向Burke宣告了一条聚合路由。

img162b

图3-14 Sugarbush在宣告携带AS_SET属性的聚合路由时,要求聚合路由不继承192.168.197.0/24的NO_EXPORT COMMUNITY属性

在配置图3-14时出现的一个问题是,AS 500在宣告192.168.197.0/24时携带了NO_EXPORT COMMUNITY属性,Sugarbush使用了AS_SET选项后,聚合路由将继承NO_EXPORT属性(如例3-68所示)。请注意,此处的NO_EXPORT属性仅仅在本地传递给了聚合路由,并没有被加入到聚合路由的宣告中。因而Sugarbush将接受该属性,不向外宣告该属性。

例3-68:命令show ip bgp community no-export显示了所有携带NO_EXPORT COMMUNITY属性的路由,此时聚合路由继承了被聚合地址中192.168.197.0/24的属性。

img162c

命令aggregate-address的最后一个选项是advertise-map,用于选择聚合路由所基于的精确路由。如图3-14所示,如果Sugarbush在构建聚合路由时不考虑192.168.197.0/24,那么 聚合路由将不继承该路由的相关属性,例3-69显示了Sugarbush在命令aggregate-address中使用advertise-map选项的配置情况。

例3-69:配置Sugarbush以选择聚合路由所基于的精确路由。

img163a

例3-69中的选项advertise-map指向了一个名为ALLOW_ROUTE的路由映射(标识了聚合路由所基于的精确路由),而该路由映射又反过来指向access-list 1(拒绝192.168.197.0/24且允许其他所有路由)。由于Sugarbush在构建聚合路由时忽略了192.168.197.0/24,因而形成的聚合路由不会继承192.168.197.0/24的NO_EXPORT属性(如例3-70所示)。

例3-70:利用advertise-map选项重新配置Sugarbush之后,聚合路由不再包含NO_EXPORT属性。

img163b

在限制聚合路由所基于的精确地址前缀时可能会存在一些问题。在图3-14所示的互联网络及其相关配置中,假设Stowe与Sugarbush间的链路出现故障,如果聚合路由仅基于来自AS 100的前缀,那么就无法再对外进行宣告,因而从AS 300及以外将无法到达AS 500中的目的地。