简介
本文档介绍如何配置使用动态路由协议的 redistribute 命令应用的路由映射。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档中的信息基于Cisco IOS®软件版本12.3。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
背景信息
本节概述了Cisco IOS软件中使用的路由映射。
路由映射基础
路由映射的许多功能与广为人知的访问控制列表 (ACL) 相同。下面是这两种机制的一个共同特点:
- 它们是单个语句的有序序列;每个语句都有permit或deny结果。ACL 或路由映射的评估包括按预先确定的顺序进行列表扫描以及对匹配的每条语句的条件进行评估。一旦找到第一个语句匹配,就会中止列表扫描,并执行与该语句匹配相关联的操作。
- 它们是通用机制 — 条件匹配,并且匹配解释由应用方式决定。应用于不同任务的同一路由映射可能具有不同的解释。
路由映射和ACL之间可能存在以下差异:
- 路由映射经常使用ACL作为匹配条件。
- 访问列表评估的主要结果是回答“是”或“否”。ACL允许或拒绝输入数据。应用于重分发时,ACL确定特定路由可以(路由匹配ACL的permit语句)还是不能(匹配deny语句)重分发。典型的路由映射不仅允许(部分)重分发的路由,而且还可以在将路由重分发到其他协议时修改与路由相关的信息。
- 路由映射比ACL更灵活,可以根据ACL无法验证的条件检验路由。例如,路由映射可以验证路由类型是否为内部类型或者其是否具有特定标记。
- 根据设计约定,每个ACL以隐式拒绝语句结尾;路由映射没有类似的约定。如果在尝试进行匹配时到达路由映射的结尾,则结果取决于路由映射的特定应用。幸运的是,应用于重分发的路由映射的行为方式与ACL相同:如果路由与路由映射中的任何子句都不匹配,则拒绝路由重分发,就像路由映射在末尾包含deny语句一样。
使用动态协议 redistribute 配置命令可以应用 ACL 或路由映射。本部分介绍的差异用于确定在重分发过程中何时使用路由映射。如果要在重分发过程中修改路由信息,或者需要比ACL更强大的功能来匹配功能,则首选路由映射。相反,如果只需根据路由的前缀或掩码选择性地允许一些路由,则 Cisco 建议直接在 redistribute 命令中使用 ACL(或等效前缀列表)。如果使用路由映射根据路由的前缀或掩码选择性地允许一些路由,则通常需要使用更多配置命令来实现相同目标。路由映射始终应用于入站流量,对出站流量没有任何效果。
开放最短路径优先
这是典型的开放最短路径优先到增强型内部网关路由协议(OSPF-to-EIGRP)路由映射,通过redistribute命令应用:
!
router eigrp 1
redistribute ospf 1 route-map ospf-to-eigrp
default-metric 20000 2000 255 1 1500
!--- Output suppressed.
!
route-map ospf-to-eigrp deny 10
match tag 6
match route-type external type-2
!
route-map ospf-to-eigrp permit 20
match ip address prefix-list pfx
set metric 40000 1000 255 1 1500
!
route-map ospf-to-eigrp permit 30
set tag 8
!
以下是此示例的重要观察结果:
- 路由映射子句进行了编号。在此示例中,子句的序号为 10、20 和 30。通过序号可以执行以下操作:
- 轻松删除一个特定语句,而不影响路由映射的其他部分。
- 在两个当前子句之间插入新子句。
Cisco建议以10为间隔对子句进行编号,以保留编号空间,以便在将来需要时插入子句。
- 路由映射可以具有 permit 和 deny 子句。在 route-map ospf-to-eigrp 中,有一个 deny 子句(序号为 10)和两个 permit 子句。deny 子句会拒绝对路由匹配进行重分配。因此,以下规则适用:
- 如果在路由映射 permit 子句中使用 ACL,则会对 ACL 允许的路由进行重分配。
- 如果在路由映射 deny 子句中使用 ACL,则不对 ACL 允许的路由进行重分配。
- 如果在路由映射permit或deny子句中使用ACL,并且ACL拒绝路由,则不会找到route-map子句匹配,并评估下一个路由映射子句。
- 每个路由映射子句都具有两种类型的命令:
- match — 选择必须应用此子句的路由。
- set — 修改要重分发到目标协议中的信息。
对于每个重分发的路由,路由器首先评估路由映射中子句的match命令。如果匹配的条件成功,则根据permit或deny子句的命令重新分发或拒绝路由,并且其某些属性由set命令修改。如果匹配的条件失败,则此子句不适用于路由,并且Cisco IOS软件继续根据路由映射中的下一子句评估路由。继续扫描路由映射,直到找到其match命令与路由匹配的子句或到达路由映射的结尾。
- 如果存在以下条件之一,则每个子句中的 match 或 set 命令可以缺少或重复多次:
- 如果一个子句中存在多个 match 命令,则所有命令必须对于给定路由都成功,才能使该路由与子句匹配(换句话说,对多个 match 命令应用逻辑“与”算法)。
- 如果match命令在一个命令中引用多个对象,则选择match(应用逻辑OR算法)。例如,在match ip address 101 121命令中,如果访问列表101或访问列表121允许路由,则允许该路由。
- 如果 match 命令不存在,则所有路由都与子句匹配。在上一个示例中,到达子句30的所有路由都匹配;因此,永远不会到达路由映射的结尾。
- 如果set命令不存在于route-map permit子句中,则会重新分发路由,而不修改其当前属性。
请勿在deny route-map子句中配置set命令,因为deny子句禁止路由重分发。没有要修改的信息。
不使用matchset命令的route-map子句执行操作。空的permit子句允许重分布其余路由,而无需修改。空deny子句不允许重分布其他路由(如果路由映射已完全扫描但未找到显式匹配,则这是默认操作)。
根据本部分中的信息,上一个 OSPF 到 EIGRP 路由映射示例会执行以下操作:
- 禁止重分配所有设置了标记 6 的类型 2 外部 OSPF 路由。
- 将所有匹配pfx前缀列表的路由重分发到EIGRP,这些路由具有五个度量值:40000、1000、255、1和1500。
- 对所有其他路由进行重分配并将其标记设置为 8(默认值)。
在应用于重分配的路由映射中使用的命令
此部分包括以下主题:
在路由映射中配置不支持的 match 和 set 命令
路由映射是可在许多配置中使用的通用机制,其中包括前面描述的redistribute命令。例如,可以在 PBR 的路由映射中配置 match length 命令,以指定在转发特定长度的数据包时执行特殊操作。但是,不会在应用于重分配的路由映射中使用 match length 命令。
可以在路由映射中配置在应用(或打算以后应用)路由映射的上下文中不支持(或无效)的 match 和 set 命令。此情况的一个示例是在应用于重分配的路由映射中使用的 match length 命令。在重分配中,会通过 redistribute 命令中指定的协议将路由映射应用于安装到路由表中的每个路由。因此,当路由器执行路由映射时,路由器只解释在路由映射应用程序的上下文中有意义的命令。在本示例中,重分布路由映射中提到的match length命令对重分布没有影响。它保留在路由映射的配置中,可在正在运行的路由器配置中查看。但是,无论此命令是否存在于路由映射中,路由重分配都不受影响。
因此,路由器允许配置所有类型的match和set命令,但是这些命令必须逻辑应用于该情况。否则,配置可能会非常混乱,或者执行不正确的任务。
由于存在以下问题,请勿使用在路由映射上下文中没有效果的命令(即使这些命令看似无害):
-
没有效果的命令会掩盖要实现的目标。可能会造成混淆。
-
Cisco IOS软件的未来版本支持当前不支持的命令。未来软件升级后,路由映射行为可能会发生不需要的更改。
-
并非所有命令都是完全无害的;例如,set metric +/- 命令,它指定度量的相对变化并用于BGP路由通告。它可以采用路由的当前度量并在传播该度量之前按指定值将其增大或减小。
此命令的+/-形式不受某些协议支持,请参阅EIGRP路由映射,在其他情况下,它实际上被解释为set metric命令,省略符号。例如,请考虑下面的路由映射:
!--- This redistribution route-map is very dangerous!
route-map ospf-to-ospf permit 10
set metric +2
!
此配置似乎将所有路由从一个 OSPF 进程重分配到另一个 OSPF 进程,同时将所有路由的度量增加 2。但是,它实际上将所有路由的度量设置为相同,等于2。这在路由器配置中是意外的。
以下路由映射甚至可提供更加与直觉相悖的效果:
!--- This redistribution route-map is very dangerous!
route-map ospf-to-ospf permit 10
set metric +2
!
此配置不是减小重分配路由的度量,而是实际上将度量设置为 367(正值,因为在不带符号的情况下解释 set metric 时不可能出现负度量)。
路由映射重分配的双重协议性质
应用于重分配的路由映射使用两个路由协议:
每个路由协议可以支持自己的一组路由属性。
在重分配路由映射配置中:
本文档的命令支持表部分列出了这些命令。它们按 match 和 set 命令分类,以强调重分配路由映射的双重协议性质。
命令支持表
本部分介绍 redistribute 命令中附加的路由映射所支持的命令。有七种路由协议可用于重分发路由,但只有五种协议可用于重分发。已连接路由和静态路由不是动态路由协议,只能提供要重分配到其他协议中的信息。
本部分不包括Cisco IOS软件版本12.3路由映射中支持,但不适用于重分发环境的match和set命令。
Intermediate System-to-Intermediate System (IS-IS) 和 BGP 可将有关无连接网络服务 (CLNS) 的信息与 IP 路由一起传播。为提供全面信息,本部分中的表还涉及与 CLNS 相关的命令,可在这些协议的重分配路由映射中使用这些命令。
可以使用路由信息协议(RIP)、OSPF、IS-IS和BGP传播IPv6路由;这些协议的重分发路由映射可以包含特定于IPv6的命令。match ip和set ip命令专门用于IPv4前缀的重分发。match ipv6和set ipv6命令专门用于IPv6前缀的重分发。仅当使用路由映射向路由协议或从路由协议重分配 CLNS 路由时,才能使用 match clns 和 set clns 命令。
表 1 和表 2 使用以下约定:
表 1 - 用于匹配由协议安装到路由表中的路由的路由映射命令
命令 |
重分配支持 |
已连接 |
静态 |
RIP |
EIGRP |
OSPF |
IS-IS |
调试输出中显示“BGP |
match clns address |
— |
Yes |
— |
— |
— |
Yes |
Yes |
match clns next-hop |
— |
Yes |
— |
— |
— |
Yes |
— |
match interface |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
— |
match ip address |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
match ip address prefix-list |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
match ip next-hop |
— |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
match ip next-hop prefix-list |
— |
无 |
无 |
无 |
无 |
无 |
无 |
match ip route-source |
— |
— |
Yes |
Yes |
Yes |
— |
Yes |
match ip route-source prefix-list |
— |
— |
无 |
无 |
无 |
— |
无 |
match ipv6 address [prefix-list] |
Yes |
Yes |
Yes |
— |
Yes |
Yes |
Yes |
match ipv6 next-hop [prefix-list] |
— |
Yes |
Yes |
— |
— |
— |
Yes |
match ipv6 route-source [prefix-list] |
— |
— |
Yes |
— |
— |
— |
Yes |
match metric |
— |
— |
Yes |
Yes |
Yes |
Yes |
Yes |
match policy-list |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
match route-type external |
— |
— |
— |
Yes |
Yes |
Yes |
Yes |
match route-type internal |
— |
— |
— |
Yes |
Yes |
— |
Yes |
match route-type local |
— |
— |
— |
— |
— |
— |
Yes |
match route-type nssa-external |
— |
— |
— |
— |
Yes |
— |
— |
match route-type {level-1|level-2} |
— |
— |
— |
— |
— |
Yes |
— |
match tag |
— |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
表 2 - 用于在重分配到目标协议的过程中修改路由属性的命令
命令 |
重分配支持 |
RIP |
EIGRP |
OSPF |
IS-IS |
调试输出中显示“BGP |
set as-path tag |
— |
— |
— |
— |
Yes |
set community |
— |
— |
— |
— |
Yes |
set ip next-hop |
— |
— |
— |
— |
Yes |
set ip next-hop peer-address |
— |
— |
— |
— |
无 |
set ipv6 next-hop |
— |
— |
— |
— |
Yes |
set level {backbone|stub-area} |
— |
— |
无 |
— |
— |
set level {level-1|level-2|level-1-2} |
— |
— |
— |
Yes |
— |
set local-preference |
— |
— |
— |
— |
Yes |
set metric |
Yes |
— |
Yes |
Yes |
Yes |
set metric +/- |
无 |
— |
无 |
无 |
无 |
set metric eigrp-metric |
— |
Yes |
— |
— |
— |
set metric +/- eigrp-metric |
— |
无 |
— |
— |
— |
set metric-type internal |
— |
— |
— |
Yes |
— |
set metric-type external |
— |
— |
— |
Yes |
— |
set metric-type {type-1|type-2} |
— |
— |
Yes |
— |
— |
set nlri |
— |
— |
— |
— |
Yes |
set origin |
— |
— |
— |
— |
Yes |
set tag |
Yes |
Yes |
Yes |
— |
— |
set weight |
— |
— |
— |
— |
Yes |
结论
路由映射是用于路由重分配的非常强大但复杂的工具。在协议之间进行重分配时,使用路由映射可以对路由信息进行极其精细的处理。但是,它们可能非常危险,并可能在网络中造成黑洞或次优流量。如果计划在多个路由协议之间使用复杂的重分发功能,则必须非常仔细地设计网络。
相关信息