如何通过 Quagga 在 /30 netblock 上运行冗余 BGP?

网络工程 bgp 虚拟现实
2021-07-03 20:56:45

我的新 BGP 上游分配了一个 IPv4 /30 网络块作为连接我们路由器的胶水块。但是,我想运行两个路由器,并在它们之间进行故障转移。如果网络块更大 (/29),我可以轻松地从我的两个路由器运行 BGP 会话,无论是否使用 VRRP(它们也可以运行 VRRP)。

是否有合理的 VRRP/keepalived 故障转移配置,我可以在不让他们扩展胶水块的情况下实施?

我的两台路由器都使用 Quagga 运行 Linux(一个 Ubuntu,一个 Gentoo);基本配置工作正常。

1个回答

您有多个 Linux 解决方案,用于从 LAN 到两个路由器的第一跳冗余(Quagga 本身不支持 VRRP,但您可以将 Quagga 与其中任何一个结合使用,没有任何问题):

  • keepalived(正如你已经提到的)
  • uCARP - OpenBSD 的 CARP(通用地址冗余协议)的 Linux 端口
  • vrrpd - 一个文档稀少且大部分未经测试的 VRRP 守护程序,但仍然是一个选项

请注意,这些都与 BGP 冗余无关,我认为这是您要解决的真正问题。但是,应该很有可能在您的两个 Quagga 主机的提供商端运行 VRRP,并将 VRRP 虚拟 IP 配置为 ISP 分配的 /30 的“您端”,并使用它与您的 ISP 对等。故障转移时间可能与下面使用 Linux-HA 的解决方案接近相同(如果不仅仅是快一点)。话虽如此,我个人认为 Linux-HA 解决方案会更简洁、更简单,但这也可能取决于拓扑。

至于您对 BGP 的选择,有一个针对“多会话 BGP”IETF 草案,草案引入了一个新的 BGP 功能代码,旨在支持同一地址上的同一对等方的多个 BGP 会话,但该草案假设两个会话都将在同一台设备上,但草案是全新的,目前的 Quagga 修订版不太可能对此提供支持。

另一种选择是使用Linux-HA在你的两个机器之间设置一个心跳集群,并将其配置为这样如果主路由器出现故障,心跳将识别出这一点并在备用路由器上打开 Quagga/BGPd/etc当这种情况发生时。