为什么所有的中间路由器都需要在没有隧道的情况下运行 iBGP?

网络工程 路由 bgp 协议理论 隧道
2021-07-22 16:26:12

我正在尝试了解 iBGP 背后的配置 - 我知道您可以运行全网状网络以防止循环、运行联盟或路由反射器,如果您不想要全网状网络,还可以为 BGP 自由核心运行 GRE 或 MPLS 之类的隧道。

但是我不明白的是,为什么首先需要中间路由器讲 iBGP?例如 -

边缘 -R1 - R2 - R3 - R4 -边缘

现在 iBGP 不像 eBGP 那样具有 1 的 TTL,而且 BGP 也有一个底层 IGP 来查找其他邻居。所以问题是为什么我们不能只用 iBGP 运行 R1 和 R4,而不在 R2 和 R3 上运行 iBGP?(不处理隧道?)假设一个数据包进入 R1,所以它不会递归路由并说它由于对等互连而需要到达 R4?(并且会通过 IGP 到达 R4?)

我相信隧道实际上使边缘路由器彼此相邻?- 这是正确的思路吗?

3个回答

你混淆了几个概念。在你的例子中:

edge -R1 - R2 - R3 - R4 -edge

您可能会遇到 iBGP 问题,因为如果所有路由器都运行 iBGP,那么每个路由器都需要与其他所有路由器建立 iBGP 连接(至少是逻辑连接)。这并不意味着每个路由器都必须物理连接到每个其他路由器,但这确实意味着您需要一个 IGP 或静态路由,以便每个路由器知道如何到达每个其他路由器。例如,R1 知道如何到达 R2 直连接口,但如果没有 IGP 或静态路由的帮助,它不知道如何到达 R2 环回接口或 R3 和 R4。

即使您在所有路由器上运行 iBGP,您仍然需要一个 IGP,以便每个路由器都知道如何到达所有其他路由器,因为无法将 iBGP 学习到的路由通告给另一个 iBGP 发言者。例如,使用 iBGP,R3 可以将其与 R4 的链接告诉 R2,但 R2 无法将这条链接告诉 R1,因为它是由 R2 通过 iBGP 获知的。如果您运行 IGP,则 IGP 可以将 AS 中的所有路由告诉每个路由器。

是否在所有内部路由器上运行 iBGP 或在边缘路由器之间使用隧道实际上取决于您使用 eBGP 路由的原因。如果你没有将 eBGP 学习到的路由分发到你的 IGP 中(尝试配置静态路由,除了默认路由,对于 Internet 路由表来说真的是不可能的),那么 R2 和 R3 不知道将外部目的地的流量发送到哪里.

如果您只是需要冗余 Internet 连接并通过 BGP 将您的内部网络通告给邻居 AS,那么您可能不需要运行 iBGP 或在边缘路由器之间建立隧道。简单地在您的 AS 内通告默认路由可能就足够了,但您可以将 eBGP 学习的路由重新分配到您的 IGP 中(除非您有充分的理由,否则不建议这样做)。

如果您的 AS 想要选择最佳出口路由器,那么您可以将 eBGP 学习到的路由重新分配到 IGP(可能不是一个好主意,但可以这样做),或者您可以在所有路由器上运行 iBGP。

在传输 AS 的情况下(预计流量从 AS 的一侧进入并在 AS 的另一侧退出),那么,是的,您可能确实希望在您的 AS 中的所有路由器上使用 iBGP,或者您想要如果您不想用完整的 Internet 路由表加重内部路由器的负担,则可以在边缘路由器之间建立隧道。

并且会通过 IGP 到达 R4 吗?

它会看到它不能直接到达 R4,但它可以通过 R2 到达它,因此它将数据包发送到 R2。

但是这个决定并没有以任何方式记录在数据包中。因此,对于在 R1 和 R4 之间穿越并在所需位置离开网络的数据包,R2 和 R3 还需要知道哪些外部网络是通过 R1 到达的,哪些是通过 R4 到达的。它获取该信息的常规方法是通过 ibgp。

只要路径上的每个路由器都知道如何到达目的地就可以了。

如果路由通过 iBGP 从 R4 通告到 R1,则只有 R1 知道如何到达那里。然而,R2 将丢弃数据包。

因此,解决方案可能是使用任何路由协议(甚至可能是 iBGP ......为什么不)教路径(R2,R3)上的每个路由器有关此前缀的信息。或者使用隧道或者使用静态路由。