本文档介绍与开放最短路径优先 (OSPF) 转发地址有关的概念和问题。请参阅为什么某些 OSPF 路由在数据库中但不在路由表中?来了解有关排除 OSPF 故障的详细信息。
本文档中所阐释的问题仅在 12.1(3) 之前的 Cisco IOS® 软件版本中比较显著。 在 Cisco IOS 软件版本 12.1(3) 及更高版本中,重分配行为得到了改进。有关详细信息,请参阅Cisco Bug ID CSCdp72526(仅限注册客户)。 此 Bug 拥有受影响的 Cisco IOS 软件版本和已修复版本的列表。请参阅将连接的网络重分配到 OSPF 中,其中阐释了有关 Cisco IOS 行为的改进。
本文档的读者应掌握以下这些主题的相关知识:
常规 IP 路由。
OSPF 路由协议概念和术语。
本文档中的信息基于以下软件和硬件版本:
Cisco 2503 路由器
在所有路由器上运行的 Cisco IOS® 软件版本 12.2(24a)
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
为避免在将流量路由到外部自治系统 (AS) 时产生额外的跃点,引入了 OSPF 转发地址的概念,如下图所示。
在图中,OSPF 域中有两台路由器连接到了外部域。但是,只有路由器1与路由器100交换路由信息。路由器1将从路由器100获知的信息重分发到OSPF中,并将该信息通告给OSPF域的其余部分。在进行此操作时,路由器 1 将成为重分配给 OSPF 域的信息的下一跳(或转发地址)。当路由器2从OSPF域收到发往外部域中某个地址的数据包时,它会将该数据包转发到路由器1。路由器1随后将其转发到路由器100。转发地址概念允许避免此额外的跳,因为它允许路由器1指定另一路由器的IP地址作为转发地址。在图中,路由器 1 可将路由器 100 指定为由路由器 1 重分配到 OSPF 域中的外部信息的转发地址。当路由器2从OSPF域收到发往外部域中某个地址的数据包时,它会将该数据包转发到路由器100。结果是通过路由器1避免了额外的跳数。
由自治系统边界路由器 (ASBR)(上图中的路由器 1)指定的转发地址的值可以是 0.0.0.0,也可以是非零值。0.0.0.0 地址表示始发路由器 (ASBR) 是下一跳。转发地址取决于以下条件:
如果 ASBR 重分配路由且在这些路由的下一跳接口上未启用 OSPF,则转发地址设置为 0.0.0.0。在上图中,如果路由器 1 在以太网接口上未启用 OSPF,便会进行此设置。
在下列条件下,转发地址字段将设置为非零地址:
在 ASBR 的下一跳接口上启用了 OSPF,并且
ASBR 的下一跳接口在 OSPF 下是非被动的,并且
ASBR 的下一跳接口并非 是点对点的,并且
ASBR 的下一跳接口并非 是点到多点的,并且
ASBR 的下一跳接口地址属于在 router ospf 命令中指定的网络范围。
在除以上条件之外的任何其他条件下,转发地址均设置为 0.0.0.0。
有关转发地址的设置方法及其对路径选择影响的信息,请参阅转发地址对类型 5 LSA 路径选择的影响。
上图中的令牌环网络中添加了只运行 RIP(并且可能连接到了仅使用 RIP 的网络)的 R2513 路由器。ASBR (R2515) 将从 R2513 获得的路由重分配到 OSPF 中后,其中某些路由不会安装到某些路由器的路由表中。这些表中会提供每一个路由器的相关配置信息。
hostname R2504 |
---|
interface Serial0 ip address 1.1.1.2 255.255.255.0 interface TokenRing0 ip address 3.3.4.2 255.255.255.0 router ospf 1 network 1.1.1.0 0.0.0.255 area 0 network 3.0.0.0 0.255.255.255 area 1 area 1 range 3.0.0.0 255.0.0.0 |
hostname R2507 |
---|
interface Serial0 ip address 1.1.1.1 255.255.255.0 interface Serial1 ip address 7.7.7.1 255.255.255.0 router ospf 1 network 1.1.1.1 0.0.0.0 area 0 default- information originate metric 20 ip route 0.0.0.0 0.0.0.0 Serial1 |
hostname R2513 |
---|
interface TokenRing0 ip address 3.3.4.4 255.255.255.0 interface ethernet 0 ip address 200.1.1.4 255.255.255.0 router rip network 3.0.0.0 network 200.1.1.0 |
hostname R2515 |
---|
interface TokenRing0 ip address 3.3.4.3 255.255.255.0 interface ethernet 0 ip address 3.44.66.3 255.255.255.0 interface ethernet 1 ip address 3.22.88.3 255.255.255.0 router ospf 1 redistribute rip metric 20 subnets network 0.0.0.0 255.255.255.255 area 1 router rip network 3.0.0.0 passive-interface ethernet 0 passive-interface ethernet 1 |
上表中的配置显示 R2515 将 RIP 重分配到 OSPF 中,并且 R2504(区域边界路由器 [ABR])创建汇总网络 3.0.0.0/8。
以下是每一个启用了 OSPF 的路由器的路由表:
R2507# show ip route Gateway of last resort is 0.0.0.0 to network 0.0.0.0 1.0.0.0/ 24 is subnetted, 1 subnets C 1.1.1.0 is directly connected, Serial0 3.0.0.0/ 8 is variably subnetted, 4 subnets, 2 masks O IA 3.0.0.0/ 8 [110/ 70] via 1.1.1.2, 00: 15: 37, Serial0 O E2 3.3.4.0/ 24 [110/ 20] via 1.1.1.2, 00: 06: 37, Serial0 O E2 3.22.88.0/ 24 [110/ 20] via 1.1.1.2, 00: 06: 37, Serial0 O E2 3.44.66.0/ 24 [110/ 20] via 1.1.1.2, 00: 06: 37, Serial0 7.0.0.0/ 24 is subnetted, 1 subnets C 7.7.7.0 is directly connected, Serial1 S* 0.0.0.0/ 0 is directly connected, Serial1 R2504# show ip route Gateway of last resort is 1.1.1.1 to network 0.0.0.0 1.0.0.0/ 24 is subnetted, 1 subnets C 1.1.1.0 is directly connected, Serial0 3.0.0.0/ 8 is variably subnetted, 4 subnets, 2 masks S 3.0.0.0/ 8 is directly connected, Null0 C 3.3.4.0/ 24 is directly connected, TokenRing0 O 3.22.88.0/ 24 [110/ 11117] via 3.3.4.3, 00: 15: 16, TokenRing0 O 3.44.66.0/ 24 [110/ 11117] via 3.3.4.3, 00: 15: 16, TokenRing0 O E2 200.1.1.0/ 24 [110/ 20] via 3.3.4.4, 00: 06: 16, TokenRing0 O* E2 0.0.0.0/ 0 [110/ 20] via 1.1.1.1, 00: 15: 16, Serial0 R2515# show ip route Gateway of last resort is 3.3.4.2 to network 0.0.0.0 1.0.0.0/ 24 is subnetted, 1 subnets O IA 1.1.1.0 [110/ 70] via 3.3.4.2, 00: 10: 28, TokenRing0 3.0.0.0/ 24 is subnetted, 3 subnets C 3.3.4.0 is directly connected, TokenRing0 R 200.1.1.0/ 24 [120/ 1] via 3.3.4.4, 00: 00: 10, TokenRing0 O* E2 0.0.0.0/ 0 [110/ 20] via 3.3.4.2, 00: 10: 28, TokenRing0
R2515具有网络200.1.1.0/24的RIP(R)派生路由。R2515是ASBR,将RIP协议重分发到OSPF。R2504 从 R2515 获得有关网络 200.1.1.0/24 的信息,并将该信息作为 OSPF 外部类型 2 (E2) 路由安装到其路由表中。问题是,R2507 在其路由表中没有网络 200.1.1.0/24。
R2507 拥有网络 3.3.4.0/24、3.22.88.0/24 和 3.44.66.0/24 的外部路由,即使所有这些网络均应包括在 3.0.0.0/8 的汇总中也是如此。
显示这些外部路由的原因是,ASBR(将 RIP 重分配到 OSPF 中)拥有在这三个子网上运行的 RIP。因此,它会将这些子网作为外部路由重分配到 OSPF 中。由于这些子网为外部路由,因此,ABR (R2504) 不会对它们进行汇总。 外部 OSPF 路由只能由 ASBR 进行汇总。在本例中为R2515。ABR仅汇总从区域1到区域0的内部OSPF路由。
注意:通过修复Cisco Bug ID CSCdp72526(仅注册客户),OSPF不会生成重叠外部网络的第5类链路状态通告(LSA)。R2507只有3.0.0.0/8的区域间总结路由。然后,R2507将200.1.1.0/24安装为转发地址,可通过区域间路由3.0.0.0/8访问。这符合RFC 2328 。
此输出在 R2507 的 OSPF 数据库中显示网络 200.1.1.0/24 的外部 LSA:
R2507# show ip ospf data external 200.1.1.0 OSPF Router with ID (7.7.7.1) (Process ID 1) Type- 5 AS External Link States LS age: 72 Options: (No TOS- capability, DC) LS Type: AS External Link Link State ID: 200.1.1.0 (External Network Number ) Advertising Router: 3.44.66.3 LS Seq Number: 80000001 Checksum: 0xF161 Length: 36 Network Mask: /24 Metric Type: 2 (Larger than any link state path) TOS: 0 Metric: 20 Forward Address: 3.3.4.4 External Route Tag: 0
OSPF 允许 ASBR 将另一个路由器指定为到外部路由的转发地址。在本示例中,ASBR (R2515) 已指定 3.3.4.4 作为外部网络 200.1.1.0 的转发地址。
RFC 2328 ,第16.4节(计算AS外部路由),指出:
“如果转发地址是非零值,则在路由表中查询转发地址。匹配的路由表条目必须指定区域内或区域间路径;如果不存在这样的路径,则不会对 LSA 执行任何操作并考虑列表中的下一条目。”
在此示例中,到转发地址 3.3.4.4 的路由如下所示:
R2507# show ip route 3.3.4.4 Routing entry for 3.3.4.0/ 24 Known via "ospf 1", distance 110, metric 20,type extern 2, forward metric 70 Redistributing via ospf 1 Last update from 1.1.1.2 on Serial0, 00: 00: 40 ago Routing Descriptor Blocks: * 1.1.1.2, from 3.44.66.3, 00: 00: 40 ago, via Serial0 Route metric is 20, traffic share count is 1
根据最长匹配规则,3.3.4.4 的转发地址与外部路由 3.3.4.0/24 匹配,而不是与区域间汇总路由 3.0.0.0/8 匹配。由于路由器没有指向转发地址的内部 OSPF 路由,因此它不会在路由表中安装外部路由 200.1.1.0/24。使用外部路由到达另一个外部路由可能会产生环路。因此,OSPF 不允许使用它。
如何能确保非零转发地址作为区域内或区域间路由存在于路由表中?
第一种解决方案是不在 ABR 上进行汇总。
第二种解决方案是不配置任何 LSA 类型 3 过滤条件。如果对类型 3 路由进行了过滤,将无法访问出现在 show ip ospf database external 命令输出上的转发地址,从而无法访问外部网络。在本例中为R2504。这会导致区域0中的路由器具有其他区域中所有特定子网的区域间路由(而非外部路由)。
使用以下命令删除 ABR 上的汇总:
R2504(config)# router ospf 1 R2504(config- router)# no area 1 range 3.0.0.0 255.0.0.0
此命令在 R2507 的路由表中的结果如下所示:
R2507# show ip route Gateway of last resort is 0.0.0.0 to network 0.0.0.0 1.0.0.0/ 24 is subnetted, 1 subnets C 1.1.1.0 is directly connected, Serial0 3.0.0.0/ 24 is subnetted, 3 subnets O IA 3.3.4.0 [110/ 70] via 1.1.1.2, 00: 00: 48, Serial0 O IA 3.22.88.0 [110/ 80] via 1.1.1.2, 00: 00: 48, Serial0 O IA 3.44.66.0 [110/ 80] via 1.1.1.2, 00: 00: 48, Serial0 7.0.0.0/ 24 is subnetted, 1 subnets C 7.7.7.0 is directly connected, Serial1 O E2 200.1.1.0/ 24 [110/ 20] via 1.1.1.2, 00: 00: 48, Serial0 S* 0.0.0.0/ 0 is directly connected, Serial1 R2507# show ip route 3.3.4.4 Routing entry for 3.3.4.0/24 Known via "ospf 1", distance 110, metric 70, type inter area Last update from 1.1.1.2 on Serial1, 00:03:52 ago Routing Descriptor Blocks: * 1.1.1.2, from 3.3.4.2, 00:03:52 ago, via Serial1 Route metric is 74, traffic share count is 1
从输出中可以看到,可通过指向网络 3.3.4.0/24 的区域间路由来访问地址 3.3.4.4。在删除 ABR R2504 上的汇总之后,路由器 R2507 通过类型 5 LSA 和类型 3 LSA 获得指向此网络的路由。由于 OSPF 首选区域间路由而不是外部路由来访问同一网络,因此会将此路由安装为区域间路由。由于 R2507 此时拥有指向转发地址 3.3.4.4 的区域间路由,因此外部网络 200.1.1.0/24 也会安装到其路由表中。
注意:如果使用NSSA(次末节区域),并且如果在NSSA ABR上完成第3类LSA过滤,则将存在同一问题“无法转发地址”。
另一种解决方案是防止将子网 3.3.4.0 作为外部路由重分配到 OSPF 中,因为 OSPF 在其上运行。ASBR (R2515) 中的这些配置命令将创建一个路由映射。redistribute 命令用它来仅允许将网络 200.1.1.0/24 重分配到 OSPF 中。ABR (R2504) 仍汇总从区域 1 到区域 0 的内部 OSPF 路由。
R2515# configure terminal R2515(config)# router ospf 1 R2515(config-router)# redistribute rip metric 20 subnets route-map rip_to_ospf_filter R2515(config-router)# exit R2515(config)# access-list 28 permit 200.1.1.0 0.0.0.255 R2515(config)# route-map rip_to_ospf_filter permit 10 R2515(config-route-map)# match ip address 28
此命令在 R2507 的路由表中的结果如下所示:
R2507# show ip route Gateway of last resort is 0.0.0.0 to network 0.0.0.0 1.0.0.0/ 24 is subnetted, 1 subnets C 1.1.1.0 is directly connected, Serial0 O IA 3.0.0.0/ 8 [110/ 70] via 1.1.1.2, 00: 07: 05, Serial0 7.0.0.0/ 24 is subnetted, 1 subnets C 7.7.7.0 is directly connected, Ethernet0 O E2 200.1.1.0/ 24 [110/ 20] via 1.1.1.2, 00: 00: 21, Serial0 S* 0.0.0.0/ 0 is directly connected, Ethernet0
路由表中唯一的外部路由是200.1.1.0/24。此网络在路由表中,因为此外部网络(3.3.4.1)的转发地址由总结路由3.0.0.0/8覆盖,该路由是区域间路由。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
29-Dec-2005 |
初始版本 |