Roye2012 发表于 2012-12-25 10:56:05

PBR+双出口NAT

本帖最后由 Roye2012 于 2012-12-25 11:13 编辑

学习耿叔CCNP视频第14部的时候,其中PBR案例四非常经典,不过明显耿叔稍微偷了点懒,没有配合Cisco SLA来帮助切换链路(CCNP视频13);并且叔做NAT的时候是通过Route-map中match ip + match出接口,NAT调用实现的,用了4条NAT。当时我在想,无论链路如何切换,最后出口都只有2个,能否直接Route-map中match出接口,NAT调用实现呢?
我的实验报告分享下:



需求概述
1、PC1访问Internet默认走ISP1(R1-R2),但R1-R2链路down之后能自动切换到ISP2(R1-R3);
2、PC2访问Internet默认走ISP2(R1-R3),但R1-R3链路down之后能自动切换到ISP1(R1-R2);
3、内网为私有IP,访问公网需要通过公网地址。

实验过程一、配置基本信息。配置如下:R1(config)#int fa0/0
R1(config-if)#ip add 192.168.10.254 255.255.255.0R1(config-if)#ip add 192.168.20.254 255.255.255.0 secondary R1(config-if)#no shut
R1(config-if)#int fa1/0
R1(config-if)#ip add 12.1.1.1 255.255.255.0R1(config-if)#no shut
R1(config-if)#int fa2/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0R1(config-if)#no shut

R2(config)#int fa0/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0R2(config-if)#no shut
R2(config)#int lo 0
R2(config-if)#ip add 4.4.4.4 255.255.255.0
R3(config)#int fa0/0
R3(config-if)#ip add 13.1.1.3 255.255.255.0R3(config-if)#no shut
R3(config)#int lo 0
R3(config-if)#ip add 4.4.4.4 255.255.255.0
PC1(config)#no ip routing
PC1(config)#int fa0/0
PC1(config-if)#ip add 192.168.10.1 255.255.255.0PC1(config-if)#no shut
PC1(config-if)#exit
PC1(config)#ip default-g 192.168.10.254
PC2(config)#no ip routing
PC2(config)#int fa0/0
PC2(config-if)#ip add 192.168.20.1 255.255.255.0PC2(config-if)#no shut
PC2(config-if)#exit
PC2(config)#ip default-g 192.168.20.254

二、配置SLA,监测R1到ISP1和ISP2链路的可达性。监测到ISP1链路(R1-R2)和监测到ISP2链路(R1-R3):R1(config)#ip sla monitor 10R1(config-sla-monitor-echo)#typeecho protocol ipIcmpEcho 12.1.1.2 source-ipaddr 12.1.1.1R1(config-sla-monitor-echo)#frequency 10R1(config-sla-monitor-echo)#exit
R1(config)#ip sla monitor schedule 10 life forever start-time nowR1(config)#track 10 rtr 10 reachabilityR1(config-track)#exit

R1(config)#ip sla monitor 20R1(config-sla-monitor-echo)#typeecho protocol ipIcmpEcho 13.1.1.3 source-ipaddr 13.1.1.1R1(config-sla-monitor-echo)#frequency 10R1(config-sla-monitor-echo)#exit
R1(config)#ip sla monitor schedule 20 life forever start-time nowR1(config)#track 20 rtr 20 reachabilityR1(config-track)#exit

//以上定义了track 10检测到ISP1的可达性,track 20检测到ISP2的可达性。


三、配置策略路由,使PC1访问Internet默认走ISP1(R1-R2),但R1-R2链路down之后能自动切换到ISP2(R1-R3);PC2访问Internet默认走ISP2(R1-R3),但R1-R3链路down之后能自动切换到ISP1(R1-R2)。R1(config)#access-list 1 per 192.168.10.0 0.0.0.255    //PC1所在网段R1(config)#access-list 2 per 192.168.20.0 0.0.0.255    //PC2所在网段R1(config)#route-map cutover per 10R1(config-route-map)#match ip add 1R1(config-route-map)#set ip next-hop verify-availability 12.1.1.2 1 track 10R1(config-route-map)#set ip next-hop verify-availability 13.1.1.3 2 track 20R1(config-route-map)#exit
R1(config)#route-map cutover per 20R1(config-route-map)#match ip add 2R1(config-route-map)#set ip next-hop verify-availability 13.1.1.3 1 track 20R1(config-route-map)#set ip next-hop verify-availability 12.1.1.2 2 track 10R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map cutover
说明:以上在R1的Fa0/0口上配置了策略路由cutover,实现如下效果:
满足ip add 1,并且下一跳12.1.1.2如可达,强制设置下跳为12.1.1.2
如不可达,则忽略此条Set语句,执行下一条Set语句。
在Set 1语句失效时,满足ip add 1, 并且下一跳13.1.1.3如可达,强制设置下跳为13.1.1.3
如不可达,则忽略此条Set语句,不执行策略路由。

满足ip add 2,并且下一跳13.1.1.3如可达,强制设置下跳为13.1.1.3
如不可达,则忽略此条Set语句,执行下一条Set语句。
在Set 1语句失效时,满足ip add 2, 并且下一跳12.1.1.2如可达,强制设置下跳为12.1.1.2
如不可达,则忽略此条Set语句,不执行策略路由。

总的来说,就是策略路由cutover将根据track 10和track 20监测结果,来决定执行与否命令。
如果检测结果是不可达,那么将拒绝执行此SET命令,匹配下一条SET语句。

其中红字标注的1和2表示执行顺序。


四、配置PAT策略,使PC1和PC2访问外网时可以正确转换为公网地址。R1(config)#route-map isp1 per 10R1(config-route-map)#match int fa1/0R1(config-route-map)#exit
R1(config)#route-map isp2 per 10R1(config-route-map)#match int fa2/0R1(config-route-map)#exit
R1(config)#ip nat inside source route-map isp1 int fa1/0 overload R1(config)#ip nat inside source route-map isp2 int fa2/0 overload R1(config)#int fa0/0
R1(config-if)#ip nat insideR1(config-if)#int fa1/0
R1(config-if)#ip nat outside R1(config-if)#int fa2/0
R1(config-if)#ip nat outside R1(config-if)#end

//路由器决定从Fa1/0出去的数据,NAT转换为公网地址12.1.1.1出去。
//路由器决定从Fa2/0出去的数据,NAT转换为公网地址13.1.1.1出去。


五、部分测试。
路由表如下,通过PAT和PBR,PC1和PC2都可以Ping通4.4.4.4
R1#sh ip ro
C    192.168.10.0/24 isdirectly connected, FastEthernet0/0C    192.168.20.0/24 isdirectly connected, FastEthernet0/0   12.0.0.0/24 is subnetted,1 subnetsC       12.1.1.0 is directlyconnected, FastEthernet1/0   13.0.0.0/24 is subnetted,1 subnetsC       13.1.1.0 is directlyconnected, FastEthernet2/0
1、在R1上开启debug ip policy后,用PC1去Ping一个远端网络4.4.4.4/24,查看debug信息(截取部分):
R1#deb ip policy
Policy routing debugging is on
R1#
*Mar1 01:31:00.003: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match*Mar1 01:31:00.003: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, g=12.1.1.2,len 100, FIB policy routed*Mar1 01:31:00.067: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match*Mar1 01:31:00.067: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, g=12.1.1.2,len 100, FIB policy routed

2、关闭R2上的Fa0/0口,模拟ISP1线路Down掉,用PC1去Ping一个远端网络4.4.4.4/24,查看debug信息(截取部分):
*Mar1 01:36:46.183: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match*Mar1 01:36:46.183: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, g=13.1.1.3,len 100, FIB policy routed*Mar1 01:36:46.391: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match*Mar1 01:36:46.391: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, g=13.1.1.3,len 100, FIB policy routed

结果:线路智能切换正常。

实验说明:
1、没有发生链路切换的时候,这里如果在PC1上Ping R3的Fa0/0口或者PC2上Ping R2的Fa0/0口是不通的,但是在现实环境中时可以Ping通的,路线走的是R2和R3之间的Internet线路。
2、R1上虽然没有任何去往远端网络的路由条目,但是PBR中的set ip next-hop会强制把这个数据包发往下一跳,只要PBR中下一跳可达(路由表中有此直连路由条目)。验证方法:例如在R2上开启debug ip icmp,在PC1上随便Ping一个5.5.5.5,看下R2上的debug结果。

strongerwxq 发表于 2012-12-25 11:13:04

楼主有才!
很棒的分享!
SLA加PBR加PAT的综合应用。
and,文档写得很赞!
小建议:拓扑中,与互联网相连的线缆,如果接口是FE端口,使用直线。如果是serial端口,才使用折线。折线代表慢速链路。

tea 发表于 2012-12-25 18:57:06

hehe ,看视频挺细心,不过,我可没偷懒,这玩意儿在项目中用的比较少,所以只是带过。

楼主相当有探索和深入研究的精神,而且实验做的很细致,相当的NICE

明天¤晴天℃ 发表于 2012-12-27 17:23:49

楼主好细心 分享的东西也好好
辛苦楼主 谢谢楼主的分享咯--

我心如水 发表于 2012-12-29 20:08:08

菜鸟问一句是不是策略路由啊...

杨景钧 发表于 2013-1-2 23:24:32

楼主好有心。不过有点异议   楼主实验中 R1=>R2 R1=>R3都是直连,你在sla中侦测的源地址 和目标地址 都是直接用的直连的物理接口这个有什么意义。直连的情况下 你配不配 sla 有什么区别。 router-map 中的set ip next-hop verify-availability    该命令本就是一条 检测下一跳是否可达后面的track加不加 意义不大。。再set 一个下一跳 就可以了   
                                                          拙见,欢迎讨论。

Roye2012 发表于 2013-1-4 09:41:28

杨景钧 发表于 2013-1-2 23:24 static/image/common/back.gif
楼主好有心。不过有点异议   楼主实验中 R1=>R2 R1=>R3都是直连,你在sla中侦测的源地址 和目标地址 都 ...

谢谢你的意见,很有用-smile-
我的想法是:
1、实验模型,想实现的完整一些,理解和学习里面的一些知识点。
2、模拟器GNS3中,虽然两端是直连链路,但是以太网链路中无法感知对端的设备接口是否down掉,串行链路可以。在实际现网中直连链路两端,无论是以太网链路或者串行链路都可以感知对端设备的接口是否down掉。
3、关于router-map中的set ip next-hop verify-availability,因为是通过思科私有协议CDP感知,需要两端都是思科设备,所以设备有额外开支,并且有安全性风险。SLA功能比较强大,要求自己这里是思科设备就行。
4、如果R1和R2、R1和R3之间有交换机,就要搭配SLA来切换链路了。

请叫我、老三 发表于 2013-3-30 20:30:26

向楼主学习   细心有想法

年哥 发表于 2013-7-24 15:53:24

路过,学习,留名!

ggdd2008 发表于 2014-11-21 18:00:40

-woniu1--woniu1--woniu1--woniu1-
页: [1] 2
查看完整版本: PBR+双出口NAT