路由策略(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 前缀列表——能精准匹配掩码;
- Route-Policy 末尾放行——多个 deny 节点后务必用
permit放行其余路由; - 预留节点序号——间隔 10,便于插入;
- 理解 LSA 过滤差异——OSPF 各 LSA 类型过滤行为不同,要选对调用方向;
- 入方向影响本地路由表,出方向影响下游设备;
- 生产部署前用
display命令验证策略效果。