雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9694|回复: 12

[讨论/求助] PBR+双出口NAT

[复制链接]
发表于 2012-12-25 10:56:05 | 显示全部楼层 |阅读模式
本帖最后由 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.0
R1(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.0
R1(config-if)#no shut
R1(config-if)#int fa2/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0
R1(config-if)#no shut

R2(config)#int fa0/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(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.0
R3(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.0
PC1(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.0
PC2(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 10
R1(config-sla-monitor-echo)#typeecho protocol ipIcmpEcho 12.1.1.2 source-ipaddr 12.1.1.1
R1(config-sla-monitor-echo)#frequency 10
R1(config-sla-monitor-echo)#exit
R1(config)#ip sla monitor schedule 10 life forever start-time now
R1(config)#track 10 rtr 10 reachability
R1(config-track)#exit

R1(config)#ip sla monitor 20
R1(config-sla-monitor-echo)#typeecho protocol ipIcmpEcho 13.1.1.3 source-ipaddr 13.1.1.1
R1(config-sla-monitor-echo)#frequency 10
R1(config-sla-monitor-echo)#exit
R1(config)#ip sla monitor schedule 20 life forever start-time now
R1(config)#track 20 rtr 20 reachability
R1(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 10
R1(config-route-map)#match ip add 1
R1(config-route-map)#set ip next-hop verify-availability 12.1.1.2 1 track 10
R1(config-route-map)#set ip next-hop verify-availability 13.1.1.3 2 track 20
R1(config-route-map)#exit
R1(config)#route-map cutover per 20
R1(config-route-map)#match ip add 2
R1(config-route-map)#set ip next-hop verify-availability 13.1.1.3 1 track 20
R1(config-route-map)#set ip next-hop verify-availability 12.1.1.2 2 track 10
R1(config-route-map)#exit
R1(config)#int fa0/0
R1(config-if)#ip policy route-map cutover

说明:以上在R1Fa0/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 10track 20监测结果,来决定执行与否命令。
如果检测结果是不可达,那么将拒绝执行此SET命令,匹配下一条SET语句。

其中红字标注的12表示执行顺序。


四、配置PAT策略,使PC1和PC2访问外网时可以正确转换为公网地址。
R1(config)#route-map isp1 per 10
R1(config-route-map)#match int fa1/0
R1(config-route-map)#exit
R1(config)#route-map isp2 per 10
R1(config-route-map)#match int fa2/0
R1(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 inside
R1(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/0
C    192.168.20.0/24 isdirectly connected, FastEthernet0/0
     12.0.0.0/24 is subnetted,1 subnets
C       12.1.1.0 is directlyconnected, FastEthernet1/0
     13.0.0.0/24 is subnetted,1 subnets
C       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#
*Mar  1 01:31:00.003: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match
*Mar  1 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
*Mar  1 01:31:00.067: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match
*Mar  1 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信息(截取部分):
*Mar  1 01:36:46.183: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match
*Mar  1 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
*Mar  1 01:36:46.391: IP:s=192.168.10.1 (FastEthernet0/0), d=4.4.4.4, len 100, FIB policy match
*Mar  1 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结果。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2012-12-25 11:13:04 | 显示全部楼层
楼主有才!
很棒的分享!
SLA加PBR加PAT的综合应用。
and,文档写得很赞!
小建议:拓扑中,与互联网相连的线缆,如果接口是FE端口,使用直线。如果是serial端口,才使用折线。折线代表慢速链路。
发表于 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 一个下一跳 就可以了   
                                                          拙见,欢迎讨论。
 楼主| 发表于 2013-1-4 09:41:28 | 显示全部楼层
杨景钧 发表于 2013-1-2 23:24
楼主好有心。  不过有点异议   楼主实验中 R1=>R2 R1=>R3  都是直连,你在sla中侦测的源地址 和目标地址 都 ...

谢谢你的意见,很有用
我的想法是:
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 | 显示全部楼层
路过,学习,留名!
发表于 2014-11-21 18:00:40 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-11-21 22:11 , Processed in 0.092478 second(s), 19 queries , Gzip On.

快速回复 返回顶部 返回列表