我们的网络在 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 中给出的。
问题
为什么路由没有加入路由表?我很欣赏任何想法。