经典案例系列分享之二:双ISP情况下冗余、负载分担的案例【Cisco路由器】 | 网络之路博客(公众号同名)(其他平台网络之路Blog)
登录
  • 欢迎网络之路博客网站,分享有用的知识点,公众号:网络之路博客,B站:网络之路Blog
  • 如果您觉得本站对您有帮助,那么赶紧使用Ctrl+D 收藏吧,支持我们下
  • 远程技术支持的淘宝店铺已经开张了哦,传送门:需要的朋友可以点击查看

经典案例系列分享之二:双ISP情况下冗余、负载分担的案例【Cisco路由器】

【汇总】经典案例系列

文档帖子汇总学习视频Book与实验手册学习必备软件
    博主也只是业余时间写写技术文档,请大家见谅,大家觉得不错的话,可以推荐给朋友哦,博主会努力推出更好的系列文档的。如果大家有任何疑问或者文中有错误跟疏忽的地方,欢迎大家留言指出,博主看到后会第一时间修改,谢谢大家的支持,更多技术文章尽在网络之路博客,http://ccieh3c.com

简介

现在企业对于双ISP的需求越来越大了,Cisco的路由器解决起来比ASA好,因为ASA作为防火墙的存在,它只能有一条默认路由存在,而且不支持策略路由,所以对于ASA的实现难度很大,而路由器有策略路由加上cisco-NAT跟SLA的辅助,实现起来比较容易。其实也是朋友让我总结下解决方案,正好以前做过一次。【可用GNS3模拟器模拟】

 image001.jpg

这里的负载均衡是指内网的负载均衡,如果实现电信走电信,联通走联通的话,那么估计很难,因为要知道电信和联通所有的网段,现在的网段变化很大,最后没有匹配的还是走默认路由出去, 这里是模拟一个双ISP的情况下,cisco-PC1默认走cisco-ISP1走,P2C默认走cisco-ISP2走,无论哪边出现了故障,都能自动切换到对端进行流量转发。
这个环境是 cisco-PC1 cisco-PC2 和R2出口起EIGRP ,出口下放缺省到内部。这里不做PPPOE拨号了,用手工配置地址来模拟下,R3 R4 server起OSPF,模拟internet。 server模拟公网上一台服务器。

基本配置

基本配置
cisco-PC1(config)#int f0/0
cisco-PC1(config-if)#speed 100
cisco-PC1(config-if)#full-duplex
cisco-PC1(config-if)#ip add 192.168.1.1 255.255.255.0
cisco-PC1(config-if)#no shut
cisco-PC1(config-if)#int lo 0
cisco-PC1(config-if)#ip add 1.1.1.1 255.255.255.255

cisco-PC2(config)#int f0/0
cisco-PC2(config-if)#ip add 192.168.1.2 255.255.255.0
cisco-PC2(config-if)#no shut
cisco-PC2(config-if)#speed 100
cisco-PC2(config-if)#full-duplex
cisco-PC2(config-if)#int lo 0
cisco-PC2(config-if)#ip add 2.2.2.2 255.255.255.255

cisco-NAT(config)#int f1/0 内部 的接口
cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0
cisco-NAT(config-if)#no shut
cisco-NAT(config)#int f1/0
cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0
cisco-NAT(config-if)#no shut

cisco-NAT(config-if)#int f0/0 cisco-ISP1 的接口
cisco-NAT(config-if)#ip add 23.1.1.1 255.255.255.252
cisco-NAT(config-if)#no shut
cisco-NAT(config-if)#speed 100
cisco-NAT(config-if)#full-duplex

cisco-NAT(config)#int f0/1 cisco-ISP2 的接口
cisco-NAT(config-if)#ip add 24.1.1.1 255.255.255.0
cisco-NAT(config-if)#speed 100
cisco-NAT(config-if)#full-duplex
cisco-NAT(config-if)#no shu

这里关于路由,等后续在弄,因为要跟SLA做联动。

cisco-ISP1(config)#int f0/0
cisco-ISP1(config-if)#speed 100
cisco-ISP1(config-if)#full-duplex
cisco-ISP1(config-if)#ip add 23.1.1.2 255.255.255.252
cisco-ISP1(config-if)#no shut
cisco-ISP1(config-if)#int f0/1
cisco-ISP1(config-if)#ip add 35.1.1.1 255.255.255.252
cisco-ISP1(config-if)#no shut
cisco-ISP1(config-if)#speed 100
cisco-ISP1(config-if)#full-duplex

cisco-ISP2(config)#int f0/1
cisco-ISP2(config-if)#speed 100
cisco-ISP2(config-if)#full-duplex
cisco-ISP2(config-if)#ip add 24.1.1.2 255.255.255.252
cisco-ISP2(config-if)#no shut
cisco-ISP2(config-if)#int f0/0
cisco-ISP2(config-if)#ip add 45.1.1.1 255.255.255.252
cisco-ISP2(config-if)#no shut

cisco-Server(config)#int f0/1
cisco-Server(config-if)#speed 100
cisco-Server(config-if)#full-duplex
cisco-Server(config-if)#ip add 35.1.1.2 255.255.255.252
cisco-Server(config-if)#no shut
cisco-Server(config-if)#int f0/0
cisco-Server(config-if)#ip add 45.1.1.2 255.255.255.252
cisco-Server(config-if)#no shut
cisco-Server(config-if)#int lo 0
cisco-Server(config-if)#ip add 5.5.5.5 255.255.255.255

接口信息搞定,开始把Internet 路由打通

cisco-ISP1(config)#router ospf 1
cisco-ISP1(config-router)#router-id 3.3.3.3

cisco-ISP1(config-router)#network 23.1.1.0 0.0.0.3 a 0
cisco-ISP1(config-router)#network 35.1.1.0 0.0.0.3 a 0
cisco-ISP1(config-router)#passive-interface f0/0

cisco-ISP2(config-if)#router ospf 1
cisco-ISP2(config-router)#router-id 4.4.4.4
cisco-ISP2(config-router)#network 24.1.1.0 0.0.0.3 a 0
cisco-ISP2(config-router)#passive-interface f0/1
cisco-ISP2(config-router)#network 45.1.1.0 0.0.0.3 a 0

cisco-Server(config-if)#router ospf 1
cisco-Server(config-router)#router-id 5.5.5.5
cisco-Server(config-router)#network 0.0.0.0 0.0.0.0 a 0
这里server就偷懒了 直接全部宣告,上面的被动接口设置是习惯性的问题,实验环境无所谓的。

 image002.jpg
 image004.jpg

internet模拟完成,关键在内部了。

cisco-NAT(config-if)#router eigrp 1
cisco-NAT(config-router)#no auto-summary
cisco-NAT(config-router)#network 192.168.1.0 0.0.0.255

cisco-PC1(config-if)#router eigrp 1
cisco-PC1(config-router)#no auto-summary
cisco-PC1(config-router)#network 1.1.1.1 0.0.0.0
cisco-PC1(config-router)#network 192.168.1.0 0.0.0.255

cisco-PC2(config-if)#router eigrp 1
cisco-PC2(config-router)#no auto-summary
cisco-PC2(config-router)#network 192.168.1.0 0.0.0.255
cisco-PC2(config-router)#network 2.2.2.2 0.0.0.0

这里静态路由,如果直接写两条缺省的话,那么如果cisco-ISP1或cisco-ISP2出现了故障,而我们这边缺省路由却一直存在,可能会造成数据包黑洞的问题,所以这里必须与SLA做联动,检测对方的存在,如果在规定的时间内没有响应 这条路由也自动消失。

先定义两个SLA。

cisco-NAT(config)#ip sla 1 关于cisco-ISP1的
cisco-NAT(config-ip-sla)#icmp-echo 23.1.1.2
cisco-NAT(config-ip-sla-echo)#frequency 10
cisco-NAT(config)#ip sla schedule 1 start-time now life forever
cisco-NAT(config)#track 1 ip sla 1
cisco-NAT(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2 track 1
这里定义一个sla,探测23.1.1.2 cisco-ISP1的接口地址,频率为每10s一次,第四句话是说这个sla从现在开始执行,不会停止。然后用track调用这个SLA,最后关联到去往23.1.1.2的缺省上, 这里如果cisco-ISP1或者自己接口出现了问题,那么这条路由会自动消失。
这里注意的是,可能IOS版本不同,调用的命令也不同 track 1 rtr 1 有些版本是这样调用的。

cisco-NAT(config)#ip sla 2
cisco-NAT(config-ip-sla)#icmp-echo 24.1.1.2
cisco-NAT(config-ip-sla-echo)#frequency 10
cisco-NAT(config)#ip sla schedule 2 start-time now life forever
cisco-NAT(config)#track 2 ip sla 2
cisco-NAT(config)#ip route 0.0.0.0 0.0.0.0 24.1.1.2 track 2

 image004.jpg

show ip sla statistics查看SLA的状态,successes代表每频率测试成功的次数,faulures是失败的次数。

 image005.jpg

路由也正常

cisco-NAT(config-router)#redistribute static
把缺省推到内部,让它们的流量都引到cisco-NAT设备上来。

开始最重要的部分

1、关于cisco-NAT的写法,我们平常用的习惯ACL来调用,但是这里是双出口,如果用ACL来调用可能会产生混淆,cisco-NAT除了可以调用ACL以外,还能调用route-map,我们可以用route-map来设定一些规则,才允许cisco-NAT转换。

2、关于缺省路由由于是负载均衡,所以必须用策略路由把内部流量在经过cisco-NAT的时候强行引入某一个cisco-NAT,不然它就不按你的规则走了。

cisco-NAT(config)#ip access-list extended cisco-PC1
cisco-NAT(config-ext-nacl)#permit ip 1.1.1.0 0.0.0.255 any

cisco-NAT(config)#ip access-list extended cisco-PC2
cisco-NAT(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 any

cisco-NAT(config)#route-map cisco-NAT1 permit 10
cisco-NAT(config-route-map)#match ip address cisco-PC1
cisco-NAT(config-route-map)#match interface f0/0
cisco-NAT(config)#ip nat inside source route-map cisco-NAT1 interface f0/0 overload

cisco-NAT(config)#route-map cisco-NAT2 permit 10
cisco-NAT(config-route-map)#match ip address cisco-PC2
cisco-NAT(config)#ip nat inside source route-map cisco-NAT2 interface f0/1 overload

分析下这里为什么要定义两个route-map,第一个是必须满足ACL匹配的属于cisco-PC1的流量,第二个就是必须满足接口是up的,因为这个是与的操作,所以这两个要求必须同时满足才进行到f0/0的地址转换。
第二route-map就直接匹配cisco-PC2的流量就能转换了,它转换的接口就是f0/1。

cisco-NAT(config)#route-map cisco-NAT3 permit 10
cisco-NAT(config-route-map)#match ip address cisco-PC1
cisco-NAT(config-route-map)#match interface f0/1
cisco-NAT(config)#ip nat inside source route-map cisco-NAT3 interface f0/1 overload

cisco-NAT(config)#route-map cisco-NAT4 permit 10
cisco-NAT(config-route-map)#match ip address cisco-PC2
cisco-NAT(config)#ip nat inside source route-map cisco-NAT4 interface f0/0 overload

这里也是一样,但是发现一个问题就是,关于F0/0和F0/1都有各自cisco-PC1和cisco-PC2匹配的流量,这样当一个数据包过来 它可能会匹配f0/0接口出去,也可以匹配f0/1出去,所以我们必须用一个工具来控制它。那就是策略路由。 这里注意调用ACL的时候 是大写PC

注意的是,策略路由默认只对入接口的流量做策略,本地的不算在内,可以通过ip local policy route-map 来生效。另外就是一个接口只能调用一个策略的map。

cisco-NAT(config)#route-map policy permit 10
cisco-NAT(config-route-map)# match ip address cisco-PC1
cisco-NAT(config-route-map)# match interface f0/0
cisco-NAT(config-route-map)# set interface FastEthernet0/0
这个是关于规定cisco-PC1的流量走f0/0的,因为GNS3的模拟器 以太网口不会自动down和up,必须还需要做个额外的工具EEM才能完成操作。实际中接口是会检测到的,所以不需要。

cisco-NAT(config)#route-map policy permit 20
cisco-NAT(config-route-map)#match ip address cisco-PC2
cisco-NAT(config-route-map)#match interface f0/1
cisco-NAT(config-route-map)# set interface FastEthernet0/1

cisco-NAT(config-if)#ip policy route-map policy
cisco-NAT(config-if)#ip nat inside

cisco-NAT(config-if)#int f0/0
cisco-NAT(config-if)#ip nat outside
cisco-NAT(config-if)#int f0/1
cisco-NAT(config-if)#ip nat outside
在内网口调用策略路由的map和cisco-NAT,两个出网口也调用。

这样就全部搞定了,当满足策略路由的10的送到f0/0,也就是f0/0连接的cisco-ISP1的接口,经过这接口因为是cisco-PC1的流量,所以直接执行cisco-NAT1的规则。 当cisco-ISP1出现了问题的话,那么这个策略就不生效了 因为不满足要求了,所以走cisco-NAT2 f0/1的接口。测试下

先测试cisco-PC1是不是走的cisco-ISP1的流量、

 image006.jpg
 image007.jpg

关于cisco-PC1走的路径 192.168.1.254 (cisco-NAT网关) 23.1.1.2(cisco-ISP1的入接口) 35.1.1.2 (server的cisco-ISP1 入接口)

cisco-PC2走的路径是 192.168.1.254 (cisco-NAT网关) 24.1.1.2 (cisco-ISP2的入接口) 45.1.1.2 (server的cisco-ISP2 入接口)

测试下把cisco-ISP1的接口shutdown, 先在cisco-PC1上ping 5.5.5.5 source lo 0 repeat 111111

 image008.jpg

会发现有丢包的情况,其实这是GNS3的以太网口不能自动根据对方up和down来检测,所以自己的接口一直是up的,那些drop的包都是丢到了f0/0连接的cisco-ISP1上,因为cisco-ISP1我shutdown了,所以成了路由黑洞。 所以在这里还需要额外的加一个策略,EEM工具。这个工具能工具各种不同的状态来 实施定制的策略, 比如 某个时间,自动备份配置,某个状态dwon,自动shutwdo接口。

 image009.jpg

这里就根据down的提示来做策略了。

cisco-NAT(config)#event manager applet cisco-PC1
cisco-NAT(config-applet)#event syslog pattern “1 ip sla 1 state Up->Down”
cisco-NAT(config-applet)#action 1 cli command “eanble”
cisco-NAT(config-applet)#action 1.2 cli command “clear ip nat translation *”
cisco-NAT(config-applet)#action 2 cli command “configure terminal”
cisco-NAT(config-applet)#action 3 cli command “interface f0/0”
cisco-NAT(config-applet)#action 4 cli command “shutdown”

这策略就是针对track1的状态,down了的话,那么就自动执行下面策略,enable 、config t、inte f0/0、shutdown 这里一定要注意序列号,它是从上往下开始配置的,序列号也要一样。

cisco-NAT(config)#event manager applet cisco-PC2
cisco-NAT(config-applet)#event syslog pattern “1 ip sla 2 state Up->Down”
cisco-NAT(config-applet)#action 1.1 cli command “enable”
cisco-NAT(config-applet)#action 1.2 cli command “configure terminal”
cisco-NAT(config-applet)#action 1.3 cli command “interface f0/1”
cisco-NAT(config-applet)#action 1.4 cli command “shutdown

现在在来测试看看,把cisco-ISP1再次shutdown。

 image010.jpg

提示了up-down,就直接把f0/0的接口shudown了。 这里第一个测试我多加了句 clear ip nat translation * 因为cisco对ICMP特殊的支持,从先切换一个ISP的时候 需要把之前的cisco-NAT状态清理掉,在实际中肯定不需要这么做的,不然所以的流量都断开了。

 image011.jpg

OK,掉了几个包 就切换过来了

 image012.jpg
 image013.jpg

路径也正确,关于f0/0不是我自己手工执行的,是根据EEM来决策的,它看见sla 1的状态down了就自动执行策略了。

这里多加了EEM的策略,是因为GNS3接口不会自动down导致的,实际中大部分光猫都有检测机制,会自动告诉连接的接口,所以不会存在不会检测不到的情况,不过EEM是个好东西,可以根据不同的策略来做,这个需要大家多去接触了。

关于如果接口恢复了怎么办,呵呵 我们在把cisco-ISP1的接口打开 ,你会发现

 image014.jpg

down-up了,这是因为我在SLA里面并没有规定从哪个接口发出去的原因。这时候只要检测到cisco-ISP1接口正常了,我们可以根据这个提示来做另外个策略 就是把接口no shutdown。这个有兴趣可以自己做下。

这个解决方案也不是很难,只需要把思路理清了 很容易解决的,主要是最后一个EEM比较难理解点,不过它不是必须的,这里是没办法才用这个。

下载文档

百度盘下载博客资源汇总与学习思路
如果下载地址失效,请联系博主或者在下面留言,谢谢。下面也有其他您需要的资源推荐哦

关于博客资源下载说明

首先,感谢大家对网络之路博客的支持,本站所有资源都是开放下载,不做任何限制,资源都是上传在百度盘,分为两种类型:
(1)第一种是书籍PDF与视频类,全部放在博客分享,觉得对大家学习有帮助的博主会收集好、然后以博主的经验整理分类后排序好分享出来。
(2)第二种是技术性文章与视频,全部放在公众号(网络之路博客)/B站(网络之路Blog)发布,以博主原创为主,主要分享系列为主,由浅入深的带大家了解工作中常用到的一些网络技术,当然也会分享一些比较经典的案例。
(3)分享资源有涉及到您的利益以及版权问题,请联系博主,24小时候内删除。
想第一时间收到最新更新内容吗,点击获取~~~

点击查看详情

(广告)博主自主原创最新实战课程

点击查看详情


(广告)远程技术支持(设备调试),有搞不定的找我,价格实惠,为您解决实际工作上的问题

远程技术调试与技术支持,点击查看详情


原创与收集的内容,允许转载,转载时请务必以超链接形式标明文章原始出处,博客地址http://ccieh3c.com。

喜欢 (9)
[]
分享 (0)
公众号:网络之路博客(其他平台网络之路Blog)
分享一些自己懂的技术知识点,希望对大家有帮助。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址