现在企业对于双ISP的需求越来越大了,Cisco的路由器解决起来比ASA好,因为ASA作为防火墙的存在,它只能有一条默认路由存在,而且不支持策略路由,所以对于ASA的实现难度很大,而路由器有策略路由加上cisco-NAT跟SLA的辅助,实现起来比较容易。其实也是朋友让我总结下解决方案,正好以前做过一次。【可用GNS3模拟器模拟】
方法/步骤
1、基本配置cisco-PC1(config)#intf0/0cisco-PC1(config-if)#speed100cisco-PC1(config-if)#full-duplexcisco-PC1(config-if)#ipadd192.168.1.1255.255.255.0cisco-PC1(config-if)#noshutcisco-PC1(config-if)#intlo0cisco-PC1(config-if)#ipadd1.1.1.1255.255.255.255cisco-PC2(config)#intf0/0cisco-PC2(config-if)#ipadd192.168.1.2255.255.255.0cisco-PC2(config-if)#noshutcisco-PC2(config-if)#speed100cisco-PC2(config-if)#full-duplexcisco-PC2(config-if)#intlo0cisco-PC2(config-if)#ipadd2.2.2.2255.255.255.255cisco-NAT(config)#intf1/0内部的接口cisco-NAT(config-if)#ipadd192.168.1.254255.255.255.0cisco-NAT(config-if)#noshutcisco-NAT(config)#intf1/0cisco-NAT(config-if)#ipadd192.168.1.254255.255.255.0cisco-NAT(config-if)#noshutcisco-NAT(config-if)#intf0/0cisco-ISP1的接口cisco-NAT(config-if)#ipadd23.1.1.1255.255.255.252cisco-NAT(config-if)#noshutcisco-NAT(config-if)#speed100cisco-NAT(config-if)#full-duplexcisco-NAT(config)#intf0/1cisco-ISP2的接口cisco-NAT(config-if)#ipadd24.1.1.1255.255.255.0cisco-NAT(config-if)#speed100cisco-NAT(config-if)#full-duplexcisco-NAT(config-if)#noshu
2、基本配置基本配置cis罕铞泱殳co-PC1(config)#intf0/0cisco-PC1(config-i熠硒勘唏f)#speed100cisco-PC1(config-if)#full-duplexcisco-PC1(config-if)#ipadd192.168.1.1255.255.255.0cisco-PC1(config-if)#noshutcisco-PC1(config-if)#intlo0cisco-PC1(config-if)#ipadd1.1.1.1255.255.255.255cisco-PC2(config)#intf0/0cisco-PC2(config-if)#ipadd192.168.1.2255.255.255.0cisco-PC2(config-if)#noshutcisco-PC2(config-if)#speed100cisco-PC2(config-if)#full-duplexcisco-PC2(config-if)#intlo0cisco-PC2(config-if)#ipadd2.2.2.2255.255.255.255cisco-NAT(config)#intf1/0内部的接口cisco-NAT(config-if)#ipadd192.168.1.254255.255.255.0cisco-NAT(config-if)#noshutcisco-NAT(config)#intf1/0cisco-NAT(config-if)#ipadd192.168.1.254255.255.255.0cisco-NAT(config-if)#noshutcisco-NAT(config-if)#intf0/0cisco-ISP1的接口cisco-NAT(config-if)#ipadd23.1.1.1255.255.255.252cisco-NAT(config-if)#noshutcisco-NAT(config-if)#speed100cisco-NAT(config-if)#full-duplexcisco-NAT(config)#intf0/1cisco-ISP2的接口cisco-NAT(config-if)#ipadd24.1.1.1255.255.255.0cisco-NAT(config-if)#speed100cisco-NAT(config-if)#full-duplexcisco-NAT(config-if)#noshu
3、接口信息搞定,开始把Internet路由打通cisco-ISP1(config)#routerospf1cisco-ISP1(config-router)#router-id3.3.3.3cisco-ISP1(config-router)#network23.1.1.00.0.0.3a0cisco-ISP1(config-router)#network35.1.1.00.0.0.3a0cisco-ISP1(config-router)#passive-interfacef0/0cisco-ISP2(config-if)#routerospf1cisco-ISP2(config-router)#router-id4.4.4.4cisco-ISP2(config-router)#network24.1.1.00.0.0.3a0cisco-ISP2(config-router)#passive-interfacef0/1cisco-ISP2(config-router)#network45.1.1.00.0.0.3a0cisco-Server(config-if)#routerospf1cisco-Server(config-router)#router-id5.5.5.5cisco-Server(config-router)#network0.0.0.00.0.0.0a0这里server就偷懒了直接全部宣告,上面的被动接口设置是习惯性的问题,实验环境无所谓的。
4、internet模拟完成,关键在内部了。cisco-NAT(config-if)#routereigrp1cisco-NAT(config-router)#noauto-summarycisco-NAT(config-router)#network192.168.1.00.0.0.255cisco-PC1(config-if)#routereigrp1cisco-PC1(config-router)#noauto-summarycisco-PC1(config-router)#network1.1.1.10.0.0.0cisco-PC1(config-router)#network192.168.1.00.0.0.255cisco-PC2(config-if)#routereigrp1cisco-PC2(config-router)#noauto-summarycisco-PC2(config-router)#network192.168.1.00.0.0.255cisco-PC2(config-router)#network2.2.2.20.0.0.0这里静态路由,如果直接写两条缺省的话,那么如果cisco-ISP1或cisco-ISP2出现了故障,而我们这边缺省路由却一直存在,可能会造成数据包黑洞的问题,所以这里必须与SLA做联动,检测对方的存在,如果在规定的时间内没有响应这条路由也自动消失。
5、internet模拟完成,关键在内部了。cisco-NAT(config-if)#routereigrp1cisco-NAT(config-router)#noauto-summarycisco-NAT(config-router)#network192.168.1.00.0.0.255cisco-PC1(config-if)#routereigrp1cisco-PC1(config-router)#noauto-summarycisco-PC1(config-router)#network1.1.1.10.0.0.0cisco-PC1(config-router)#network192.168.1.00.0.0.255cisco-PC2(config-if)#routereigrp1cisco-PC2(config-router)#noauto-summarycisco-PC2(config-router)#network192.168.1.00.0.0.255cisco-PC2(config-router)#network2.2.2.20.0.0.0这里静态路由,如果直接写两条缺省的话,那么如果cisco-ISP1或cisco-ISP2出现了故障,而我们这边缺省路由却一直存在,可能会造成数据包黑洞的问题,所以这里必须与SLA做联动,检测对方的存在,如果在规定的时间内没有响应这条路由也自动消失。
6、cisco-NAT(config)#ipsla1关于cisco-ISP1的cisco-NAT(config-ip-sla)#icmp-echo23.1.1.2cisco-NAT(config-ip-sla-echo)#frequency10cisco-NAT(config)#ipslaschedule1start-timenowlifeforevercisco-NAT(config)#track1ipsla1cisco-NAT(config)#iproute0.0.0.00.0.0.023.1.1.2track1这里定义一个sla,探测23.1.1.2 cisco-ISP1的接口地址,频率为每10s一次,第四句话是说这个sla从现在开始执行,不会停止。然后用track调用这个SLA,最后关联到去往23.1.1.2的缺省上, 这里如果cisco-ISP1或者自己接口出现了问题,那么这条路由会自动消失。这里注意的是,可能IOS版本不同,调用的命令也不同track1rtr1有些版本是这样调用的。cisco-NAT(config)#ipsla2cisco-NAT(config-ip-sla)#icmp-echo24.1.1.2cisco-NAT(config-ip-sla-echo)#frequency10cisco-NAT(config)#ipslaschedule2start-timenowlifeforevercisco-NAT(config)#track2ipsla2cisco-NAT(config)#iproute0.0.0.00.0.0.024.1.1.2track2showipslastatistics查看SLA的状态,successes代表每频率测试成功的次数,faulures是失败的次数。路由也正常cisco-NAT(config-router)#redistributestatic把缺省推到内部,让它们的流量都引到cisco-NAT设备上来。
7、开始最重要的部分关于cisco-NAT的写法,我们平常用的习惯钽吟篑瑜ACL来调用,但是这里是双出口,如果用ACL来调用可能会产生混淆,艘早祓胂cisco-NAT除了可以调用ACL以外,还能调用route-map,我们可以用route-map来设定一些规则,才允许cisco-NAT转换。关于缺省路由由于是负载均衡,所以必须用策略路由把内部流量在经过cisco-NAT的时候强行引入某一个cisco-NAT,不然它就不按你的规则走了。cisco-NAT(config)#ipaccess-listextendedcisco-PC1cisco-NAT(config-ext-nacl)#permitip1.1.1.00.0.0.255anycisco-NAT(config)#ipaccess-listextendedcisco-PC2cisco-NAT(config-ext-nacl)#permitip2.2.2.00.0.0.255anycisco-NAT(config)#route-mapcisco-NAT1permit10cisco-NAT(config-route-map)#matchipaddresscisco-PC1cisco-NAT(config-route-map)#matchinterfacef0/0cisco-NAT(config)#ipnatinsidesourceroute-mapcisco-NAT1interfacef0/0overloadcisco-NAT(config)#route-mapcisco-NAT2permit10cisco-NAT(config-route-map)#matchipaddresscisco-PC2cisco-NAT(config)#ipnatinsidesourceroute-mapcisco-NAT2interfacef0/1overload分析下这里为什么要定义两个route-map,第一个是必须满足ACL匹配的属于cisco-PC1的流量,第二个就是必须满足接口是up的,因为这个是与的操作,所以这两个要求必须同时满足才进行到f0/0的地址转换。第二route-map就直接匹配cisco-PC2的流量就能转换了,它转换的接口就是f0/1。cisco-NAT(config)#route-mapcisco-NAT3permit10cisco-NAT(config-route-map)#matchipaddresscisco-PC1cisco-NAT(config-route-map)#matchinterfacef0/1cisco-NAT(config)#ipnatinsidesourceroute-mapcisco-NAT3interfacef0/1overloadcisco-NAT(config)#route-mapcisco-NAT4permit10cisco-NAT(config-route-map)#matchipaddresscisco-PC2cisco-NAT(config)#ipnatinsidesourceroute-mapcisco-NAT4interfacef0/0overload这里也是一样,但是发现一个问题就是,关于F0/0和F0/1都有各自cisco-PC1和cisco-PC2匹配的流量,这样当一个数据包过来 它可能会匹配f0/0接口出去,也可以匹配f0/1出去,所以我们必须用一个工具来控制它。那就是策略路由。这里注意调用ACL的时候是大写PC注意的是,策略路由默认只对入接口的流量做策略,本地的不算在内,可以通过iplocalpolicyroute-map来生效。另外就是一个接口只能调用一个策略的map。cisco-NAT(config)#route-mappolicypermit10cisco-NAT(config-route-map)#matchipaddresscisco-PC1cisco-NAT(config-route-map)#matchinterfacef0/0cisco-NAT(config-route-map)#setinterfaceFastEthernet0/0这个是关于规定cisco-PC1的流量走f0/0的,因为GNS3的模拟器以太网口不会自动down和up,必须还需要做个额外的工具EEM才能完成操作。实际中接口是会检测到的,所以不需要。cisco-NAT(config)#route-mappolicypermit20cisco-NAT(config-route-map)#matchipaddresscisco-PC2cisco-NAT(config-route-map)#matchinterfacef0/1cisco-NAT(config-route-map)#setinterfaceFastEthernet0/1cisco-NAT(config-if)#ippolicyroute-mappolicycisco-NAT(config-if)#ipnatinsidecisco-NAT(config-if)#intf0/0cisco-NAT(config-if)#ipnatoutsidecisco-NAT(config-if)#intf0/1cisco-NAT(config-if)#ipnatoutside在内网口调用策略路由的map和cisco-NAT,两个出网口也调用。这样就全部搞定了,当满足策略路由的10的送到f0/0,也就是f0/0连接的cisco-ISP1的接口,经过这接口因为是cisco-PC1的流量,所以直接执行cisco-NAT1的规则。 当cisco-ISP1出现了问题的话,那么这个策略就不生效了因为不满足要求了,所以走cisco-NAT2f0/1的接口。测试下先测试cisco-PC1是不是走的cisco-ISP1的流量、关于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上ping5.5.5.5sourcelo0repeat111111会发现有丢包的情况,其实这是GNS3的以太网口不能自动根据对方up和down来检测,所以自己的接口一直是up的,那些drop的包都是丢到了f0/0连接的cisco-ISP1上,因为cisco-ISP1我shutdown了,所以成了路由黑洞。 所以在这里还需要额外的加一个策略,EEM工具。这个工具能工具各种不同的状态来实施定制的策略,比如 某个时间,自动备份配置,某个状态dwon,自动shutwdo接口。这里就根据down的提示来做策略了。cisco-NAT(config)#eventmanagerappletcisco-PC1cisco-NAT(config-applet)#eventsyslogpattern“1ipsla1stateUp->Down”cisco-NAT(config-applet)#action1clicommand“eanble”cisco-NAT(config-applet)#action1.2clicommand“clearipnattranslation*”cisco-NAT(config-applet)#action2clicommand“configureterminal”cisco-NAT(config-applet)#action3clicommand“interfacef0/0”cisco-NAT(config-applet)#action4clicommand“shutdown”这策略就是针对track1的状态,down了的话,那么就自动执行下面策略,enable、configt、intef0/0、shutdown这里一定要注意序列号,它是从上往下开始配置的,序列号也要一样。cisco-NAT(config)#eventmanagerappletcisco-PC2cisco-NAT(config-applet)#eventsyslogpattern“1ipsla2stateUp->Down”cisco-NAT(config-applet)#action1.1clicommand“enable”cisco-NAT(config-applet)#action1.2clicommand“configureterminal”cisco-NAT(config-applet)#action1.3clicommand“interfacef0/1”cisco-NAT(config-applet)#action1.4clicommand“shutdown现在在来测试看看,把cisco-ISP1再次shutdown。提示了up-down,就直接把f0/0的接口shudown了。这里第一个测试我多加了句clearipnattranslation* 因为cisco对ICMP特殊的支持,从先切换一个ISP的时候 需要把之前的cisco-NAT状态清理掉,在实际中肯定不需要这么做的,不然所以的流量都断开了down-up了,这是因为我在SLA里面并没有规定从哪个接口发出去的原因。这时候只要检测到cisco-ISP1接口正常了,我们可以根据这个提示来做另外个策略就是把接口noshutdown。这个有兴趣可以自己做下。这个解决方案也不是很难,只需要把思路理清了很容易解决的,主要是最后一个EEM比较难理解点,不过它不是必须的,这里是没办法才用这个。