路由策略
路由策略(Routing Policy)在控制层面截取路由信息并修改或过滤,从而影响路由表的生成、干涉选路结果,是网络精细化管理的核心技术。
一、控制层流量 vs 数据层流量
在理解路由策略之前,必须区分两种流量:
| 流量类型 | 定义 | 示例 |
|---|---|---|
| 控制层流量 | 路由协议传递路由信息产生的流量 | OSPF LSU、RIP Update、BGP Update |
| 数据层流量 | 设备访问目标地址时产生的流量 | 用户访问网站、文件传输、Ping |
ACL 主要针对数据层流量进行访问控制;路由策略主要针对控制层流量进行控制。
路由策略的核心逻辑分为两个步骤:
第一步:截取流量(抓流量)── 确定要处理哪些路由
第二步:执行策略(做策略)── 对抓取的路由进行修改或拒绝
二、抓取流量的工具
2.1 ACL 列表
ACL 原本设计用于抓取数据层流量,虽然也可以用于抓取路由信息,但存在明显局限:
优点:通过通配符可以灵活匹配 IP 地址的数字特征
缺点:无法匹配路由的掩码特征
# ACL 只能按数字特征匹配
rule permit source 192.168.1.0 0.0.0.255
# 但是无法区分以下三条路由:
# 192.168.1.0/24
# 192.168.1.0/25
# 192.168.1.0/26
# 以上 ACL 会同时匹配所有三条
2.2 IP 前缀列表(ip-prefix)
IP 前缀列表是专门为路由过滤设计的工具,可以精确匹配网络地址(前缀)和掩码长度(前缀长度)。
语法格式:
ip ip-prefix <名称> index <序号> <permit|deny> <网络地址> <掩码长度> \
[greater-equal <最小掩码>] [less-equal <最大掩码>]
匹配规则:从上而下,逐一匹配,一旦匹配即执行,不再向下匹配。末尾隐含拒绝所有。
精确匹配示例
设有四条路由:172.16.0.0/16、172.16.0.0/24、172.16.0.0/30、172.16.1.1/32
| IP 前缀列表 | 匹配结果 | 说明 |
|---|---|---|
permit 172.16.0.0 24 | 仅 /24 | 精确匹配掩码 24 |
permit 172.16.0.0 16 less-equal 24 | /16、/24 | 掩码 16-24 |
permit 172.16.0.0 16 greater-equal 24 | /24、/30、/32 | 掩码 24-32 |
permit 172.16.0.0 16 greater-equal 24 less-equal 30 | /24、/30 | 掩码 24-30 |
通配匹配示例
| IP 前缀列表 | 匹配结果 | 说明 |
|---|---|---|
permit 0.0.0.0 0 less-equal 32 | 所有路由 | 通配地址 = 任意前缀 |
permit 0.0.0.0 0 greater-equal 32 less-equal 32 | 仅主机路由 /32 | 掩码严格等于 32 |
permit 0.0.0.0 0 | 仅默认路由 0.0.0.0/0 | 特殊语句 |
多条目示例
# 拒绝 172.16.0.0/30,允许 /24,拒绝其他所有
ip ip-prefix ee index 10 deny 172.16.0.0 30
ip ip-prefix ee index 20 permit 172.16.0.0 24
# 最终只有 172.16.0.0/24 被允许(末尾隐含拒绝)
# 拒绝 172.16.0.0/30,允许所有其他
ip ip-prefix gg index 10 deny 172.16.0.0 30
ip ip-prefix gg index 20 permit 0.0.0.0 0 less-equal 32
# 除了 172.16.0.0/30,所有路由都被允许
三、执行策略的工具
3.1 Filter-Policy(过滤策略)
Filter-Policy 是一种路由过滤器,只能对路由信息进行过滤(允许/拒绝),无法修改路由属性,也无法对 LSA 进行过滤。
调用方向:
| 调用方向 | 含义 | 影响 |
|---|---|---|
import | 入方向过滤 | 阻止接收的路由进入路由表 |
export | 出方向过滤 | 阻止路由被通告出去 |
配置示例:RIP 路由过滤
需求:禁止 R2/R3 学习到 192.168.2.0/24 路由
# 1、抓取流量
[R2] ip ip-prefix aa deny 192.168.2.0 24 # 拒绝该路由
[R2] ip ip-prefix aa permit 0.0.0.0 0 less-equal 32 # 允许其他
# 2、做策略(入方向)
[R2] rip 1
[R2-rip-1] filter-policy ip-prefix aa import
使用 ACL 实现:
# 1、抓取流量
[R2] acl 2000
[R2-acl-basic-2000] rule deny source 192.168.2.0 0.0.0.255
[R2-acl-basic-2000] rule permit source any
# 2、做策略(出方向)
[R2] rip 1
[R2-rip-1] filter-policy 2000 export
3.2 Route-Policy(路由策略)
Route-Policy 是功能更强的路由策略工具,支持 If-Match(条件匹配)+ Apply(修改动作) 的组合模式。
结构模型:
Route-Policy <名称>
├── Node 10: if-match 条件 → apply 动作 (匹配则执行,不再向下)
├── Node 20: if-match 条件 → apply 动作
├── Node 30: if-match 条件 → apply 动作
└── (末尾隐含拒绝所有)
匹配规则:自上而下,逐一匹配,一旦节点内所有 if-match 条件都满足,则执行 apply 动作,不再继续向下匹配。末尾隐含拒绝所有。
序号之间预留间隔(如 10、20、30)是为了便于后续插入新节点。
四、OSPF 路由策略深度分析
对于 OSPF 等链路状态协议,Filter-Policy 在不同类型的 LSA 上行为不同:
4.1 各类 LSA 的策略行为
| LSA 类型 | 调用方向 | 影响效果 | 过滤原因 |
|---|---|---|---|
| 1/2 类 LSA | 入方向 | 仅影响本地 | 阻止拓扑生成路由 |
| 3 类 LSA | 入方向 | 影响 ABR 自身及后续区域 | 阻止根据 LSA 生成路由 → 不产生 3 类 LSA |
| 3 类 LSA | 出方向 | 无效 | - |
| 5/7 类 LSA | 入方向 | 本地不将 LSA 转路由,不阻止 LSA 传播 | 阻止路由生成 LSA |
| 5/7 类 LSA | 出方向 | 影响除 ASBR 外的所有设备 | 阻止 LSA 产生 |
4.2 OSPF Filter-Policy 配置示例
需求 1:禁止 R2/R3 学习到 192.168.1.0/24 路由
# 在 R1 出方向做过滤(3 类 LSA,影响所有区域)
[R1] acl 2000
[R1-acl-basic-2000] rule deny source 192.168.1.0 0.0.0.255
[R1-acl-basic-2000] rule permit source any
[R1-acl-basic-2000] quit
[R1] ospf 1
[R1-ospf-1] filter-policy 2000 export
需求 2:禁止 R5 收到 192.168.12.0/24 路由
# 在 R5 入方向过滤(仅影响本地路由表)
[R5] acl 2000
[R5-acl-basic-2000] rule deny source 192.168.12.0 0.0.0.255
[R5-acl-basic-2000] rule permit source any
[R5-acl-basic-2000] quit
[R5] ospf 1
[R5-ospf-1] filter-policy 2000 import
五、Route-Policy 配置实战
5.1 场景:RIP 重发布到 OSPF
环境:R1 运行 RIP,R2 同时运行 RIP 和 OSPF,需将 RIP 路由重发布到 OSPF 并做差异化处理。
R1 环回路由:
1.1.1.0/24→ 拒绝(不引入 OSPF)2.2.2.0/24→ 引入,修改 Cost 为 103.3.3.0/24→ 引入,修改 Cost Type 为 Type-14.4.4.0/24→ 引入,修改 Cost Type + Tag 66612.0.0.0/24→ 直接引入(不做处理)
配置步骤:
# ============ 步骤 1:抓取流量 ============
# 使用 ACL 抓取(用于 Node 10 和 Node 20)
[R2] acl 2000
[R2-acl-basic-2000] rule permit source 1.1.1.0 0.0.0.255
[R2-acl-basic-2000] quit
[R2] acl 2001
[R2-acl-basic-2001] rule permit source 2.2.2.0 0.0.0.255
[R2-acl-basic-2001] quit
# 使用 IP 前缀列表抓取(用于 Node 30 和 Node 40)
[R2] ip ip-prefix aa permit 3.3.3.0 24
[R2] ip ip-prefix bb permit 4.4.4.0 24
# ============ 步骤 2:做路由策略 ============
# Node 10:拒绝 1.1.1.0/24
[R2] route-policy RP permit node 10
[R2-route-policy] if-match acl 2000
[R2-route-policy] quit
# 注意:Node 10 模式是 deny(但这里是 permit 模式,apply 不写默认拒绝?)
# 正确写法 — Node 10 拒绝
[R2] route-policy RP deny node 10
[R2-route-policy] if-match acl 2000
[R2-route-policy] quit
# Node 20:允许 2.2.2.0/24,修改 Cost 为 10
[R2] route-policy RP permit node 20
[R2-route-policy] if-match acl 2001
[R2-route-policy] apply cost 10
[R2-route-policy] quit
# Node 30:允许 3.3.3.0/24,修改 Cost Type 为 Type-1
[R2] route-policy RP permit node 30
[R2-route-policy] if-match ip-prefix aa
[R2-route-policy] apply cost-type type-1
[R2-route-policy] quit
# Node 40:允许 4.4.4.0/24,修改 Cost Type + Tag
[R2] route-policy RP permit node 40
[R2-route-policy] if-match ip-prefix bb
[R2-route-policy] apply cost-type type-1
[R2-route-policy] apply tag 666
[R2-route-policy] quit
# Node 50:允许所有其他路由(相当于放行剩余路由)
[R2] route-policy RP permit node 50
[R2-route-policy] quit
# ============ 步骤 3:在重发布中调用 ============
[R2] ospf 1
[R2-ospf-1] import-route rip route-policy RP
5.2 验证配置
# 查看 Route-Policy 配置
display route-policy
# 查看 Route-Policy 名称 RP
display route-policy name RP
# 在 OSPF 中查看引入的外部路由
display ospf routing
# 查看路由的 Tag 和 Cost
display ip routing-table verbose
六、配置命令速查
6.1 IP 前缀列表
# 创建 IP 前缀列表
ip ip-prefix <名称> index <序号> <permit|deny> <网络地址> <掩码> \
[greater-equal <值>] [less-equal <值>]
# 常用通配模式
ip ip-prefix ALL permit 0.0.0.0 0 less-equal 32 # 允许所有
ip ip-prefix DEFAULT permit 0.0.0.0 0 # 仅默认路由
ip ip-prefix HOST permit 0.0.0.0 0 greater-equal 32 less-equal 32 # 仅主机路由
# 查看 IP 前缀列表
display ip ip-prefix
display ip ip-prefix name <名称>
6.2 Route-Policy
# 创建 Route-Policy
route-policy <名称> <permit|deny> node <序号>
# 常用 if-match 条件
if-match acl <编号>
if-match ip-prefix <名称>
if-match ip address prefix-list <名称>
if-match interface <接口>
if-match tag <值>
# 常用 apply 动作
apply cost <值> # 修改开销
apply cost-type type-1 # 修改开销类型
apply tag <值> # 修改 Tag
apply ip-address next-hop <IP> # 修改下一跳
apply preference <值> # 修改优先级
# 查看
display route-policy
display route-policy name <名称>
6.3 Filter-Policy
# RIP 中调用
[Router-rip-1] filter-policy <acl|ip-prefix> <编号|名称> <import|export>
# OSPF 中调用
[Router-ospf-1] filter-policy <acl|ip-prefix> <编号|名称> <import|export>
# 在接口下调用(RIP)
[Router-GigabitEthernet0/0/1] rip metricin route-policy <名称> <import|export>
七、ACL vs IP 前缀列表 vs Route-Policy 对比
| 特性 | ACL | IP 前缀列表 | Route-Policy |
|---|---|---|---|
| 匹配对象 | IP 地址 | 路由前缀 + 掩码长度 | 路由(可组合多种条件) |
| 掩码匹配 | 不支持 | 精确 + 范围匹配 | 通过调用前缀列表 |
| 修改能力 | 仅 permit/deny | 仅 permit/deny | 支持 apply 多种修改 |
| 节点机制 | 逐条匹配 | 逐条匹配 | 多节点,if-match + apply |
| 典型用途 | 数据层 ACL | 路由精准过滤 | 路由重发布、BGP 策略 |
| 灵活性 | 低 | 中 | 高 |
八、路由策略设计最佳实践
- 优先使用 IP 前缀列表:相比 ACL,IP 前缀列表能精准匹配掩码,更适合路由过滤场景
- Route-Policy 末尾放行:如果 Route-Policy 有多个 deny 节点,务必在最后一个节点使用
permit放行其他路由 - 预留节点序号:Route-Policy 节点序号间隔建议 10,便于后续插入
- 理解 LSA 过滤差异:OSPF 中不同 LSA 类型的过滤行为完全不同,需根据需求选择正确的调用方向
- 入方向 vs 出方向:入方向影响本地路由表(不影响其他设备),出方向影响下游设备
- 测试优先:在生产环境部署前,使用
display命令验证策略效果