BGP、多路径和可能的 OSPF

网络工程 路由 bgp 非对称路由
2021-07-05 06:18:13

我正在为冗余和灾难恢复设置第二个站点。

目标如下:

  • 来自任一站点的 ISP 容错:例如,如果 ISP-A(主要)和 ISP-B 出现故障,HostA 可以访问 Internet。
  • 同样,如果 1 或 2 个连接丢失,服务器将继续可从 Internet 访问。

笔记:

  • 我们已经在两个 ISP 之间通过 BGP 连接了路由器 A。任一 ISP 都可以关闭,我们可以继续运行,因此假设初始 BGP/ARIN 步骤已完成。
  • 编辑:站点通过 1 个或多个 1gbps 专线互连
  • 编辑:在这种情况下,路由器也是防火墙

我的问题:

  • 如何处理默认网关情况?
    • 我是否将客户端指向其各自路由器的各自站点?如果该路由器失去连接怎么办?
    • 异步路由呢?假设 ISP-A 是我们的主要站点,并且流量来自站点 B 上的服务器(谁指向路由器 B 作为默认 GW),这不会导致问题吗?理想情况下,我们不会遇到这种情况,即使这意味着将一台路由器指定为所有路由器的默认网关,并在它失去 ISP 连接时将其路由到第二台路由器。
    • 我想我需要像 OSPF 这样的东西来宣传 ISP 链接故障的意识,但我不清楚它有什么帮助。

谢谢。

在此处输入图片说明

1个回答

这可能有点啰嗦,但我会尝试一次性解决您的大部分问题。祝我好运!

您可以让上游服务提供商通过 BGP 向您的路由器通告默认路由 (0.0.0.0)。在 BGP 路由器上配置 OSPF 时,可以使用命令“default-information originate”。只要您从 ISP 获得默认路由(这仅在您连接到该 ISP 时发生),您就会将默认路由通告到 OSPF。一旦您失去了来自 ISP 的默认路由,您就会失去 OSPF 默认路由。

您需要在所有 Internet 路由器(连接到 ISP 的路由器)之间建立 BGP 对等互连。这是内部 BGP 或 iBGP 关系,需要是全网状网络。根据您的图表,您只有两个互联网路由器,因此全网状网络很简单。在 iBGP 和 eBGP 上进行对等没有复杂的步骤;只是一个简单的邻居声明。当 BGP 看到您的邻居具有相同的 AS 编号时,它会形成 iBGP 关系而不是 eBGP 关系。

优先选择一条路由而不是另一条路由有点棘手,尤其是在涉及 BGP 的情况下。负载平衡是使用路由映射完成的,传统上使用路径前置。有几种方法可以做到这一点。我想补充一点,如果您不过滤传出路由广告,您最终将向 ISP B 和 C 等发布 ISP A 的路由,这将使您变成中转 AS,您最终会通过您的网络管道传输一些 A <-> B、A <-> C 和 B <-> C 流量,这可能不是您想要的。

这是您的负载平衡的一招:

! Set an IP access list that matches your BGP-advertised network

ip access-list standard 1 permit a.b.c.d mask a.b.c.d

! Set an IP as-path access list to only allow advertising of YOUR network

ip as-path access-list 1 permit ^$

! Make a route-map for ISP C, match the as-path and access-list above, then make it look
! less appealing than going through ISP A/B

route-map ISP_C 10
match ip address 1
match as-path 1
set as-path prepend <Your AS> <Your AS> <Your AS>

! The more times you prepend your AS to a route, the less desirable it looks, so traffic
! will be more likely to come in via ISP A/B than C.  The last step is to add it to your
! ISP C neighbor statement in BGP

router bgp <Your AS>
neighbor <ISP C> route-map ISP_C out

如果您有多个子网,您甚至可以通过有选择地将您的 AS 路径预先添加到各个子网,将路由器 B 用于站点 B,将路由器 A 用于站点 A。下面是一个例子:

路由器A:

ip access-list standard 1
permit <site B subnets>

ip as-path 1 permit ^$

route-map ISP_AB 10
match ip address 1
match as-path 1
set as-path prepend <Your AS> <Your AS>
route-map ISP AB 20
match as-path 1

router bgp <Your AS>
neighbor <ISP A> route-map ISP_AB out
neighbor <ISP B> route-map ISP_AB out

路由器 B:

ip access-list standard 1
permit <site A subnets>

ip as-path 1 permit ^$

route-map ISP_C 10
match ip address 1
match as-path 1
set as-path prepend <Your AS> <Your AS>
route-map ISP C 20
match as-path 1

router bgp <Your AS>
neighbor <ISP C> route-map ISP_C out

您有效地所做的是使来自路由器 A 的站点 B 的子网看起来不如来自 ISP C 的吸引人,并使来自路由器 B 的站点 A 的子网看起来不如来自 ISP A/B 的子网有吸引力。你可能需要在你的 AS 路径前面加上一些来获得适量的前缀。

我希望这有帮助!BGP 有点像怪物,但是一旦您了解了这些部分,就会很有趣。我强烈推荐关于 BGP 的 CBT Nuggets 系列,如果你觉得这个主题有点不稳定,我总是使用 GNS3 作为测试平台,在我实施它们之前验证大型网络变化。