接上回,现在有了新的业务需求:

11.1.1.1和55.1.1.1之间的流量通过R1、R3、R4、R5转发

其它所有流量通过R1、R2、R4、R5转发

当R2故障后,要求所有流量通过R3转发

当R3故障后,要求所有流量通过R2转发

R1的S1/0链路是从运营商购买的拨号链路,通过IPCP获取到一条默认路由,不允许在这个方向上配置任何其它路由;(这一点很好滴模拟了很多企业会用一个廉价的宽带以及一个廉价的路由器来做备份出口,但是这种廉价的出口设备却基本不会提供什么控制层面的功能可供我们操作)


由于我手欠,把配置清了一下,因此这回就只好重新配置啦 

基本的IP地址配置部分省略,我去配一下,等我半分钟  (请一定不要忘记验证及测试哦)

其中R1和R3的PPP相关配置做展示,防止大家不知道怎么配置


R1

interface Serial1/0
  ip address negotiated
  encapsulation ppp
  ppp ipcp route default


R3(config)#ip local pool HAHA 13.1.1.100 13.1.1.110

interface Serial1/0
  ip address 13.1.1.3 255.255.255.0
  encapsulation ppp
  no peer neighbor-route
  peer default ip address pool HAHA


验证效果是这样的:

R1#show ip route static | begin Gateway
Gateway of last resort is 13.1.1.3 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 13.1.1.3


那么问题来了,R1的S1/0接口上已经有了一个默认路由,这将导致所有的流量都从这条低速链路经过,显然并不是我们想要的结果呢。

这条通过IPCP获取到的默认路由的管理距离不能修改,因此前面用过的第一招浮动静态路由显然不好使了;

那么第二招最长匹配呐?从理论上说,是可以的,然而,去往互联网上千千万万的流量,我们就要在上面的E0/1接口上写不知道多少条明细的路由才能将所有的其它流量都引导到上面那条链路,也就是说理论上可行,但是工作量上难以实现;


这一集我打算采用PBR解决这个需求;

PBR  基于策略的路由   

然而事实上这并不是路由,而是凌驾于路由表之上的一种策略,受策略影响的数据并不依据路由表转发,而是优先按照策略所定义的出接口和/或下一跳向外转发;

不得不考虑的是PBR这种解法方案对网络设备的CPU资源消耗是非常大的,然而它也是很多网络工程师不得不选择的解决方案。因为客户的需求高于一切,即使它并不那么“合理”。


基于策略的路由及静态路由规划如下图:

路由原理——多宿主网络案例分析(三)_第1张图片


在R1和R5上增加配置环回口用于测试:

R1(config)#interface loopback 1

R1(config-if)#ip address 11.1.1.2 255.255.255.255


R5(config)#interface loopback 1
R5(config-if)#ip address 55.1.1.2 255.255.255.255


在R1、R2、R3、R4、R5上书写静态路由,配合完成实验:

(配置静态路由的验证部分省略,篇幅太大看着烦)

R1(config)#ip route 0.0.0.0 0.0.0.0 e0/1 12.1.1.2 5


R2(config)#ip route 11.1.1.0  255.255.255.0  Ethernet0/1 12.1.1.1
R2(config)#ip route 55.1.1.0 255.255.255.0  Ethernet0/0 24.1.1.4


R3(config)#ip route 11.1.1.0 255.255.255.0 s1/0
R3(config)#ip route 55.1.1.0 255.255.255.0 e0/3 34.1.1.4


R4(config)#ip route 0.0.0.0 0.0.0.0 e0/0 24.1.1.2
R4(config)#ip route 0.0.0.0 0.0.0.0 e0/3 34.1.1.3 5
R4(config)#ip route 11.1.1.1 255.255.255.255 e0/3 34.1.1.3

R4(config)#ip route 55.1.1.0 255.255.255.0 e0/1 45.1.1.5


R5(config)#ip route 0.0.0.0 0.0.0.0 e0/1 45.1.1.4

(请验证静态路由的配置哦)


在R1上定义ACL,用于定义PBR影响哪些流量:

R1(config)#ip access-list extended PBR
R1(config-ext-nacl)#deny ip host 11.1.1.1 host 55.1.1.1
R1(config-ext-nacl)#permit ip any any


定义route-map,用于定义PBR对受影响的流量做何操作:

route-map PBR_1to5 permit 10
  match ip address PBR     //定义针对哪些流量做操作
  set ip next-hop 12.1.1.2      //定义操作内容:指定被ACL定义的流量强制发送往 12.1.1.2
  set ip next-hop verify-availability    //对下一跳12.1.1.2的可达性做验证,若不可达则放弃策略路由,由路由表执行转发决策


ip local policy route-map PBR_1to5   //全局调用route-map,部署策略路由,使得本路由器产生的流量受到影响;


测试及验证:

R1#show route-map
route-map PBR_1to5, permit, sequence 10
   Match clauses:
     ip address (access-lists): PBR
   Set clauses:
     ip next-hop 12.1.1.2
     ip next-hop verify-availability
   Policy routing matches: 0 packets, 0 bytes


R1#show ip policy
Interface      Route map
local          PBR_1to5


R1#traceroute 55.1.1.1 source 11.1.1.1 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
   1 13.1.1.3 9 msec 9 msec 9 msec
   2 34.1.1.4 11 msec 9 msec 11 msec
   3 45.1.1.5 10 msec *  10 msec


R1#traceroute 55.1.1.2 source 11.1.1.2 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.2
VRF info: (vrf in name/id, vrf out name/id)
  1 12.1.1.2 1 msec 1 msec 1 msec
   2 24.1.1.4 0 msec 1 msec 0 msec
   3 45.1.1.5 2 msec *  2 msec


R1#show ip access-lists
Extended IP access list PBR
     10 deny ip host 11.1.1.1 host 55.1.1.1 (23 matches)
     20 permit ip any any (51 matches)


R1#show route-map
route-map PBR_1to5, permit, sequence 10
   Match clauses:
     ip address (access-lists): PBR
   Set clauses:
     ip next-hop 12.1.1.2
     ip next-hop verify-availability
   Policy routing matches: 33 packets, 1810 bytes


测试结果显示数据按照我们的需求路径转发,并且ACL及route-map均有匹配,说明PBR生效啦;

当然,不要着急哦,现在则需要关闭R1的E0/1和R4的E0/0,测试一下,是否所有的流量都从R3转发了呐? (严谨真的很重要)

R1#traceroute 55.1.1.1 source 11.1.1.1 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
   1 13.1.1.3 10 msec 9 msec 9 msec
   2 34.1.1.4 9 msec 9 msec 10 msec
   3 45.1.1.5 10 msec *  10 msec


R1#traceroute 55.1.1.2 source 11.1.1.2 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.2
VRF info: (vrf in name/id, vrf out name/id)
   1 13.1.1.3 10 msec 9 msec 9 msec
   2 34.1.1.4 9 msec 9 msec 9 msec
   3 45.1.1.5 10 msec *  11 msec


恢复R1的E0/1和R4的E0/0,现在模拟R3故障,看看流量又是否通过R2转发了呐?

R1#traceroute 55.1.1.1 source 11.1.1.1 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
   1 12.1.1.2 1 msec 1 msec 0 msec
   2 24.1.1.4 1 msec 1 msec 0 msec
   3 45.1.1.5 1 msec *  1 msec


R1#traceroute 55.1.1.2 source 11.1.1.2 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.2
VRF info: (vrf in name/id, vrf out name/id)
   1 12.1.1.2 1 msec 0 msec 1 msec
   2 24.1.1.4 0 msec 1 msec 1 msec
   3 45.1.1.5 2 msec *  1 msec


测试完毕。


总结:

本解决方案,主要为让大家针对PBR的实战项目做练习,其中对路由原理、PBR的应用及链路故障之后是否能够跟随故障自动切换流量有所考察和练习,有关PBR的理论部分,欢迎大家关注后续课程。


(未完待续)