*本文编译自ipspace blog。
每当讨论如何构建一个完全基于 EBGP 的数据中心架构时,经常会有人提出疑问:“能否通过 IBGP 实现相同目的呢?”
先说结论:技术上可行,但并不意味着这是最佳选择。
为了满足好奇心,让我们暂时抛开常规设计理念,深入探索一下基于 IBGP 专用网络的未知领域。
乍一看似乎很简单
在网络还没有发展到这么复杂之前,我们曾经采用过一种“朴实”却有效的网络构建方式:
采用专门为此目的而设计的协议构建的 IP 网络
由于 IBGP 的传统设计,中间节点必须充当路由反射器。同时,我们会在环回接口间建立 IBGP 会话,确保 IBGP 不必处理核心链路故障。
随着“BGP 优于 IGP”的理念盛行,人们开始尝试构建每个节点都属于不同自治系统的网络:
仅 EBGP 网络,无 IBGP 或 IGP
现在,让我们将这一思路推向极致,用 IBGP 替代 EBGP。那么,潜在的问题是什么呢?
仅支持 IBGP 的网络,无 IGP
-
由于没有 IGP 来传播环回前缀,因此必须在直连接口间建立 IBGP 会话。
-
所有中间节点(如Spine交换机或 P 路由器)均须作为 IBGP 路由反射器。
-
在大型网络中,可能需要部署一系列路由反射器。
实现这些并不复杂,但还有一个关键问题不容忽视:
BGP 的下一跳在自治系统内不应改变。IBGP 主要用于交换可达性信息,而 IGP 则负责解析下一跳。然而,在纯 IBGP 网络中,路由反射器必须改变 BGP 下一跳以模拟 EBGP 会话的行为,这直接违反了 RFC 4456 第 10 节的“不应”规定,且某些情况下可能不允许调整此规则。
总结来说,若能在直连 IP 地址间配置 IBGP 会话并更改路由反射器上的 BGP 下一跳,便可构建纯 IBGP 网络。
这样能有效吗?
确实有效。20 世纪 90 年代,我们就曾运行过这样的网络,并且随着时间的推移,它变得越来越简洁。
为了验证这一点,我设置了一个简单的 netlab 拓扑,其中包含一个插件,该插件会删除网络中的所有 IBGP 会话,并替换为直连节点间的 IBGP 会话。以下是运行 Arista EOS 的Spine交换机配置的关键部分(完整配置可在 GitHub 上查看,文末附链接):
以下是其中一台Leaf交换机的 BGP 表:
不出所料,leaf-1 能够 ping 通 leaf-2 的环回 IP 地址,证明了端到端连接的有效性。
想亲自验证吗?
最简单的方法是使用GitHub Codespaces 的 netlab-examples 存储库(如需,导入 Arista EOS 容器并将目录更改为BGP/interface-IBGP)。
这种设计
是否真的应该被采用
?先来看看它的优缺点:
还有其他看法吗?欢迎留言讨论!
原文:
https://blog.ipspace.net/2025/01/ibgp-better-ebgp/
https://github.com/ipspace/netlab-examples/tree/master/BGP/interface-IBGP/config