Cisco OSPF 类型 5 /32 路由在数据库中,但不在路由表中

网络工程 思科 思科-ios ospf
2021-07-12 06:33:00

我们的网络在 Cisco 硬件上运行适用于 IPv4 的 OSPF。下图显示了相关拓扑:

拓扑

问题拓扑

问题陈述

我们有一个 Cisco ASA 防火墙,它也是传入 VPN 连接的 VPN 网关。如前所述,我们将 OSPF 作为内部路由协议运行。ASA 为 VPN 客户端执行反向路由注入 (RRI),这意味着它为每个 VPN 连接创建静态 /32 路由。然后将这些 /32 路由重新分配到 OSPF 域中。

右边的路由器是我们运行 BGP 的外围路由器。中间有一个多层交换机(Cat6500 w/Sup720-3B 和 IPServices)也运行 OSPF。问题是,那些 /32 路由器在 MLS 和路由器的 OSPF 数据库中都是可见的,但没有插入到 MLS 的路由表中。然而,在路由器上,它们在路由表中。

调试输出

有两个这样的子网(两个不同的 VPN 配置文件),它们是 xx.xx.37.0/24 和 xx.xx.202.0/24。当那些 /32 路由器重新分配到 OSPF 中时,它们在路由域的其余部分中显示为 LSA 类型 5,但是,它们不会被注入到 MLS 的路由表中。

我们可以在数据库中看到这些 LSA:

show ip ospf database external | i xx.xx.202.
  Link State ID: xx.xx.202.5 (External Network Number )
  Link State ID: xx.xx.202.6 (External Network Number )
  Link State ID: xx.xx.202.8 (External Network Number )

如果我们查看特定的 LSA,我们还可以看到路由位已设置,因此 LSA 符合 OSPF 路由的条件:

show ip ospf database external xx.xx.202.5

            OSPF Router with ID (xx.xx.207.4) (Process ID 2)

                Type-5 AS External Link States

  Routing Bit Set on this LSA
  LS age: 1887
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: xx.xx.202.5 (External Network Number )
  Advertising Router: xx.xx.192.20
  LS Seq Number: 80000001
  Checksum: 0x8147
  Length: 36
  Network Mask: /32
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: xx.xx.192.21
        External Route Tag: 0

进一步,调试OSPF进程的SPF,发现接收到了部分更新并进行了处理,没有发现错误(debug ip ospf spf):

Feb  2 16:17:40.537: OSPF: Schedule partial SPF - type 5 id xx.xx.202.5 adv rtr xx.xx.192.20
Feb  2 16:17:40.537: OSPF: Service partial SPF 0/1/0
Feb  2 16:17:40.537: OSPF process partial spfQ entry
Feb  2 16:17:40.537: OSPF process partial spfQ entry
Feb  2 16:17:40.537: OSPF process partial spfQ LSA id xx.xx.202.5: mask 255.255.255.255, type 5 adv_rtr xx.xx.192.20, age 1, seq 0x80000001 (Area dummy area)
Feb  2 16:17:40.537: OSPF: Start partial processing Type 5 External LSA xx.xx.202.5, mask 255.255.255.255, adv xx.xx.192.20, age 1, seq 0x80000001, metric 20, metric-type 2
Feb  2 16:17:40.537:    Add path: next-hop xx.xx.192.21, interface Vlan511
Feb  2 16:17:40.537: OSPF: insert route list LS ID xx.xx.202.5, type 5, adv rtr xx.xx.192.20
Feb  2 16:17:40.537: OSPF process partial spfQ entry

但是,该路由并未插入到路由表中。作为一种变通方法,我们添加了一个使用 /24 子网的静态路由。然而,这不是 /32 子网未放入表中的原因。虽然 AD 较低(1 个静态路由与 110 个 OSPF 外部),但最长的前缀匹配规则将首先评估,因此应添加 /32 子网。

有趣的是,在 MLS 后面的路由器上,/32 路由按预期添加到路由表中。

更多信息

MLS 是带有 Sup720-3B (MSFC3) SUP 的 Cisco 6500 机箱,运行“s72033-ipservicesk9-mz.122-33.SXI14.bin”软件。路由器是 Cisco ASR1001-F 路由器,运行“asr1000rp1-advipservicesk9.03.04.06.S.151-3.S6.bin”软件。

没有路由过滤器,设备的 OSPF 配置非常基本。OSPF 邻接都OK,所有其他路由还是OK。

MLS的OSPF配置:

router ospf 2
 router-id xx.xx.207.4
 log-adjacency-changes
 auto-cost reference-bandwidth 100000
 area 0 authentication message-digest
 passive-interface default
 no passive-interface ...
 network 0.0.0.0 255.255.255.255 area 0

OSPF 配置路由器:

router ospf 2
 router-id xx.xx.207.1
 auto-cost reference-bandwidth 100000
 area 0 authentication message-digest
 traffic-share min across-interfaces
 passive-interface default
 no passive-interface ...
 default-information originate always metric-type 1

新的消息

经过一些进一步的故障排除后,我可能已经发现了问题,但是,不知道如何解决它。查看防火墙,生成的静态路由是这样的:

S xx.xx.202.13 255.255.255.255 [1/0] via xx.xx.192.21, outside

RRI 的默认行为是将生成的静态路由的下一跳设置为应用加密映射的 ASA 接口的默认网关(在我们的示例中为外部)。在我们的例子中,它是 xx.xx.192.21,这是 MLS 的接口!

根据Cisco 文档,如果满足以下条件,则会设置非零转发地址:

在 ASBR 的下一跳接口上启用 OSPF 并且 ASBR 的下一跳接口在 OSPF 下是非被动的并且 ASBR 的下一跳接口不是点对点的并且 ASBR 的下一跳接口不是点对多点的并且 ASBR 的下一跳接口地址属于router ospf 命令指定的网络范围。

所有这些条件都满足,因为我们需要在 OSPF 中启用外部接口(即下一跳),因为它是指向 MLS 的接口。

如上所述,MLS 处的 LSA 包含 xx.xx.192.21 的转发地址,这是 MLS 在 MPLS 和 ASA 之间的子网中的地址。根据上面链接的文档,转发地址需要称为内部 OSPF 路由。这是在路由器上给出的,并且路由条目被添加到路由表中。然而,这不是在 MLS 中给出的。

问题

为什么路由没有加入路由表?我很欣赏任何想法。

1个回答

正如 DanielDib 所指出的,问题是在类型 5 LSA 中设置了错误的前向地址。

根据Cisco文档,转发地址基本设置好了,如果RRI生成的静态路由的下一跳接口参与OSPF路由过程。可以在链接的文档中找到更多详细信息。

RRI 静态路由的下一跳设置为应用加密映射的 ASA 接口的默认网关,在我们的例子中是指向 MLS 的外部接口。这个下一跳IP就是MLS接口的IP。

在MLS,LSA的转发地址(xx.xx.192.21)是它自己的一个接口的IP地址。由于转发地址需要被称为内部 OSPF 路由,因此不认为该路由被添加到路由表中。因此,如果需要,解决方案可能是拥有正确的转发地址,或者取消转发地址。此问题可能包含有关此解决方案的更多详细信息。