使用 ECMP 在两条路径之间分配流量,一条由 eBGP 获知,另一条由 Cisco NX-OS 交换机上的 iBGP 获知

网络工程 BGP cisco-nexus cisco-nx-os ecmp
2022-02-17 23:10:22

我维护了两个交叉连接的交换机 R1 和 R2,它们都与外部交换机 R3 相连。R1 和 R2 都使用 eBGP 接收到 R3 后面的各个子网的路由。此外,R1 和 R2 使用 iBGP 在彼此之间交换路由。R1 和 R2 之间的交叉连接比 R3 的链路大得多,如果流量路由适当,就有足够的流量完全利用到 R3 的两条链路。

路由图

我想使用 ECMP 来划分 R1->R3 流量,使其一部分直接跟随 R1->R3,一部分跟随 R1->R2->R3。我希望 R2->R3 流量被类似地划分。

R1 和 R2 是 Cisco NX-OS 交换机。R1 可以看到到 192.168.240.0/24(在 R3 后面)的两条潜在路径,并正确确定一条是通过 eBGP 接收的,一条是通过 iBGP 接收的。

R1# show ip bgp vrf vrf-100
BGP routing table information for VRF vrf-100, address family IPv4 Unicast
BGP table version is 49, Local Router ID is 10.10.100.2
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2

   Network            Next Hop            Metric     LocPrf     Weight Path
* i10.10.100.0/24     10.10.100.3                       100          0 i
*>l                   0.0.0.0                           100      32768 i
* i192.168.240.0/24   10.10.100.3                       100          0 YYYYY i
*>e                   169.254.159.2                                  0 YYYYY i

我尝试将最大路径设置为 2,但 Cisco NX-OS 交换机(据我所知,大多数/所有交换机)并不认为这样的路径是相等的。eBGP 路径始终优先于 iBGP 路径,并且 ECMP 不会将两者都安装在路由表中。

R1# show run bgp
router bgp XXXXX
  vrf vrf-100
    address-family ipv4 unicast
      network 10.10.100.0/24
      maximum-paths 2
    neighbor 10.10.100.3
      remote-as XXXXX
      password 3 b6d56a77617af8e3
      address-family ipv4 unicast
    neighbor 169.254.159.2
      remote-as YYYYY
      password 3 b6d56a77617af8e3
      address-family ipv4 unicast

我尝试使用“混合最大路径”,因为我的理解是这将允许 eBGP 和 iBGP 路径被视为相等。

R1# show run bgp
router bgp XXXXX
  vrf vrf-100
    address-family ipv4 unicast
      network 10.10.100.0/24
      maximum-paths mixed 2
    neighbor 10.10.100.3
      remote-as XXXXX
      password 3 b6d56a77617af8e3
      address-family ipv4 unicast
    neighbor 169.254.159.2
      remote-as YYYYY
      password 3 b6d56a77617af8e3
      address-family ipv4 unicast

在这两种情况下,路由表中都只安装了 eBGP 路由。

R1# show ip route vrf vrf-100
IP Route Table for VRF "vrf-100"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>

10.10.100.0/24, ubest/mbest: 1/0, attached
    *via 10.10.100.2, Vlan100, [0/0], 6w2d, direct
10.10.100.1/32, ubest/mbest: 1/0, attached
    *via 10.10.100.1, Vlan100, [0/0], 6w2d, vrrp_engine
10.10.100.2/32, ubest/mbest: 1/0, attached
    *via 10.10.100.2, Vlan100, [0/0], 6w2d, local
169.254.159.0/30, ubest/mbest: 1/0, attached
    *via 169.254.159.1, Po2.100, [0/0], 1w5d, direct
169.254.159.1/32, ubest/mbest: 1/0, attached
    *via 169.254.159.1, Po2.100, [0/0], 1w5d, local
192.168.240.0/24, ubest/mbest: 1/0, all-best (0x0)
    *via 169.254.159.2, [20/0], 00:31:48, bgp-XXXXXX, external, tag YYYYYY

我该怎么做:

  1. 说服 R1 通过 eBGP 和 iBGP 路由的组合使用多路径,或
  2. 改变我正在做的事情以允许通过其他机制进行多路径?
1个回答

想象一下,如果您有以下网络拓扑,并且 R1 和 R2 都配置为您所描述的不等成本多路径类型。

发往 Internet 的数据包可能由 R1 发送到 ISP1,也可能发送到 R2。但 R2 也有 50% 的机会将这些数据包从 R1 发送回 R1。一些数据包会在 R1 和 R2 之间循环,直到它们的 TTL 达到零。换句话说,您会遇到到某些目的地的连接中断。

ISP1     ISP2
 |        |
 R1------R2

这种循环行为是 BGP 不提供将 eBGP 学习路径视为等于 iBGP 学习路径的选项的原因。

您可能知道 MPLS 标记单播确实提供了解决此问题的可能解决方法,但我认为这超出了当前讨论的范围。