PBR策略路由
Policy-based routing
之前所学习的是路由策略,这两个是完全不同的东西
路由策略:必须有路由,然后针对于路由施加策略
策略路由:很策略,后路由,可以没有路由
啥意思,
这样说,当一个数据包进入到路由器以后,
是先查策略,再查路由,然后再进行转发。
当然了,这项技术也是离不开route-map的。
配置思路
1 ACL匹配数据
2 route-map定义
3 接口挂接route-map。(PBR)
定义好的PBR,是一定要进行挂接的,如果不挂接,显然是不生效的,
另外,所挂接的接口也是有讲究的,是数据来的方向。
针对的数据有两种,一种是经过这里的,一种是本地的,所使用的挂接命令也是不同的,后面会详细讲到的。
应用场景
局域网出口网关,当出现多条路径时,可以使用PBR来实现指定选路,而不需要设置路由策略。
例1
如图所示,
R1和R2上分别做默认路由指向R3,
R3做为r4-r4两台模拟pc的GW,
在R1和R2上分别有一个loop 接口,地址都是100.1.1.1
R1,R2开启TELNET 功能
现要求,
R4 icmp 请求让其去往R2
R4 telnet 请求去往R1
R5 icmp请求去往R1
R5 telnet 请求去往R2
在R3上不做任何的路由指向
分析,
考虑到数据走向的问题,就要借助PBR,(policy based routing)策略路由
策略路由的实现也无外乎route-map
而route-map还要依靠acl,
刚才要求中提到的,有关于数据类型的,如telnet ,icmp,那么就可以使用较为精确的扩展ACL来帮助route-map实现这一功能,
具体实施
配置IP地址我就不说了
1 定义ACL,抓取具体的主机去往何处目标,干什么(更加的精细)
在实际的工作环境中,应该是针对网段的
Router(config)#access-list 100 permit icmp host 192.168.1.4 host 100.1.1.1 echo Router(config)#access-list 101 permit icmp host 192.168.1.5 host 100.1.1.1 echo Router(config)#access-list 102 per tcp hos 192.168.1.4 host 100.1.1.1 eq 23 Router(config)#access-list 103 per tcp hos 192.168.1.5 host 100.1.1.1 eq 23
2 编辑route-map
Router(config)#route-map wfy per 10 Router(config-route-map)#match ip add 100 Router(config-route-map)#set ip next-hop 23.0.0.1 ///强制指定下一跳为23.0.0.1,
也就是R4请求的icmp去往R2
Router(config-route-map)#exit
Router(config)#route-map wfy per 20 Router(config-route-map)#match ip add 101 Router(config-route-map)#set ip next-hop 13.0.0.1 //R5请求的ICMP去往R1 Router(config-route-map)#exit
Router(config)#route-map wfy per 30 Router(config-route-map)#match ip add 102 Router(config-route-map)#set ip next-hop 13.0.0.1 //R4的telnet 去往R1 Router(config-route-map)#exit
Router(config)#route-map wfy per 40 Router(config-route-map)#match ip add 103 Router(config-route-map)#set ip next-hop 23.0.0.1 //R5的TELNET请求去往R2
3 挂接
Router(config-route-map)#inter f1/0 Router(config-if)#ip policy route-map wfy 将策略挂接在接口上,使用route-map wfy
问:为什么要将它挂在接口上,而为什么又非得把它挂接在f1/0口上呢?
答:策略路由必须挂接在接口上才会生效,另外,这要考虑到数据的走向,
做为R4-R5的GW路由器,F1/0口是他们的网关地址,
当路由进入到接口以后,就要先查策略,如果有相应的策略就要按照策略进行转发,
如果没有策略的话,就要直接进行路由表的查询,
因为策略的优先级高于路由,所以必须让它在查路由表之前运行策略。
说人话,在查找策略的时候必须得有东西可查,要不然就查路由表出去了,策略也就没生效
4 测试
R4 进行telnet测试,去的是R1,并且可以相连
R5进行telnet测试,去的是R2,并且可以连接
至于icmp
我们要在R1 和 R2上开启debug ip icmp
来检测一个收到的echo包
R4是去往R2的,没问题
OK ,也是没有问题的。
至此实验结束
通过此实验得出以后结论
1 使用PBR 在定义route-map以及acl时,可以更加灵活的定义数据的走向,而不单纯的是路由
2 在部署PBR时,本地可以没有路由,但是必须两点互通,强制性的指向下一跳方向
其实PBR的应用方法还有几个,我们不防来看一下,
1 使用PBR实现多个下一跳
什么意思呢
就是当拥有多个下一跳时,可以通过pbr去设置他们的顺序,一条命令全部搞写,而不用再写多条,当第一个不可达,自动切换到第二个,第二个不行,则第三个,....
就是这样
R4(config-route-map)#set ip next-hop 14.0.0.1 24.0.0.2 34.0.0.3
直接在后面写个多next-hop即可
R4(config)#access-list 1 per host 192.168.1.10 R4(config)#route-map R4(config)#route-map aa per 10 R4(config-route-map)#ma ip add 1 R4(config-route-map)#set ip next-hop 14.0.0.1 24.0.0.2 34.0.0.3 //指定多个下一跳地址
然后就可以去模拟断到R4的F0/0,F0/1口,看效果啦~
2 PBR的下一跳(隔跳),next-hop非直连
那么非直连,肯定是要有路由的,确认自己的路由表中有这个地址的可达条目,且两端可以通信即可。
R1为一跳,R3为第二跳,最后的R4为备选默认路由,如果没有PBR策略路由最后则执行默认路由,优先级不同嘛.
下面只使用了一台PC,来进行模仿,省事儿了,
R5(config)#access-list 1 per host 92.168.1.10 R5(config)#route-map wfy per 10 R5(config-route-map)#ma ip add 1 R5(config-route-map)#set ip next-hop 15.0.0.1 R5(config-route-map)#set ip next-hop recursive 23.0.0.3 //设置可达的下一跳地址 R5(config-route-map)#ip route 0.0.0.0 0.0.0.0 45.0.0.4 R5(config)#inter f2/0 R5(config-if)#ip policy route-map wfy R5(config-if)#end
以一是几个PBR常见的场景,没有路由也可以正常使用,
那PBR有没有可能是针对自己本设备上生的数据进行设置方向呢?
当然可以
但是针对于本地而言,要在全局下进行
R1(config)#ip local policy route-map xxx
然后,并不是所有的pbr都优先于路由,有一种特殊的配置就是在路由之后的,
R1(config-route-map)#set ip default next-hop x.x.x.x
可如果PBR结合NAT使用呢? 如何实现呢?
敬请期待宿主NAT文档