Cisco策略路由(policy route)精解

:PBR以前是CISCO用来丢弃报文的一个主要手段。比如:设置set interface null 0,按CISCO说法这样会比ACLdeny要节省一些开销。这里我提醒:

interface null 0

no ip unreachable //加入这个命令

这样避免因为丢弃大量的报文而导致很多ICMP的不可达消息返回。

 

三层设备在转发数据包时一般都基于数据包的目的地址(目的网络进行转发),那么策略路由有什么特点呢?

1、可以不仅仅依据目的地址转发数据包,它可以基于源地址、数据应用、数据包长度等。这样转发数据包更灵活。

2、为QoS服务。使用route-map及策略路由可以根据数据包的特征修改其相关QoS项,进行为QoS服务。

3、负载平衡。使用策略路由可以设置数据包的行为,比如下一跳、下一接口等,这样在存在多条链路的情况下,可以根据数据包的应用不同而使用不同的链路,进而提供高效的负载平衡能力。

策略路由影响的只是本地的行为,所以可能会引起“不对称路由”形式的流量。比如一个单位有两条上行链路AB,该单位想把所有HTTP流量分担到A链路,FTP流量分担到B链路,这是没有问题的,但在其上行设备上,无法保证下行的HTTP流量分担到A链路,FTP流量分担到B链路。

策略路由一般针对的是接口入(in)方向的数据包,但也可在启用相关配置的情况下对本地所发出的数据包也进行策略路由。

本文就策略路由的以下四个方面做相关讲解:

1、启用策略路由

2、启用Fast-Switched PBR

3、启用Local PBR

4、启用CEF-Switched PBR

启用策略路由:

1.    开始配置route-map。使用route-map map-tag [permit | deny] [sequence-number]进入route-map的配置模式。

2.    使用match语句定义感兴趣的流量,如果不定义则指全部流量。match length min max and/or match ip address {access-list-number | name}[...access-list-number | name]

3.    使用set命令设置数据包行为。

  set ip precedence [number | name]

  set ip next-hop ip-address [... ip-address]

  set interface interface-type interface-number [... type number]

  set ip default next-hop ip-address [... ip-address]

  set default interface interface-type interface-number [... type ...number]

4.    这里要注意set ip next-hopset ip default next-hopset interfaceset default interface这两对语句的区别,不含default的语句,是不查询路由表就转发数据包到下一跳IP或接口而含有default的语句是先查询路由表,在找不到精确匹配的路由条目时,才转发数据包到default语句指定的下一跳IP或接口

5.    进入想应用策略路由的接口。interface xxx

6.    应用所定义的策略。注意必须在定义好相关的route-map后才能在接口上使用该route-map,在接口启用route-map策略的命令为:

ip policy route-map map-tag

 

启用Fast-Switched PBR

Cisco IOS Release 12.0之前,策略路由只能通过“进程转发”来转发数据包,这样数据包的转发效率是非常低的,在不同的平台上,基本在每秒100010,000个数据包。随着缓存转发技术的出现,Cisco实现了Fast-Switched PBR,大大提升了数据包的转发速度。启用方法即在接口中使用ip route-cache policy命令。

注意:Fast-switched PBR支持所有的match语句及大多数的set语句,但其有下面的两个限制:

1.    不支持set ip default next-hop set default interface命令。

2.    如果在route-cache中不存在set中指定的接口相关的项,那么仅在point-to-pointset interface命令才能够Fast-switched PBR。而且,在进行“进程转发”时,系统还会先查询路由条目查看该interface是不是一个合理的路径。而在fast switching时,系统不会对此进行检查。

 

启用Local PBR

默认情况下,路由器自身所产生的数据包不会被策略路由,如果想对路由器自身产生的数据包也进行策略路由,那么需要在全局模式下使用如下命令来启用:

ip local policy route-map map-tag

 

启用CEF-Switched PBR

在支持CEF的平台上,系统可以使用CEF-Switched PBR来提高PBR的转发速度,其转发速度比Fast-Switched PBR更快!只要你在启用PBR的路由器上启用了CEF,那么CEF-Switched PBR会自动启用。

注:ip route-cache policy仅仅适用于Fast-Switched PBR,在CEF-Switched PBR中并不需要,如果你在启用了CEF的路由器上使用PBR时,这个命令没有任何作用,系统会忽略此命令的存在。

PBR配置案例:

案例1

路由器通过两条不同的链路连接至两ISP,对于从async 1接口进入的流量,在没有“精确路由”匹配的情况下,把源地址为1.1.1.1的数据包使用策略路由转发至6.6.6.6, 源地址为2.2.2.2的数据包转发至7.7.7.7,其它数据全部丢弃。

配置如下:

access-list 1 permit ip 1.1.1.1

access-list 2 permit ip 2.2.2.2

!

interface async 1

 ip policy route-map equal-access

!

route-map equal-access permit 10

 match ip address 1

 set ip default next-hop 6.6.6.6

route-map equal-access permit 20

 match ip address 2

 set ip default next-hop 7.7.7.7

route-map equal-access permit 30

 set default interface null0

案例2

在路由器针对不同流量,修改其precedence bit,并设置下一跳地址。对于1.1.1.1产生的流量,设置precedence bitpriority,并设置其下一跳转发地址为3.3.3.3;对于2.2.2.2产生的流量,设置precedence bitcritical,并设置其下一跳转发地址为3.3.3.5

配置如下:

access-list 1 permit ip 1.1.1.1

access-list 2 permit ip 2.2.2.2

!

interface ethernet 1

   ip policy route-map Texas

!

route-map Texas permit 10

   match ip address 1

   set ip precedence priority

   set ip next-hop 3.3.3.3

!

route-map Texas permit 20

   match ip address 2

   set ip precedence critical

   set ip next-hop 3.3.3.5



试验目的1: 基于源地址的策略路由
           
源地址为 192.168.100.1的数据包走r2
           
源地址为 192.168.100.2的数据包走r4 R1 配置router>en
router#conf t
router(config)#host r1
r1(config)#no ip domain-lookup
r1(config)#ena sec 123
r1(config)#bann mot #Welcome to r1#
r1(config)#line vty 0 4
r1(config-line)#no login
r1(config-line)#int f 0/0
r1(config-if)#ip add 192.168.100.254 255.255.255.0
r1(config-if)#desc link to sw1
r1(config-if)#no shut
r1(config-if)#int f 0/1
r1(config-if)#ip add 192.168.2.1 255.255.255.252
r1(config-if)#desc link to r2
r1(config-if)#no shut
r1(config-if)#int e 1/0
r1(config-if)#ip add 192.168.2.5 255.255.255.252
r1(config-if)#desc link to r4
r1(config-if)#no shut
r1(config-if)#router ospf 1
r1(config-if)#network 192.168.100.0 0.0.0.255 area 0
r1(config-if)#network 192.168.2.0 0.0.0.3 area 0
r1(config-if)#network 192.168.2.4 0.0.0.3 area 0
r1(config-if)#exit
r1(config)#access-list 1 permit host 192.168.100.1
r1(config)#access-list 2 permit host 192.168.100.2
r1(config)#route-map cisco permit 10
r1(config-route-map)#match ip add 1
r1(config-route-map)#set ip next-hop 192.168.2.2
r1(config-route-map)#route-map cisco permit 20
r1(config-route-map)#match ip add 2
r1(config-route-map)#set ip next-hop 192.168.2.6
r1(config-route-map)#int f 0/0
r1(config-if)#ip policy route-map cisco
r1(config-if)#end
r1# r2
配置router>en
router#conf t
router(config)#host r2
r2(config)#no ip domain-lookup
r2(config)#ena sec 123
r2(config)#bann mot #Welcome to r2#
r2(config)#line vty 0 4
r2(config-line)#no login
r2(config-line)#int f 0/0
r2(config-if)#ip add 192.168.2.2 255.255.255.252
r2(config-if)#desc link to r1
r2(config-if)#no shut
r2(config-if)#int f 0/1
r2(config-if)#ip add 192.168.2.9 255.255.255.252
r2(config-if)#desc link to r3
r2(config-if)#no shut
r2(config-if)#router ospf 1
r2(config-if)#network 192.168.2.0 0.0.0.3 area 0
r2(config-if)#network 192.168.2.8 0.0.0.3 area 0
r2(config-if)#end
r2#r3
配置router>en
router#conf t
router(config)#host r3
r3(config)#no ip domain-lookup
r3(config)#ena sec 123
r3(config)#bann mot #Welcome to r3#
r3(config)#line vty 0 4
r3(config-line)#no login
r3(config-line)#int f 0/0
r3(config-if)#ip add 192.168.2.10 255.255.255.252
r3(config-if)#desc link to r2
r3(config-if)#no shut
r3(config-if)#int f 0/1
r3(config-if)#ip add 192.168.200.254 255.255.255.0
r3(config-if)#desc link to sw2
r3(config-if)#no shut
r3(config-if)#int e 1/0
r3(config-if)#ip add 192.168.2.14 255.255.255.252
r3(config-if)#desc link to r4
r3(config-if)#no shut
r3(config-if)#router ospf 1
r3(config-if)#network 192.168.200.0 0.0.0.255 area 0
r3(config-if)#network 192.168.2.8 0.0.0.3 area 0
r3(config-if)#network 192.168.2.12 0.0.0.3 area 0
r3(config-if)#end
r3#r4
配置 router>en
router#conf t
router(config)#host r4
r4(config)#no ip domain-lookup
r4(config)#ena sec 123
r4(config)#bann mot #Welcome to r4#
r4(config)#line vty 0 4
r4(config-line)#no login
r4(config-line)#int f 0/0
r4(config-if)#ip add 192.168.2.6 255.255.255.252
r4(config-if)#desc link to r1
r4(config-if)#no shut
r4(config-if)#int f 0/1
r4(config-if)#ip add 192.168.2.12 255.255.255.252
r4(config-if)#desc link to r3
r4(config-if)#no shut
r4(config-if)#router ospf 1
r4(config-if)#network 192.168.2.4 0.0.0.3 area 0
r4(config-if)#network 192.168.2.12 0.0.0.3 area 0
r4(config-if)#end
r4#
试验目的2: 基于目的地址的策略路由
           
目的地址为 192.168.200.1的数据包走r4
           
目的地址为 192.168.200.2的数据包走r2 R1 配置router>en
router#conf t
router(config)#host r1
r1(config)#no ip domain-lookup
r1(config)#ena sec 123
r1(config)#bann mot #Welcome to r1#
r1(config)#line vty 0 4
r1(config-line)#no login
r1(config-line)#int f 0/0
r1(config-if)#ip add 192.168.100.254 255.255.255.0
r1(config-if)#desc link to sw1
r1(config-if)#no shut
r1(config-if)#int f 0/1
r1(config-if)#ip add 192.168.2.1 255.255.255.252
r1(config-if)#desc link to r2
r1(config-if)#no shut
r1(config-if)#int e 1/0
r1(config-if)#ip add 192.168.2.5 255.255.255.252
r1(config-if)#desc link to r4
r1(config-if)#no shut
r1(config-if)#router ospf 1
r1(config-if)#network 192.168.100.0 0.0.0.255 area 0
r1(config-if)#network 192.168.2.0 0.0.0.3 area 0
r1(config-if)#network 192.168.2.4 0.0.0.3 area 0
r1(config-if)#exit
r1(config)#access-list 101 permit ip any host 192.168.200.1
r1(config)#access-list 102 permit ip any host 192.168.200.2
r1(config)#route-map cisco permit 10
r1(config-route-map)#match ip add 101
r1(config-route-map)#set ip next-hop 192.168.2.6
r1(config-route-map)#route-map cisco permit 20
r1(config-route-map)#match ip add 102
r1(config-route-map)#set ip next-hop 192.168.2.2
r1(config-route-map)#int f 0/0
r1(config-if)#ip policy route-map cisco
r1(config-if)#end
r1#r2
配置router>en
router#conf t
router(config)#host r2
r2(config)#no ip domain-lookup
r2(config)#ena sec 123
r2(config)#bann mot #Welcome to r2#
r2(config)#line vty 0 4
r2(config-line)#no login
r2(config-line)#int f 0/0
r2(config-if)#ip add 192.168.2.2 255.255.255.252
r2(config-if)#desc link to r1
r2(config-if)#no shut
r2(config-if)#int f 0/1
r2(config-if)#ip add 192.168.2.9 255.255.255.252
r2(config-if)#desc link to r3
r2(config-if)#no shut
r2(config-if)#router ospf 1
r2(config-if)#network 192.168.2.0 0.0.0.3 area 0
r2(config-if)#network 192.168.2.8 0.0.0.3 area 0
r2(config-if)#end
r2# r3
配置router>en
router#conf t
router(config)#host r3
r3(config)#no ip domain-lookup
r3(config)#ena sec 123
r3(config)#bann mot #Welcome to r3#
r3(config)#line vty 0 4
r3(config-line)#no login
r3(config-line)#int f 0/0
r3(config-if)#ip add 192.168.2.10 255.255.255.252
r3(config-if)#desc link to r2
r3(config-if)#no shut
r3(config-if)#int f 0/1
r3(config-if)#ip add 192.168.200.254 255.255.255.0
r3(config-if)#desc link to sw2
r3(config-if)#no shut
r3(config-if)#int e 1/0
r3(config-if)#ip add 192.168.2.14 255.255.255.252
r3(config-if)#desc link to r4
r3(config-if)#no shut
r3(config-if)#router ospf 1
r3(config-if)#network 192.168.200.0 0.0.0.255 area 0
r3(config-if)#network 192.168.2.8 0.0.0.3 area 0
r3(config-if)#network 192.168.2.12 0.0.0.3 area 0
r3(config-if)#end
r3#r4
配置router>en
router#conf t
router(config)#host r4
r4(config)#no ip domain-lookup
r4(config)#ena sec 123
r4(config)#bann mot #Welcome to r4#
r4(config)#line vty 0 4
r4(config-line)#no login
r4(config-line)#int f 0/0
r4(config-if)#ip add 192.168.2.6 255.255.255.252
r4(config-if)#desc link to r1
r4(config-if)#no shut
r4(config-if)#int f 0/1
r4(config-if)#ip add 192.168.2.12 255.255.255.252
r4(config-if)#desc link to r3
r4(config-if)#no shut
r4(config-if)#router ospf 1
r4(config-if)#network 192.168.2.4 0.0.0.3 area 0
r4(config-if)#network 192.168.2.12 0.0.0.3 area 0
r4(config-if)#end
r4#
试验目的3: 基于包大小的策略路由
           
数据包 0-100 字节时从r4
           
数据包 100-600 字节时从r2R1 配置router>en
router#conf t
router(config)#host r1
r1(config)#no ip domain-lookup
r1(config)#ena sec 123
r1(config)#bann mot #Welcome to r1#
r1(config)#line vty 0 4
r1(config-line)#no login
r1(config-line)#int f 0/0
r1(config-if)#ip add 192.168.100.254 255.255.255.0
r1(config-if)#desc link to sw1
r1(config-if)#no shut
r1(config-if)#int f 0/1
r1(config-if)#ip add 192.168.2.1 255.255.255.252
r1(config-if)#desc link to r2
r1(config-if)#no shut
r1(config-if)#int e 1/0
r1(config-if)#ip add 192.168.2.5 255.255.255.252
r1(config-if)#desc link to r4
r1(config-if)#no shut
r1(config-if)#router ospf 1
r1(config-if)#network 192.168.100.0 0.0.0.255 area 0
r1(config-if)#network 192.168.2.0 0.0.0.3 area 0
r1(config-if)#network 192.168.2.4 0.0.0.3 area 0
r1(config-if)#exit
r1(config)#route-map cisco permit 10
r1(config-route-map)#match length 0 100
r1(config-route-map)#set ip next-hop 192.168.2.6
r1(config-route-map)#route-map cisco permit 20
r1(config-route-map)#match length 100 600
r1(config-route-map)#set ip next-hop 192.168.2.2
r1(config-route-map)#int f 0/0
r1(config-if)#ip policy route-map cisco
r1(config-if)#end
r1#r2
配置router>en
router#conf t
router(config)#host r2
r2(config)#no ip domain-lookup
r2(config)#ena sec 123
r2(config)#bann mot #Welcome to r2#
r2(config)#line vty 0 4
r2(config-line)#no login
r2(config-line)#int f 0/0
r2(config-if)#ip add 192.168.2.2 255.255.255.252
r2(config-if)#desc link to r1
r2(config-if)#no shut
r2(config-if)#int f 0/1
r2(config-if)#ip add 192.168.2.9 255.255.255.252
r2(config-if)#desc link to r3
r2(config-if)#no shut
r2(config-if)#router ospf 1
r2(config-if)#network 192.168.2.0 0.0.0.3 area 0
r2(config-if)#network 192.168.2.8 0.0.0.3 area 0
r2(config-if)#end
r2#r3
配置 router>en
router#conf t
router(config)#host r3
r3(config)#no ip domain-lookup
r3(config)#ena sec 123
r3(config)#bann mot #Welcome to r3#
r3(config)#line vty 0 4
r3(config-line)#no login
r3(config-line)#int f 0/0
r3(config-if)#ip add 192.168.2.10 255.255.255.252
r3(config-if)#desc link to r2
r3(config-if)#no shut
r3(config-if)#int f 0/1
r3(config-if)#ip add 192.168.200.254 255.255.255.0
r3(config-if)#desc link to sw2
r3(config-if)#no shut
r3(config-if)#int e 1/0
r3(config-if)#ip add 192.168.2.14 255.255.255.252
r3(config-if)#desc link to r4
r3(config-if)#no shut
r3(config-if)#router ospf 1
r3(config-if)#network 192.168.200.0 0.0.0.255 area 0
r3(config-if)#network 192.168.2.8 0.0.0.3 area 0
r3(config-if)#network 192.168.2.12 0.0.0.3 area 0
r3(config-if)#end
r3#r4
配置router>en
router#conf t
router(config)#host r4
r4(config)#no ip domain-lookup
r4(config)#ena sec 123
r4(config)#bann mot #Welcome to r4#
r4(config)#line vty 0 4
r4(config-line)#no login
r4(config-line)#int f 0/0
r4(config-if)#ip add 192.168.2.6 255.255.255.252
r4(config-if)#desc link to r1
r4(config-if)#no shut
r4(config-if)#int f 0/1
r4(config-if)#ip add 192.168.2.12 255.255.255.252
r4(config-if)#desc link to r3
r4(config-if)#no shut
r4(config-if)#router ospf 1
r4(config-if)#network 192.168.2.4 0.0.0.3 area 0
r4(config-if)#network 192.168.2.12 0.0.0.3 area 0
r4(config-if)#end
r4#