目录

简介

背景信息

问题

观察到的行为

预期的CLI行为

为什么会发生这种情况

解决方案

推荐的实施方法

示例1. CLI使用不正确导致默认允许

实例2.不考虑录入订单而维护的序列订单

结论

简介

本文档介绍在配置模式下配置和显示路由映射的正确方法，尤其强调指定操作（允许或拒绝）和序列号的重要性。

背景信息

它解决了以下观察到的行为：最初配置了deny操作的路由映射条目似乎已更改为意外允许。

问题

在Cisco IOS® XE中，如果输入路由映射时没有明确指定操作（允许/拒绝）和序列号，则CLI会将操作默认为允许。如果管理员不注意语法，这可能会无意中改变路由映射的行为。

观察到的行为

应用此配置时：

router(config)#route-map TEST1 deny 1

router(config-route-map)#match ip address prefix-list PREFIXES

router(config-route-map)#exit

router(config)#route-map TEST1 permit 10

router(config-route-map)#match ip address prefix-list FIX

router(config-route-map)#exit

预期输出为：

router(config)#do sh run | sec TEST1

route-map TEST1 deny 1

match ip address prefix-list PREFIXES

route-map TEST1 permit 10

match ip address prefix-list FIX

但是，重新输入route-map TEST1时，没有指定顺序或操作，如下所示：

router(config)#route-map TEST1

router(config-route-map)#do sh run | sec TEST1

CLI输出意外显示：

route-map TEST1 permit 1

match ip address prefix-list PREFIXES

route-map TEST1 permit 10

match ip address prefix-list FIX

这表示原始配置的deny 1条目已修改为允许1。

预期的CLI行为

·当您输入命令router(config)# route-map TEST1而不指定操作（允许或拒绝）和序列号时，解析器会假定默认情况下您是“permit”。

·一旦退出该子模式，Cisco IOS XE会重写第一个序列，并将操作从deny更改为permit，因为未提供显式操作。默认情况下，只需输入route-map <name>而不输入序列号，即可输入序列10（如果允许）。如果没有仔细指定，此行为有时可能会覆盖之前的条目。

换句话说，更改不是由不可见的进程触发的，而只是未完成路由映射命令的CLI默认处理。

要在第一条语句中保留deny，请始终同时包含操作和序列号，例如：

router(config)# route-map TEST1 deny 1。

为什么会发生这种情况

这不是Bug，而是Cisco IOS XE CLI解析器的预期行为。它遵循以下规则：

- 如果调用路由映射时没有序列号，则假定为序列10。

- 如果未指定任何操作，则permit为默认值。

- 如果重新输入没有详细信息的现有路由映射，IOS可以重新分配默认操作，无意中修改之前的条目。

解决方案

为了保留您的路由映射配置的预期行为，请始终包括两者：

- 操作（允许或拒绝）

- 和序列号

router(config)#route-map TEST1 deny 1 >>>>>>>>>>>>>>> This ensures IOS-XE does not override the entry with default values.

router(config-route-map)#do sh run | sec route-map TES

route-map TEST1 deny 1

match ip address prefix-list ALL-PREFIXES

route-map TEST1 permit 10

match ip address prefix-list ALL-VPN-FIX

推荐的实施方法

此处提及供参考的配置输出。命令行为反映了正确定义的序列号的重要性，以及插入permit/deny的顺序如何不会影响运行配置中的序列号升序排列。

示例1. CLI使用不正确导致默认允许

ASR1002-1#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

ASR1002-1(config)#route-map TEST deny 1

ASR1002-1(config-route-map)#$dress prefix-list ALL-PREFIXES

ASR1002-1(config-route-map)#exit

ASR1002-1(config)#route-map TEST permit 10

ASR1002-1(config-route-map)#$dress prefix-list ALL-VPN-FIX

ASR1002-1(config-route-map)#exit

ASR1002-1(config)#do sh run | sec TEST

route-map TEST deny 1

match ip address prefix-list ALL-PREFIXES

route-map TEST permit 10

match ip address prefix-list ALL-VPN-FIX

ASR1002-1(config)#exit

ASR1002-1#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

ASR1002-1(config)#route-map TEST

ASR1002-1(config-route-map)#do sh run | sec route-map TES

route-map TEST permit 1

match ip address prefix-list ALL-PREFIXES

route-map TEST permit 10

match ip address prefix-list ALL-VPN-FIX

ASR1002-1(config-route-map)#exit

请注意deny 1如何变为permit 1。请改为将操作与序列号一起包含以维护路由映射的正确配置：

ASR1002-1(config)#route-map TEST deny 1

ASR1002-1(config-route-map)#do sh run | sec route-map TES

route-map TEST deny 1

match ip address prefix-list ALL-PREFIXES

route-map TEST permit 10

match ip address prefix-list ALL-VPN-FIX

实例2.不考虑录入订单而维护的序列订单

ASR1001-1(config)#route-map test deny 50

ASR1001-1(config-route-map)#^Z

ASR1001-1#show running-config | sec route-map

route-map test deny 50

ASR1001-1#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

ASR1001-1(config)#route-map test permit 40

ASR1001-1(config-route-map)#^Z

ASR1001-1#show running-config | sec route-map

route-map test permit 40

route-map test deny 50

ASR1001-1#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

ASR1001-1#show running-config | sec route-map

route-map test permit 40

route-map test deny 50

虽然首先输入了deny语句，但CLI按升序序列号而不是按配置顺序排序。

结论

在Cisco IOS-XE中配置路由映射时，请始终定义：

- 序列号

- 和操作

否则，由于CLI默认值，可能会导致意外行为。了解这些细微差别对维护准确的路由策略配置至关重要。