企业内部BGP

当企业使用多个路由器连接到Internet,并且这些路由器使用BGP与ISP交换路由信息时,这些路由器也需要彼此交换BGP路由。BGP邻居关系发生在该企业内部(在单个AS内部),从而使这些路由器成为iBGP对等体。

本文首先介绍了为什么两个连接Internet的路由器需要具有iBGP邻居关系。然后,本文介绍了各种iBGP配置和验证命令。最后,讨论转向解决iBGP对等点之间的下一跳可达性时出现的常见问题,并研究了克服该问题的选项。

带两个Internet路由器的iBGP

通过iBGP对等连接,每个与Internet相连的路由器都可以从另一台路由器学习路由,并确定另一台路由器是否具有到达Internet目的地的更好的路由。没有该iBGP连接,路由器将无法知道另一台路由器是否具有更好的BGP路径。

例如,考虑下图,该图显示了两种情况。

iBGP对等体
图1

该图显示了按照ISP1和ISP3的约定使用以下设计选项的拓扑:

  • ISP1发送完整的路由更新和默认路由。
  • ISP3发送部分更新和默认路由。

首先,考虑eBGP路由更新,尤其是图中突出显示的两个前缀。ISP1和ISP3都知道181.0.0.0/8的路由,但是ISP3与企业的协议是ISP3发送部分更新。

这通常意味着ISP3发送其自己的自治系统编号(ASN)中前缀的更新,以及为其ASN附加的客户的前缀,例如192.135.250.0/28。ISP1,但是,发送完整的更新。因此,E1为181.0.0.0/8和192.135.250.0/28都学习了eBGP路由,但是路由器E2仅为192.135.250.0/28学习了eBGP路由。

接下来,仔细看看E1和E2上181.0.0.0/8的路由。仅E1学习181.0.0.0/8的eBGP路由;由于ISP3的部分更新,E2不会。如果E1和E2在彼此之间不使用iBGP,则E2永远不会知道E1拥有181.0.0.0/8的路由。

如果没有iBGP连接,则目的地为181.0.0.0/8中的主机的数据包(如果到达E2)将被发送到ISP3,这是因为E2从ISP3学习到的默认路由。但是,如果E1和E2形成iBGP邻居关系,则E2将知道通过E1到达181.0.0.0/8的路由,并将此路由选择为其最佳路由,并将此类数据包转发给E1。如图所示,然后E1将数据包转发到ISP1。

最后,仔细查看E1和E2上192.135.250.0/28的路由。如果没有一个ISP更改这些路由的默认PA设置,则E1和E2都会选择通过E2的路由作为更好的路由,因为AS_Path长度较短(两个ISP穿过ISP3,而四个SN1穿过ISP1)。

在E1和E2之间没有iBGP的情况下,E1无法了解到通过E2的更好路由。因此,到达E1的所有发往192.135.250.0/28的数据包都将转发到ISP1。如图所示,通过iBGP,E1会知道E2的更好路由,并将数据包转发给E2。

对于这两个前缀,iBGP允许同一ASN中的两个路由器就更好的路由器向每个Internet目的地发送数据包得出相同的结论。

配置iBGP

与eBGP配置相比,最基本的iBGP配置仅稍有不同。该配置未明确标识 eBGP 对iBGP对等体。取而代之的是,对于iBGP,在neighbor neighbor-ip remote-as neighbor-asn命令中列出的邻居的ASN列出的ASN与本地路由器的router bgp命令相同。eBGP邻居remote-as命令列出了不同的ASN。

当两个iBGP对等点共享一条公共物理链路时,例如图1中的E1和E2,iBGP配置仅需要在每个路由器上使用一个邻居remote-as命令。下面的示例显示了路由器E1和E2上的BGP配置,并突出显示了此单个邻居命令。其余配置列出了用于配置其他BGP设置的命令(如示例后所述)。

iBGP配置示例1

E1-E2 iBGP对等仅需要四个突出显示的配置命令。两者都引用两个路由器之间的FastEthernet链路上另一个路由器的IP地址,并且都引用ASN11。这两个路由器然后意识到邻居是iBGP邻居,因为邻居的ASN(11)与本地路由器的ASN匹配,如路由器bgp 11命令上所示。

该示例还列出了其余的BGP配置。该配置包括使用回送接口(I1-1上的1.1.1.1和E1上的11.11.11.11)到I1-1的eBGP对等连接。由于使用了环回,eBGP对等方需要使用eBGP多跳,并且它们也使用消息摘要算法5(MD5)身份验证。

最后,配置显示了通过从OSPF重新分发并汇总了aggregate-address BGP子命令汇总了企业公共地址范围128.107.0.0/19的重新分发。

E2的配置列出了相同的基本参数,但有一些区别。E2与I3-1的对等连接不使用环回,因为两个路由器之间仅存在一个链接。结果,E2也不需要使用eBGP多跳。

了解iBGP的下一跳可达性问题

缺省情况下,当路由器使用eBGP通告路由时,通告路由器将其自身的更新源IP地址列为路由的下一跳地址。换句话说,下一跳IP地址是eBGP邻居的IP地址,如邻居remote-as命令上列出的那样

但是,在向iBGP对等方通告路由时,通告路由器(默认情况下)不会更改下一跳地址。 

例如,当I1-1向E1通告181.0.0.0/8时,因为它是eBGP连接,所以I1-1设置了自己的IP地址(1.1.1.1),特别是I1-1在其eBGP对等连接上使用的IP地址到E1-作为下一跳。当E1向iBGP对等体E2通告相同的路由时,E1不会更改下一跳地址1.1.1.1。因此,路由器E2的iBGP学习路由将1.1.1.1列为下一跳地址。 

IP路由过程可以使用其下一跳地址不在连接的子网中的路由,只要每个路由器的IP路由都与下一跳IP地址匹配即可。因此,工程师必须了解BGP如何设置下一跳地址的规则,并确保每个路由器都可以到达BGP路由中列出的下一跳地址。

有两个主要选项可确保到达这些下一跳地址:

  • 创建IP路由,以便每个路由器都可以访问其他ASN中存在的这些下一跳地址。
  • 使用neighbor neighbor-ip next-hop-self命令更改默认的iBGP行为。


使用下一跳自身更改下一跳地址

此选项仅要求为iBGP邻居关系配置neighbor neighbor-ip next-hop-self命令。配置了此命令的路由器以自己的更新源IP地址作为下一跳IP地址发布iBGP路由。因为iBGP邻居已经依赖于这些更新源IP地址的工作路由,所以如果邻居建立,则这些下一跳地址的IP路由已经存在。

例如,在从E1到E2的iBGP连接上,E1将添加邻居10.100.1.2 next-hop-self命令,而E2将添加邻居10.100.1.1 nexthop-self命令。配置后,E1会将其更新源IP地址(10.100.1.1)作为下一跳地址发布iBGP路由。E2同样发布下一跳地址为10.100.1.2的路由。

下面的示例显示了E2的BGP表。

具有下一跳自我的iBGP表

这就完成了与实际连接到Internet的路由器有关的iBGP配置和操作的讨论

使用iBGP Mesh

下图中显示的iBGP对等点实际上与您期望通过类似设计看到的IGP邻居关系类型相匹配。使用IGP路由协议,每个路由器将学习路由并告知其邻居,以便所有路由器都将学习所有路由。 

不幸的是,由于具有iBGP的以下功能,因此采用这种设计并不是所有的路由器都能学习所有路由:

  • 当路由器从iBGP对等体获悉路由时,该路由器不会将相同的路由通告给另一个iBGP对等体。

由于此功能,必须创建完整的iBGP对等体,以确保ASN 11中的所有四个路由器都学习相同的BGP路由。通过在ASN 11内部的所有路由器之间创建iBGP对等关系,它们可以直接交换路由并克服限制。

但是,当路由器数量增加时,iBGP很难与所有路由器进行对等。在这种情况下,您需要使用路由反射器或联盟功能在iBGP对等体之间交换路由。

觉得文章有用?

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