简介
本文档介绍在配置模式下配置和显示路由映射的正确方法,尤其强调指定操作(允许或拒绝)和序列号的重要性。
背景信息
它解决了以下观察到的行为:最初配置了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默认值,可能会导致意外行为。了解这些细微差别对维护准确的路由策略配置至关重要。