在启用 BGP 多路径的情况下,为什么 Junos 仅为活动前缀找到多个下一跃点?

网络工程 bgp 瞻博网络 多径
2021-07-14 08:36:41

我有一个 Juniper 路由器r3,其中一个已建立的 eBGP 会话与路由器t1( 172.16.0.14) 和第二个已建立的 eBGP 会话与路由器t2( 172.16.0.18)命名BGP的配置r3可以看下图:

root@r3> show configuration protocols bgp group t1-t2    
type external;
peer-as 65222;
multipath;
neighbor 172.16.0.14;
neighbor 172.16.0.18;

root@r3> 

r31.1.1.1/32在两个会话中接收前缀:

root@r3> show route receive-protocol bgp 172.16.0.14 1.1.1.1/32    

inet.0: 71 destinations, 84 routes (60 active, 0 holddown, 11 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 1.1.1.1/32              172.16.0.14                             65222 I

root@r3> show route receive-protocol bgp 172.16.0.18 1.1.1.1/32    

inet.0: 71 destinations, 84 routes (60 active, 0 holddown, 11 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
  1.1.1.1/32              172.16.0.18                             65222 I

root@r3> 

由于multipath配置选项 the172.16.0.14172.16.0.18都是1.1.1.1/32前缀的下一跳,以防t1( 172.16.0.14)宣布的活动路由的 RID 低于t2. 但是,只有活动路由计算了两个下一跳:

root@r3> show route 1.1.1.1 detail 

inet.0: 71 destinations, 84 routes (60 active, 0 holddown, 11 hidden)
1.1.1.1/32 (2 entries, 1 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 0
                Address: 0xb634310
                Next-hop reference count: 10
                Source: 172.16.0.14
                Next hop: 172.16.0.14 via ge-0/0/4.0, selected
                Session Id: 0x0
                Next hop: 172.16.0.18 via ge-0/0/7.0
                Session Id: 0x0
                State: <Active Ext>
                Local AS: 65000 Peer AS: 65222
                Age: 2:42 
                Validation State: unverified 
                Task: BGP_65222.172.16.0.14+40876
                Announcement bits (4): 0-KRT 4-BGP_RT_Background 5-Resolve tree 1 7-BGP_RT_Background 
                AS path: 65222 I 
                Accepted Multipath
                Localpref: 100
                Router ID: 4.4.4.4
         BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 0
                Address: 0xd2ecab0
                Next-hop reference count: 9
                Source: 172.16.0.18
                Next hop: 172.16.0.18 via ge-0/0/7.0, selected
                Session Id: 0x0
                State: <NotBest Ext>
                Inactive reason: Not Best in its group - Active preferred
                Local AS: 65000 Peer AS: 65222
                Age: 6:54 
                Validation State: unverified 
                Task: BGP_65222.172.16.0.18+58923
                AS path: 65222 I 
                Accepted MultipathContrib
                Localpref: 100
                Router ID: 5.5.5.5

root@r3> 

如果两个会话都建立,则转发表:

root@r3> show route forwarding-table destination 1.1.1.1/32 table default
Routing table: default.inet
Internet:
Enabled protocols: Bridging,
Destination        Type RtRef Next hop           Type Index    NhRef Netif
1.1.1.1/32         user     0                    ulst  1048580     3
                              172.16.0.14        ucst      601     4 ge-0/0/4.0
                              172.16.0.18        ucst      602     5 ge-0/0/7.0

root@r3>

FIB 如果仅172.16.0.14成立:

root@r3> show route forwarding-table destination 1.1.1.1/32 table default
Routing table: default.inet
Internet:
Enabled protocols: Bridging,
Destination        Type RtRef Next hop           Type Index    NhRef Netif
1.1.1.1/32         user     0 172.16.0.14        ucst      601     5 ge-0/0/4.0

root@r3>

FIB 如果仅172.16.0.18成立:

root@r3> show route forwarding-table destination 1.1.1.1/32 table default
Routing table: default.inet
Internet:
Enabled protocols: Bridging,
Destination        Type RtRef Next hop           Type Index    NhRef Netif
1.1.1.1/32         user     0 172.16.0.18        ucst      602     7 ge-0/0/7.0

root@r3>

这是 Junos 中的某种优化,仅为活动路由找到递归下一跳?

3个回答

如果您这样做,show route 1.1.1.1/32 extensive您应该会看到 Junos 调用协议下一跳的另一个字段,这可能不那么令人困惑。在您粘贴的输出中,它列出了所有选定的相邻下一跳,这些下一跳是通过将下一跳解析为协议下一跳来确定的。

例如,如果协议下198.51.100.100一跳距离第 3 层数跳,并且 RIB 包含两个相等的 OSPF 学习路由到 198.51.100.100,则您粘贴的显示类型将包括这两个 OSPF 学习的下一跳在活动路线节中。

如果 Junos 以不同的方式标记这些字段会更好。我们必须始终牢记下一跳在 BGP 的上下文中具有复杂的含义。

首先,让我们澄清一下有关协议下一跳的问题。基本上,协议下一跳是现有的下一跳,用于解析与 BGP 广告中的前缀关联的下一跳。因此,如果我收到 BGP 下一跳为 2.2.2.2 的 10.10.10.0/24,我现在必须解析 2.2.2.2 才能到达那里。假设 2.2.2.2 是一条通过 int1 和 int2 的 OSPF 路由(大部分情况下它可以是任何协议),2.2.2.2 是我的下一跳协议,现在我知道我可以通过 int1 和 int2 到达那里。

但是,在您的情况下,不需要协议下一跳。 使用直接连接的接口 IP 的 EBGP 会话不需要额外的递归级别,因为它们已经有一个与接口路由关联的 ARP 条目。

让我们看看解析在您的场景中如何工作,以及 172.16.0.14 和 172.16.0.18 都通过 OSPF 而不是直接连接的接口解析的场景。请注意,深入研究更细微的细节本身可能是另一个问题,因此我将在此处抽象出其中的一些内容,以保持简单。

通过 OSPF

1.1.1.1 (BGP) ----> 172.16.0.14 (OSPF) ----> via ge-0/0/4.0 (Direct/ARP)
               |
               +--> 172.16.0.18 (OSPF) ----> via ge-0/0/7.0 (Direct/ARP)

通过直接连接的 BGP 对等点(您的场景)

1.1.1.1 (BGP) ----> 172.16.0.14 via ge-0/0/4.0 (Direct/ARP)
               |
               +--> 172.16.0.18 via ge-0/0/7.0 (Direct/ARP)

请注意,在您的场景中,不需要通过 OSPF 的额外递归,它可以简单地利用现有的下一跳。

这是 Junos 中的某种优化,仅为活动路由找到递归下一跳?

你的场景中,不是明确的,不是,但在其他使用协议下一跳的场景中,有适当的优化(正如我所说的,这是另一回事)。

我离题了,虽然 1.1.1.1/32 是相同的前缀,但每个对等方仍在发送它自己的副本,因此必须考虑路径选择。如果您查看文档,您会注意到路由确实进入了添加多路径路由的步骤(显然)。

如果在上一步之后执行了 tie-break,则该路径被视为 BGP 等成本路径(并将用于转发)。考虑由启用多路径的 BGP 邻居获知的具有相同相邻 AS 的所有路径。

在您的情况下,出于 Jeff Tantsura 提到的原因(路由年龄),选择了 .14 副本并将其安装到 RIB 中,并且还安装了 .14 和 .18 的 FIB 条目。如果您考虑另一条 BGP 路由没有激活两个多路径路由,您就会意识到这真的没有任何好处。假设与 .18 BGP 路由关联的接口失效,.14 的副本保持活动状态,而 .18 的 FIB 条目消失。如果与 .14 关联的接口失效,则将安装现有的 .18 BGP 路由并使用 .18s FIB 条目(已在 FIB 中)。

几点: 上面的显示输出实际上是显示多路径,确实令人困惑。您可以看到:Accepted Multipath 和 Accepted MultipathContrib for secondary(这在 BGP 处理中有一些进一步的后果)为了验证,请查看转发表,例如 show route forwarding-table destination 1.1.1.1/32(应该同时显示下一跳)

.14 被选为主要的原因不是因为 RID,而是因为它首先出现(默认的 Junos 行为(又名最旧的路径)),可以通过以下方式更改:set protocols bgp path-selection external-router-id

如果还有什么不清楚的,请告诉我