为什么此路由器无法使用来自 OSPF 的多个等价路由?

网络工程 思科 ospf 锦缎 电调 任播
2021-07-11 15:28:28

运行 NetIron 5.2 的 Brocade 路由器和运行 IOS 12.4 的 Dynamips 仿真都无法在看似非常简单的配置中可靠地使用等价路径。我说“可靠”是因为我确实非常简短地观察了 Brocade 的预期行为,但它是在长时间不活动之后消失的,一旦我扰乱系统就消失了。

如果相关,我正在为无状态网络服务设置任播目的地。这将是特定于站点的配置,具有很少或没有网络路径长度多样性,因此任播功能的目的主要是为了故障转移冗余,部分是为了负载共享。我的问题涉及负载共享功能。

我的原型网络看起来像这样。

R1 <--N1--> Rcore <--N2--> R2

R1R2通过 OSPF 通告任播目的地。如果Rcore在其N1N2接口上具有相同的成本,并且任播目的地在每个其他路由器上具有相同的成本,我希望在Rcore路由表中找到两条成本相等的路径我不会,至少并非总是如此,甚至无法预测。为什么不?

其中,潜在的相关细节如下。

  • Rcore是一个 ABR 连接N1N2,它们位于不同的 NSSA 区域中,连接到主干网(未显示)。
  • RcoreLSDB 的检查确认预期的 LSA 来自R1R2正确安装,并且包含具有正确度量的任播目的地。

我已经考虑了三种可能的解释。

  1. 我不明白如何在这些平台上配置和运行 ECMP。这是可能的,我希望在这里找到我在供应商文档中找不到的启示。
  2. 我不了解 OSPF 区域、ECMP、任播等之间的交互。我认为这不太可能,但无论如何我准备学习一些东西。
  3. 这两个供应商的实现遭受相同的错误,或错误的功能,或其他东西。我想这可能会发生。

编辑为 Dynamips/Dynagen 实现添加了示例配置和输出。

配置

路由器 R1

!
version 12.4
!
hostname R1
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip ospf cost 1
!
interface FastEthernet0/0
 ip address 10.1.0.2 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 router-id 10.1.0.2
 log-adjacency-changes
 area 0.0.0.1 nssa no-summary
 passive-interface Loopback0
 network 1.1.1.1 0.0.0.0 area 0.0.0.1
 network 10.1.0.0 0.0.0.3 area 0.0.0.1
!
line console 0
 exec-timeout 0 0
!
end

路由器 R2

!
version 12.4
!
hostname R2
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip ospf cost 1
!
interface FastEthernet0/0
 ip address 10.2.0.2 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 router-id 10.2.0.2
 log-adjacency-changes
 area 0.0.0.2 nssa no-summary
 passive-interface Loopback0
 network 1.1.1.1 0.0.0.0 area 0.0.0.2
 network 10.2.0.0 0.0.0.3 area 0.0.0.2
!
line console 0
 exec-timeout 0 0
!
end

路由器 Rcore

!
version 12.4
!
hostname Rcore
!
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
 ip ospf cost 4
!
interface FastEthernet0/0
 ip address 10.1.0.1 255.255.255.252
 ip ospf cost 2
!
interface FastEthernet0/1
 ip address 10.2.0.1 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 log-adjacency-changes
 area 0.0.0.1 nssa no-summary
 area 0.0.0.2 nssa no-summary
 passive-interface Loopback0
 network 10.0.0.1 0.0.0.0 area 0.0.0.0
 network 10.1.0.0 0.0.0.3 area 0.0.0.1
 network 10.2.0.0 0.0.0.3 area 0.0.0.2
!
line console 0
 exec-timeout 0 0
!
end

输出

路由器 Rcore

路由器 LSA 来自 R1

Rcore#sh ip ospf database router 10.1.0.2

            OSPF Router with ID (10.0.0.1) (Process ID 1)

        Router Link States (Area 0.0.0.1)

  LS age: 1618
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 10.1.0.2
  Advertising Router: 10.1.0.2
  LS Seq Number: 80000002
  Checksum: 0x726F
  Length: 48
  Number of Links: 2

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.1.0.2
     (Link Data) Router Interface address: 10.1.0.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 2

路由器 LSA 来自 R2

Rcore#sh ip ospf database router 10.2.0.2

            OSPF Router with ID (10.0.0.1) (Process ID 1)

        Router Link States (Area 0.0.0.2)

  LS age: 1766
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 10.2.0.2
  Advertising Router: 10.2.0.2
  LS Seq Number: 80000002
  Checksum: 0x8A53
  Length: 48
  Number of Links: 2

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.2.0.2
     (Link Data) Router Interface address: 10.2.0.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 2

路由表摘录

Rcore#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
  Known via "ospf 1", distance 110, metric 3, type intra area
  Last update from 10.1.0.2 on FastEthernet0/0, 00:30:54 ago
  Routing Descriptor Blocks:
  * 10.1.0.2, from 10.1.0.2, 00:30:54 ago, via FastEthernet0/0
      Route metric is 3, traffic share count is 1
4个回答

我的第一个想法是 OSPF 认为它是相同的 LSA 而不是简单的相同前缀。我对织锦不太了解,但通过 Cisco 机器的 LSA 输出,我可能会告诉你更多。

一般而言,对于 Cisco,如果路由在协议中相等,则它们都会出现在路由表中。默认情况下,路由表将安装两个路径并执行 ECMP。如果指标或协议不同,则它们不会是 ECMP。这也适用于相同前缀的不同 LSA。

我正在考虑 ECMP 对任播是否有意义。路由应该将任播定向到逻辑上最近的目的地,其中一台主机比另一台主机更受青睐。即使在任播主机等距的情况下,我仍然希望这仍然是正确的。至于 ECMP 负载共享,我认为使用 /32 是不可能的。也许有考虑来源的负载共享算法。每个数据包似乎有风险,即使对于 DNS。我相信大多数开箱即用的任播解决方案都在主机上运行 ospf。

进行了一些搜索,但以下来自rfc2178 的摘录证实了原因。

16.8. 等价多径

OSPF 协议维护多条到所有目的地的等价路由。这可以在上面用于计算路由表的步骤以及路由表结构的定义中看到。

多条路由中的每一条都具有相同的类型(区域内、区域间、类型 1 外部或类型 2 外部)、成本,并且将具有相同的关联区域但是,每条路由都指定了一个单独的下一跳和广告路由器。

我无法在我的实验室中使用 12.4(24) 重现这一点。相同的拓扑结构,RCore 区域 0 环回,R1 与 lo0 和区域 1 中的接口,R2 与 lo0 和区域 2 中的接口(均为 NSSA),在 Rcore 上为 ECMP 选择重新分配的路由:

Routing entry for 10.20.0.0/16
  Known via "ospf 1", distance 110, metric 20, type NSSA extern 2, forward metric 6477
  Last update from 2.2.2.6 on Serial1/1, 00:02:23 ago
  Routing Descriptor Blocks:
    2.2.2.6, from 2.2.2.21, 00:02:23 ago, via Serial1/1
      Route metric is 20, traffic share count is 1
  * 1.1.2.1, from 1.1.1.1, 00:06:31 ago, via Serial1/0
      Route metric is 20, traffic share count is 1

我能想到的可能性:根据路由如何进入 OSPF,以及使用的 OSPF 路由类型,ASBR 路由器的成本可能会/可能不会被计入路由选择过程(对于 ECMP 工作,两个路由成本,与 ASBR 的成本必须匹配)。查看两者的实际 LSA 指标可能会有所帮助。

我能够通过模仿您的配置在 IOS 上重现这一点——将任播放置在界面上,并将界面放置在一个区域中。如果您确实需要 ECMP,请考虑将路由重新分配到 OSPF,因为这似乎确实有效。

根据您使用的 Brocade 硬件(MLX?CER?XMR?),您可能想要更新软件。通过 5.3(和 5.4 取决于您的硬件)软件树修复了几个错误,这些错误的症状与 OSPF 路由成本未正确更新有关。我不知道查看错误的所有标准,但其中有几个是:如果在运行 OSPF 的路由器上的 1gig 端口或环回接口上更改了成本,则不会处理更改并且不会更新成本.

我意识到您在两个制造商的平台上看到了这一点,因此这更有可能是配置问题。我还意识到,旧的技术支持“更新您的软件”通常只值一个白眼。也就是说,这可能是要记住的事情。