PBR (policy-Based routing,策略路由)总结

来源:http://holtzhang.blog.51cto.com/340794/600371


一:PBR的功能介绍

    1:PBR可以用于路由重新分配。基于PBR我们可以在重新分配路由时有选择的重分配。(当然还有其它手段passive-interface,distribute-list,还有route-map实现)。一般来说,PBR是通过路由映射来配置的(route-map)。

2:影响下一跳。PBR在大规模边界网关协议BGP的运行中,是一个最必不可少的工具。传统的路由策略来自由路由协议计算出来的路由表。路由器只能根据报文的目的地址进行数据转发,不能提供有差别的服务。基于策略的路由可以基于数据包的源地址,甚至是源地址,目的地址,源端口,目的端口,四层协议以及报文大小,应用或者其它策略来选择转发路径。

3:设置优先级。PBR还可以给予外出数据包设置IP优先级位,这样方便了QOS策略。网络管理员可以根据实际工作的需要,灵活设置PBR机制,实现比传统路由协议更强的路由控制能力。

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

二:PBR的特点:

PBR影响的只是本地的行为,不会干预其它路由器的选路行为,当可以通过设置优先级位来用于其它路由器配置策略。当路由器进行数据转发时,路由器根据预先设置的策略对数据包进行匹配,如果匹配到一条PBR,就根据该条策略指定的路由进行转发;如果没有匹配到任何策略,就根据路由表的内容对报文进行转发。常用的PBR配置命令如下所示:                                                                             

route-map map-tag { permit |deny} [sequence number]        [定义PBR]

match ip address acl-id                [匹配ACL-id定义的流量]

match length min-byte max-byte[匹配报文大小为min-byte到max-byte大小的流量]

set ip next-hop ip-address [设置数据包下一条地址]

set ip default next-hop ip-address [设置数据包下一条地址]

set ip precedence [number|name]   [设置IP数据包优先级]

    set interface slot/number         [设置出接口]

set default interface slot/number [设置出接口]

ip policy route-map map-tag     [在接口下应用PBR]

ip local policy route-map map-tag  [对本地路由器产生的数据包执行PBR]

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

      

说明:route-map命令被用于定义策略,用permit和deny来标识是否执行路由转发。如果是permit,那么match是或的关系,也就是说只要有一个条件匹配(执行的顺序和ACL一样,同样是自上而下依次执行),那么set将会被执行;如果是deny,那么只有所有的match是与的关系,也就是说所有的条件都匹配的情况下set才会被执行。多条使用相同map-tag的route-map命令组成route-map statement(集合),集合中的语句根据sequence number依次执行。

 

三:PBR功能配置

拓扑:

 

    1:基于源IP地址的策略路由

要求: 192.168.1.0/24到外网时从R2的f1/0出去,192.168.2.0/24到外网时从R2的f2/0出去。

1:用ACL定义不同的源

access-list 1 permit 192.168.1.0 0.0.0.255

access-list 2 permit 192.168.2.0 0.0.0.255

2:定义route-map

R2(config)#route-map myPBR permit 10

R2(config-route-map)#match ip address 1

R2(config-route-map)#set interface f1/0

R2(config-route-map)#exit

R2(config)#route-map myPBR permit 20

R2(config-route-map)#match ip address 2

R2(config-route-map)#set interface f2/0

R2(config-route-map)#exit

3:将route-map调用到接口上

R2(config)#int f0/0

R2(config-if)#ip policy route-map myPBR

 

4: 测试:

R1#traceroute 5.5.5.5 source 192.168.1.1

 

Type escape sequence to abort.

Tracing the route to 5.5.5.5

 

  1 12.0.0.2 44 msec 64 msec 28 msec

  2 23.0.0.3 32 msec 76 msec 140 msec

  3 35.0.0.5 128 msec *  136 msec

 

R1#traceroute 5.5.5.5 source 192.168.2.1

 

Type escape sequence to abort.

Tracing the route to 5.5.5.5

 

  1 12.0.0.2 80 msec 60 msec 32 msec

  2 24.0.0.4 92 msec 64 msec 48 msec

  3 45.0.0.5 164 msec *  80 msec

//源IP192.168.1.0/24网络,访问外网走f1/0,

    源IP192.168.2.0/24网络,访问外网走f2/0。

    2:基于报文大小的策略路由

要求:在R2的f0/0端口上应用基于报文大小的策略路由haha,为大小小于100Byte的报文设置出接口f1/0,101-1000B的报文设置出口f2/0。

1:定义route-map

R2(config)#route-map haha permit 10

R2(config-route-map)#match length 1 100

R2(config-route-map)#set interface f1/0

R2(config-route-map)#exit

R2(config)#route-map haha permit 20

R2(config-route-map)#match length 101 1000

R2(config-route-map)#set interface f2/0

R2(config-route-map)#exit

2:将route-map调用到接口上

R2(config)#int f0/0

R2(config-if)#ip policy route-map haha

    3:基于应用的策略路由

要求:为TCP的报文设置出接口f1/0,为UDP设置出接口f2/0。

R2(config)#access-list 110 permit tcp any any

R2(config)#access-list 111 permit udp any any

R2(config)#route-map hehe permit 10

R2(config-route-map)#match ip address 110

R2(config-route-map)#set interface f1/0

R2(config-route-map)#exit

R2(config)#route-map hehe permit 20

R2(config-route-map)#match ip address 111

R2(config-route-map)#set interface f2/0

R2(config)#int f0/0

R2(config-if)#ip policy route-map hehe

     四:小结:

     PBR优于路由表,如果没有被PBR匹配的情况下使用路由表转发,PBR只对本地有效。