BGP联盟和路由反射器

解决黑洞问题的一种方法是简单地使用BGP将所有BGP学习的前缀通告给AS中的所有路由器。因为所有路由器都知道前缀,所以可以安全地禁用同步。

缺点是在所有路由器上都引入了BGP,并且在每对路由器之间增加了iBGP邻居连接。(在具有N个路由器的AS中,将需要N(N –1)/ 2个邻居连接。)对于大型自治系统,由于对等体数量众多,BGP性能和收敛时间会降低。

BGP在AS内需要完整的iBGP 对等体网状网络, 因为BGP不会将iBGP路由(从一个iBGP对等体学到的路由)通告给另一个iBGP对等体。此附加限制有助于防止路由环路,但是它需要完整的iBGP对等体,否则,只有iBGP对等体的子集才能学习每个前缀。

BGP提供了两种工具(联盟和路由反射器),它们可以减少AS内的对等连接的数量,防止环路并允许所有路由器了解所有前缀。接下来将介绍这两个工具。

联邦

RFC 5065中所定义,使用BGP联盟 的AS将AS中的每个路由器分隔为几个联盟亚自治系统之一。同一子自治系统内部的对等体被视为联盟iBGP对等体,而不同子自治系统中的路由器被视为联盟eBGP对等体。

联盟将路由传播到所有路由器,而整个AS内部没有完整的对等体。为此,联盟eBGP对等连接在某些方面像真正的eBGP对等一样。

在单个子自治系统中,联盟iBGP对等体必须完全网格化,因为它们的行为与普通iBGP对等体完全相同,也就是说,它们之间不会相互通告iBGP路由。但是,联盟eBGP对等方的行为类似于eBGP对等方,因为它们可以将在联盟子自治系统内部学习到的iBGP路由发布到另一个联盟子自治系统中。

联盟通过使用AS_PATH PA防止联盟AS内部出现循环。联盟中的BGP路由器将子自治系统添加到AS_PATH中,作为称为AS_CONFED _SEQ的AS_PATH段的一部分。AS_PATH包含多达四个不同的组件,称为段:

  • AS_SEQ
  • AS_SET
  • AS_CONFED_SEQ
  • AS_CONFED_SET

就像AS_SEQ和AS_SET组件有助于防止自治系统之间的循环一样,AS_CONFED_SEQ和AS_CONFED_SET也有助于防止联盟自治系统中的循环。

在联盟eBGP对等方可以将iBGP路由发布到另一个子AS之前,路由器必须确保目标子AS不在AS_PATH AS_CONFED_SEQ段中。

BGP联盟范例

在下图中,子ASN 65001中的路由器学习了一些路由,然后将这些路由发布给子ASN 65002和65003。这两个子ASN中的路由器将这些路由相互发布。但是,由于AS_CONFED_SEQ,它们从不将路由重新发布到子ASN 65001中的路由器,如图中括号所示。

BGP联盟拓扑

上图描绘了一个详细的示例,下表中的步骤与图中用圆圈数字概述的步骤相匹配:

  1. R45注入21.0.0.0/8,并通过eBGP通告给AS123。此路由的AS_PATH为45。
  2. R3通过其两个iBGP连接发布前缀;但是,由于子自治系统内部的iBGP规则,R1和R2不会尝试将此前缀相互通告。
  3. 子AS 65001中的路由器使用类似eBGP的逻辑向其联盟eBGP对等体通告21.0.0.0/8,但首先,他们将自己的子AS注入AS_PATH AS_ CONFED_SEQ段中。如图所示,AS_PATH的此部分显示在show ip bgp命令的输出中的括号内。
  4. 在其他两个亚自治系统中,分别发生与步骤2中相同的过程。
  5. 在将它们各自的ASN添加到AS_CONFED_SEQ之后,R6和R9相互通告路由。
  6. 删除AS_PATH的sub-AS部分后,R9通过真正的eBGP连接发布前缀。

在这些步骤结束时,ASN 123内部的所有路由器都了解了21.0.0.0/8前缀。同样,ASN 678(在这种情况下为R77)了解到具有相同前缀的路由,该路由有效且不会产生黑洞效应。实际上,从ASN 678的角度来看,它看到一条似乎通过ASN 123和45的路由。 另请注意,子AS 65002和65003中的路由器不会将前缀通告回AS 65001,因为AS 65001已在联盟AS_PATH中。 在这种情况下,子ASN 65001、65002和65003的值选择不是巧合。ASN 64512到65535是专用ASN,用于在ASN不会发布到Internet或其他自治系统的情况下使用。 通过使用私有ASN,联盟有望避免以下类型的问题。想象一下,子AS 65003改用了ASN45。AS_PATH循环检查将检查整个AS_ PATH。 结果,上图中所示的前缀将永远不会被通告给子自治系统45,反过来也不会被通告给ASN678。使用专用ASN可以避免此问题。

路线反射器

路由反射器(RR)达到与上述联盟相同的结果。它们消除了对完整iBGP对等体的需求,允许AS中的所有iBGP路由器学习所有iBGP路由,并防止出现环路。

在使用RR的iBGP设计中,定义了iBGP对等体的部分网格。一些路由器被配置为RR服务器。允许这些服务器从其客户端学习iBGP路由,然后将其通告给其他iBGP对等体。

下图中的示例显示了RR使用的关键术语和一些核心逻辑。请注意,只有RR服务器本身使用不同的逻辑,客户端和非客户端充当普通的iBGP对等方。

BGP路由反射器

上图显示了如何使用以下步骤通过AS传播前缀11.0.0.0/8:

  1. R11使用eBGP学习11.0.0.0/8。
  2. R11使用普通的iBGP规则,并将更新发送到R1。
  3. R1通过向所有其他客户端发送更新来反映路由。
  4. R1还反映了到所有非客户端的路由。
  5. 非客户端使用非RR规则,通过eBGP向R77发送更新。

只有充当RR的路由器才使用修改后的规则。其他路由器(客户端非客户端)甚至都不了解RR,也没有更改其操作规则。

下表总结了RR操作的规则,这些规则根据RR接收前缀的BGP对等体类型而有所不同。该表列出了可从中获知前缀的来源,以及路由反射器将向其反映前缀信息的其他路由器的类型。

表格1

RR不反映路由的一种情况是,当RR从非客户端收到路由时,RR没有将该路由反映到其他非客户端。该逻辑背后的观点是,RR与具有非客户端和eBGP邻居的普通iBGP对等体一样。

换句话说,RR不会将通过iBGP学习的路由转发给其他非客户端iBGP对等体。RR行为方式的差异与客户端向RR发送前缀或何时RR决定向客户端反映前缀有关。

一台(或多台)RR服务器及其客户端创建一个RR群集。使用RR的BGP设计可以包括

  • 集群中具有多个RR的集群
  • 多个群集,尽管仅当也存在物理冗余时才使用多个群集


RR集群

对于多个群集,每个群集中的至少一个RR必须与至少一个RR对等。通常,所有RR都是直接对等的,从而在RR之间创建了完整的RR iBGP对等体。

另外,如果某些路由器是非客户端的,则应将它们包括在完整的RR网格中。下图显示了该概念,每个RR与其他群集中的其他RR以及与非客户端完全啮合。

RR集群

如果您将表1中的逻辑汇总与上图进行比较,则看来此设计不仅可能而且可能实现路由循环。但是,RR功能使用多种工具来防止循环,如下所示:

  • CLUSTER_LIST: RR在发送更新之前将其群集ID添加到称为CLUSTER_LIST的BGP PA中。当RR收到BGP更新时,它们会丢弃已收到其集群ID的已接收前缀。与用于联盟的AS_PATH一样,这可以防止RR在群集之间循环广告。
  • ORIGINATOR_ID:此PA列出第一个将要向AS通告路由的iBGP对等体的RID。如果路由器在收到的路由中看到自己的BGP ID作为ORIGINATOR_ID,则它不会使用或传播该路由。
  • 仅发布最佳路由:只有当RR将路由视为其自己的BGP表中的“最佳”路由时,RR才会反映路由。这进一步限制了RR反映的路由。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁