1. Routing Policy(路由策略)特征
- 匹配规则,由 if match 和 apply 子句组成
- Routing Policy[**默认隐含 Deny 动作**]
- Routing Policy 使用不同的匹配条件和匹配模式选择路由和改变路由属性
- 路由进行重分布时,把其他协议(或同一协议不同进程)学习到的路由表,以及运行该协议的直连重分布到本协议的数据库
- 路由策略主要通过一系列工具或方法,实现对路由进行各种控制的「策略」。这些策略能够影响路由产生、接收、发布、选择(重分布)等,从而来影响报文所经过的路径
- 在 IP 网络中,路由策略的用途主要包括两个方面:
- 对路由信息进行过滤
- 如果某条路由符合 XX 条件,就接收该路由(只接收必要、合法的路由信息,以控制路由表的容量,提高网络的安全性)
- 如果某条路由符合 XX 条件,就发布该路由(只发布必要、合法的路由信息,以控制路由表的容量,提高网络的安全性)
- 如果某条路由符合 XX 条件,就重分布该路由(在不同路由协议之间相互引入时,只引入一部分满足条件的路由信息)
- 修改路由的属性
- 如果某条路由符合 XX 条件,就将该路由的某个或多个属性修改为 XXX(修改通过路由策略过滤的路由的属性,满足自身需要)
- 对路由信息进行过滤
- 路由过滤的作用
- 避免路由重分布导致的次优路径
- 避免回馈导致的路由环路
- 进行精确的路由重分布和路由通告控制
- 思科设备将其他协议引入距离适量协议(RIP,EIGRP),默认开销值是无穷大(种子度量值),必须手工指定
2. Routing Policy 组成和匹配过程
在特定的场景中,路由策略的 6 种过滤器也能单独使用,实现路由过滤。若设备支持 BGP to IGP 功能,还能在 IGP 引入 BGP 路由时,使用 BGP 私有属性作为匹配条件
1)组成
- Routing Policy 由节点号、匹配模式、if-match 子句(条件语句)和 apply 子句(执行语句)这四个部分组成
2)匹配过程
通常在多个 deny 节点后设置一个不含 if-match 子句和 apply 子句的 permit 模式节点,用于允许其它所有的路由通过
- 一个 Routing Policy 由多个 node 节点构成,路由进入路由策略后,按节点序号从小到大依次检查各个节点是否匹配
- 顺序匹配:在匹配过程中,系统按节点号从小到大的顺序依次检查各个表项,因此在指定节点号时,要注意符合期望的匹配顺序
- 唯一匹配:Routing Policy 各节点号之间是 “or” 的关系,只要通过一个节点的匹配,就认为通过该过滤器,不再进行其它节点的匹配
- 如果没有通过任何一个节点的过滤,路由信息将无法通过 Routing Policy[**隐含 Deny]**
- 一个节点可以包括多个 if-match(条件语句)和 apply(执行语句)子句
- if-match 子句用来定义该节点的匹配条件,if-match 子句的过滤规则关系是 “and “,即该节点的所有 if-match 子句都必须匹配
- 每一个节点可以含有多个 if-match 子句,也可以不含 if-match 子句,if match 子句可以引用其它的过滤工具
- 如果某个 permit 节点没有配置任何 if-match 子句,则该节点匹配所有的路由
- 命令 if-match route-type 和 if-match interface 除外,这两个命令的各自 if-match 子句间是 “or” 的关系
- apply 子句用来定义通过过滤的路由行为,定义的 apply 子句都会执行
- 每一个节点可以含有多个 apply 子句,也可以不含 apply 子句
- 如果只需要过滤路由,就不需要使用 apply 子句
- if-match 子句用来定义该节点的匹配条件,if-match 子句的过滤规则关系是 “and “,即该节点的所有 if-match 子句都必须匹配
- 节点的匹配模式
- Permit: 指定节点的匹配模式为允许
- 当路由项通过该节点的过滤后,将执行该节点的 apply 子句,不进入下一个节点
- 如果路由项没有通过该节点过滤,将进入下一个节点继续匹配
- Deny: 指定节点的匹配模式为拒绝,这时 apply 子句不会被执行
- 当路由项满足该节点的所有 if-match 子句时,将被拒绝通过该节点,不进入下一个节点
- 如果路由项不满足该节点的 if-match 子句,将进入下一个节点继续匹配
3)if-match 和 Routing Policy 匹配模式的对应关系
| if-match 子句中包含的匹配模式 | Routing-Policy 中 node 节点对应的匹配模式 | 匹配结果 | | :—-: | :—-: | :—-: | | permit | permit |
- 匹配 if-match 子句的路由,在 node 节点中允许通过 Routing-Policy,匹配结束
- 不匹配 if-match 子句的路由,继续进行下一个 node 节点匹配
| | permit | deny |
- 匹配 if-match 子句的路由,在 node 节点中不允许通过 Routing-Policy,匹配结束
- 不匹配 if-match 子句的路由,继续进行下一个 node 节点匹配
| | deny | permit |
- 匹配 if-match 子句的路由,在 node 节点中不允许通过 Routing-Policy,继续进行下一个 node 节点匹配
- 不匹配 if-match 子句的路由,继续进行下一个 node 节点匹配
| | deny | deny |
- 匹配 if-match 子句的路由,在 node 节点中不允许通过 Routing-Policy,继续进行下一个 node 节点匹配
- 不匹配 if-match 子句的路由,继续进行下一个 node 节点匹配
|
- Permit: 指定节点的匹配模式为允许
3. 过滤工具
- 条件工具:用于把需要的路由 “抓取” 出来
- 访问控制列表(ACL):用于匹配(抓取)路由信息或数据包地址,过滤不符合条件的路由信息或数据包
- 地址前缀列表(IP-Prefix):匹配对象为路由信息的目的地址或直接作用于路由器对象(Gateway)
- AS路径过滤器(AS-Path-Filter):仅用于 BGP 协议,匹配 BGP 路由信息的自治系统路径域
- 团体属性过滤器(Community-Filter):仅用于 BGP 协议,匹配 BGP 路由信息的自治系统团体域
- 扩展团体属性过滤器(Extcommunity Filter)
- RD属性过滤器**(Route Distinguisher Filter)**
- 策略工具:用于把 “抓取” 出来的路由执行某个动作(比如允许、拒绝、修改属性值等)
调用工具:用于将路由策略应用到某个具体的路由协议里面,使其生效
在 Routing Policy 的 If-match 子句中只支持基本 ACL
将报文中的入接口、源或目的地址、协议类型、源或目的端口号作为匹配条件的过滤器,在各路由协议发布、接收路由时单独使用
2)IP-Prefix(前缀列表)
IP Prefix List 由名称 + 索引 + 动作 + IP 前缀和长度(Network+Len)+ 掩码范围组成
- IP Prefix List 将源地址、目的地址和下一跳的地址前缀作为匹配条件的过滤器,可在各路由协议发布和接收路由时单独使用
- IP Prefix List 能够同时匹配 IP 地址前缀及掩码长度
- 先匹配出 Mask 范围(也就是说,先看 Mask,不看 IP)
- 再按期望的 Mask 值进行匹配(使 IP 与 Mask 进行比较匹配)
- IP Prefix List 不能用于 IP 报文的过滤,只能用于路由信息的过滤。既能限制前缀的范围,又能限制掩码的范围
- IP Prefix List 默认隐含拒绝所有
- 每个地址前缀列表可以包含多个索引(index),每个索引对应一个节点。路由按索引号从小到大依次检查各个节点是否匹配,任意一个节点匹配成功,将不再检查其他节点。若所有节点都匹配失败,路由信息将被过滤
- 根据匹配的前缀不同,前缀过滤列表可以进行精确匹配(没有定义掩码范围),也可以进行在一定掩码长度范围内匹配
- 当 IP 地址为 0.0.0.0 时表示通配地址,表示掩码长度范围内的所有路由都被 Permit 或 Deny
0.0.0.0/0 le 32
- 地址前缀列表过滤路由的原则可以总结为:顺序匹配、唯一匹配、默认拒绝
- 顺序匹配:按索引号从小到大顺序进行匹配。同一个地址前缀列表中的多条表项设置不同的索引号,可能会有不同的过滤结果,实际配置时需要注意
- 唯一匹配:待过滤路由只要与一个表项匹配,就不会再去尝试匹配其他表项
- 默认拒绝:默认所有未与任何一个表项匹配的路由都进行丢弃过滤。因此在创建了一个或多个 deny 的索引表项后,需要创建一个允许让其他所有路由通过
- 掩码范**围特性(less-equal:小于等于、greater-equal:大于等于)**
- 若不配置 greater-equal 和 less-equal,则进行精确匹配,即只匹配掩码长度为
mask-length
的路由 - 若只配置 greater-equal ,则匹配的掩码长度范围为
greater-equal-value,32
- 若只配置 less-equal,则匹配的掩码长度范围为
mask-length,less-equal-value
- 若同时配置 greater-equal 和 less-equal,则匹配的掩码长度范围为
greater-equal-value,less-equal-value
- 若不配置 greater-equal 和 less-equal,则进行精确匹配,即只匹配掩码长度为
举例
ip ip prefix test index 10 permit 10.0.0.0 16 greater equal 24 less equal 28
- 前缀号必须为
10.0
,16 定义的范围 - 24 ≤ 前缀长度 ≤ 28
- 满足条件的如 10.0.1.0/24, 10.0.2.0/25, 10.0.2.192/26
- 前缀号必须为
- 匹配A类路由:
ip ip-prefix qyt permit 0.0.0.0 1 greater-equal 8 less-equal 8
- 匹配B类路由:
ip ip-prefix xxx permit 128.0.0.0 2 greater-equal 16 less-equal 16
- 匹配C类路由:
ip ip-prefix qyt permit 192.0.0.0 3 greater-equal 24 less-equal 2
3)Filter-Policy(过滤策略)
可以在出方向过滤路由:只能过滤路由信息,链路状态信息是不能被过滤的;对 OSPF 来说,只能过滤 3/5/7 类路由
- 可以在入方向过滤路由:对于链路状态协议,仅仅是不把路由加入到路由表中
- 可以过滤从其它路由协议引入的路由:只能在出方向过滤,在 ASBR 重分步时操作或者在某节点使用 Filter policy。在入方向过滤是没有意义的
① 在距离适量协议中的应用
距离矢量协议中,路由器之间传递的是路由信息
filter-policy export
是在路由信息的出方向进行过滤filter-policy import
是在路由信息的入方向进行过滤② 在链路状态协议中的原理和应用
链路状态协议中,路由器之间传递的是 LSA/LSP 信息
filter-policy import
是对 SPF 计算出来后的路由进行过滤,但是在 ABR 上进行过滤会影响到其他路由器学习路由信息filter-policy export
是对 ASBR 引入的路由在发布时进行过滤(只能在 ASBR 上才会生效,可以对引入的直连路由或外部路由进行过滤,防止形成环路)4)AS-Path-Filter(AS路径过滤器)
将 BGP 中的 AS_Path 属性作为匹配条件的过滤器,在 BGP 发布、接收路由时单独使用
AS_Path 属性记录了 BGP 路由所经过的所有 AS 编号
5)Community Filter(团体属性过滤器)
将BGP中的团体属性作为匹配条件的过滤器,在 BGP 发布、接收路由时单独使用
-
6)Extcommunity Filter(扩展团体属性过滤器)
将 BGP 中的扩展团体属性作为匹配条件的过滤器,可在 VPN 配置中利用 VPN Target 区分路由时单独使用
扩展团体属性过滤器仅应用于对 VPN 中的 VPN Target 属性的匹配(VPN Target 属性在 BGP/MPLS IP VPN 网络中控制 VPN 路由信息在各 Site 之间的发布和接收)
7)Route Distinguisher Filter(RD团体属性过滤器)
将 VPN 中的 RD 属性作为匹配条件的过滤器,可在 VPN 配置中利用 RD 属性区分路由时单独使用
- VPN 实例通过路由标识符 RD 实现地址空间独立,区分使用相同地址空间的前缀
4. Routing-Policy 的重分布/引入
1)为什么需要重分布/引入
- 部署不同路由协议的机构合并
- 采用不同厂商的协议
- 同一设备同一协议但不同进程的配置
- 不同的网络使用不同的协议,并且这些网络需要共享路由信息
-
2)重分布/引入的注意事项
把其他协议或同一协议不同进程学习到的路由信息,以及运行该协议的直连引进到本协议的数据库
- 设备上引入的路由,只有该设备上有关于引入协议的路由条目才会被引入到其他路由协议中
- IGP 协议中引入外部路由时打上的 Tag 值会继承给其他路由器
- 路由引入时需要注意 Cost 值变化
- 将其他路由协议引入到距离矢量协议(DV)时候,需要根据实际网络情况调整 Cost 值,以反映真实拓扑(不同路由协议计算路由开销不同)
- 引入 OSPF,默认为 1
- 引入 ISIS,narrow 默认为 64、wide 默认为 10
- Cisco 默认是无穷大(种子度量值),必须手工指定 Cost,否则无法引入
- 将其他路由协议引入到距离矢量协议(DV)时候,需要根据实际网络情况调整 Cost 值,以反映真实拓扑(不同路由协议计算路由开销不同)
- 路由引入不当会导致产生次优路径
- 修改优先级是为了解决次优路径
- 打 Tag 是为了解决环路(拒绝有 TAG 的路由引入)
- 如果有低速链路,并且已经造成了拥塞。当 ASBR 引入的路由已经被撤销时,由于低速链路拥塞,路由器未及时刷新 LSDB,路由器会以为邻居没有该路由,又将路由通告给其他设备