策略路由
基础概念
路由策略和策略路由就是名字很像,没有什么特别的联系,完全是两个模块。
我在工作当中遇到与策略路由相关的案例一般都集中在核心交换机上,相当一部分的企业架构,网关集中在核心交换机或汇聚交换机,如果他们想上一台防火墙,用于不同的VLAN或不同网段的安全策略控制,又不想过多的改变当前网络的环境,我们通常会给它在网关所处的核心交换机上使用策略路由,通过策略路由强行修改路由的下一条将流量引入到防火墙。
- PBR:policy_based-route 简称策略路由
- 一种摆脱用户制定的策略进行路由选择的机制,增强路由选择的灵活性和可控性。
- 使用不同的数据流通过不同的链路进行发送,提高链路的利用效率。
策略路由
正常情况下的流量选路都是根据路由表,但有些时候我们不想让流量走路由表,我们希望流量走我们给它指定的路径,比如说我们上面提到的场景,如果网关都集中在一台核心交换机,那不同的网段之间按照核心交换机的路由默认是可以直接通信的,但是我现在旁挂了一台防火墙希望不同的网段之间不要直接通过核心交换机直接访问,而是把流量都引入到防火墙当中,从防火墙当中过滤一下,这种情况下,策略路由是一个很好的解决方案。
总结:传统的路由转发原理首先根据报文的目的地址查找路由表,然后进行报文转发。但是目前越来越多的用户希望在传统路由转发的基础上根据自己定义的策略进行报文转发和选路。
策略路由是什么?
策略路由一种理念,并不是一种技术或软件
策略路由的生效地点:
在进入路由表之前,如果策略路由没有匹配到流量 ,流量还是可以正常去路由表当中转发的。
那基于接口的策略路由是如何帮助流量不使用路由表进行转发呢?
其实是通过一个模块,一个叫MQC的模块,这个模块功能很强大,正好可以实现策略路由的理念。MQC是一个非常牛的模块,在各个场合都能看到它的身影,比如在SD-WAN当中,在QOS当中。
MQC为什么这么厉害呢?
MQC有三板斧,匹配流量,这一点ACL也能做到,没什么厉害的,它的厉害之处体现在第二个板斧上,在匹配到流量之后可以进行修改特别多的参数,就比如说是下一跳出接口,它就可以直接修改,这样就不用实现了策略路由了嘛!第三板斧没啥好说的,就是将第一板斧和第二板斧结合起来形成一个策略,这个策略制定完成之后就可以去策略上进行调用了。MQC这里就不做详细的介绍了,我们有专门的博客介绍过MQC。
路由策略与策略路由的根据区别:
路由策略就是匹配住流量之后进行修改或过滤,是在路由控制层面生效的,可以用来控制路由表的生成,路由条目的转发。而策略路由直接作用于数据层面,如果感觉数据层面不好理解,你也可以理解为直接就作用在路由表之前,一旦被策略路由匹配住了,就不会再查路由表了。
策略路由的调用之处:
策略路由是在路由生效之前调用,所以调用的时候要尽可能向前调用,一般在入接口调用。
路由策略和策略路由两者可以同时存在吗?
是可以的,都不是一个系统的玩意儿,两者一块用并不冲突!
策略路由的分类:
分为两种:本地策略路由和接口策略路由。非常好理解,本地策略路由只能影响本身发出去的流量,对转发的流量不生效,而接口策略路由对转发的流量也是生效,所以我们平时使用比较多的是接口策略路由。
基于本地的策略路由的基础配置:
# 基于本地策略路由配置
policy-based-route test permit node 10
if-match 2000
if-match packet-length 64 10000
apply output-inteface g0/0/1
apply ip-address nex-h0p 120.0.2
ip local policy-based-route test
基于接口的策略路由的基础配置:
非常简单,就MQC那一套,三板斧
实验
基础环境
拓扑介绍:这个拓扑非常简单,如果我们全都使用同一个路由协议配置的话,那BR1和BR4上都会显示负载均衡。虽然理论上就负载均衡,但默认流量的逐流的,而不是逐包的,所以流量永远只走一条链路。
实验目标:希望来回路径不一致
# 基础配置
# BR1
sys
sysn BR1
int l0
ip add 10.0.1.1 32
int g0/0/0
ip add 192.168.10.1 24
int g0/0/1
ip add 10.0.13.1 24
int g0/0/2
ip add 10.0.12.1 24
ospf 1 router-id 10.0.1.1
a 0
network 0.0.0.0 0.0.0.0
quit
# BR4
sys
sysn BR4
int l0
ip add 10.0.4.4 32
int g0/0/0
ip add 10.0.24.2 24
int g0/0/1
ip add 10.0.34.4 24
int g0/0/2
ip add 192.168.20.1 24
ospf 1 router-id 10.0.4.4
a 0
network 0.0.0.0 0.0.0.0
quit
# BR2
sys
sysn BR2
int l0
ip add 10.0.2.2 32
int g0/0/0
ip add 10.0.12.2 24
int g0/0/1
ip add 10.0.24.3 24
ospf 1 router-id 10.0.2.2
a 0
network 0.0.0.0 0.0.0.0
quit
# BR3
sys
sysn BR3
int l0
ip add 10.0.3.3 32
int g0/0/0
ip add 10.0.13.3 24
int g0/0/1
ip add 10.0.34.3 24
ospf 1 router-id 10.0.3.3
a 0
network 0.0.0.0 0.0.0.0
quit
方法一:通过开销
当前的现状的是负载均衡,但实际上是流量全都走BR1和BR2这一条路径,我们要通过开销来实现来回路径不一致。
# BR1,当前是负载,从10.0.4.4的开销是BR3的开销加上BR1的开销之各,正好是2
dis ip rout pro ospf
10.0.4.4/32 OSPF 10 2 D 10.0.12.2 GigabitEthernet0/0/2
OSPF 10 2 D 10.0.13.3 GigabitEthernet0/0/1
# BR1
# 我们把开销一改,这样BR1去往10.0.4.4就要会走10.0.12.2,即上面那条路由
int g0/0/1
ospf cost 2
那BR4呢?还是负载,这样流量路径就不一致了
[BR4]dis ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 6 Routes : 8
OSPF routing table status : <Active>
Destinations : 6 Routes : 8
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.1.1/32 OSPF 10 2 D 10.0.24.3 GigabitEthernet
0/0/0
OSPF 10 2 D 10.0.34.3 GigabitEthernet
这样就可以了,BR1去BR4的流量,请求包走上面那条路由,回来的包走下面这条路。
方法二:接口策略路由
acl number 3000
rule 0 permit ip source 192.168.10.2 0
traffic classifier test_c operator or
if-match acl 3000
traffic behavior test-b
redirect ip-nexthop 10.0.13.3
traffic policy test_p
classifier test_c behavior test-b
# 在BR1的入接口进行调用
int g0/0/0