1、基本配置cisco-PC1(config)#int f0/0cisco-PC1(config-if)#speed 100cisco-PC1(config-if)#full-duplexcisco-PC1(config-if)#ip add 192.168.1.1 255.255.255.0cisco-PC1(config-if)#no shutcisco-PC1(config-if)#int lo 0cisco-PC1(config-if)#ip add 1.1.1.1 255.255.255.255cisco-PC2(config)#int f0/0cisco-PC2(config-if)#ip add 192.168.1.2 255.255.255.0cisco-PC2(config-if)#no shutcisco-PC2(config-if)#speed 100cisco-PC2(config-if)#full-duplexcisco-PC2(config-if)#int lo 0cisco-PC2(config-if)#ip add 2.2.2.2 255.255.255.255cisco-NAT(config)#int f1/0 内部 的接口cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0cisco-NAT(config-if)#no shutcisco-NAT(config)#int f1/0cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0cisco-NAT(config-if)#no shutcisco-NAT(config-if)#int f0/0 cisco-ISP1 的接口cisco-NAT(config-if)#ip add 23.1.1.1 255.255.255.252cisco-NAT(config-if)#no shutcisco-NAT(config-if)#speed 100cisco-NAT(config-if)#full-duplexcisco-NAT(config)#int f0/1 cisco-ISP2 的接口cisco-NAT(config-if)#ip add 24.1.1.1 255.255.255.0cisco-NAT(config-if)#speed 100cisco-NAT(config-if)#full-duplexcisco-NAT(config-if)#no shu
2、基本配置基本配置cis罕铞泱殳co-PC1(config)#int f0/0cisco-PC1(config-i熠硒勘唏f)#speed 100cisco-PC1(config-if)#full-duplexcisco-PC1(config-if)#ip add 192.168.1.1 255.255.255.0cisco-PC1(config-if)#no shutcisco-PC1(config-if)#int lo 0cisco-PC1(config-if)#ip add 1.1.1.1 255.255.255.255cisco-PC2(config)#int f0/0cisco-PC2(config-if)#ip add 192.168.1.2 255.255.255.0cisco-PC2(config-if)#no shutcisco-PC2(config-if)#speed 100cisco-PC2(config-if)#full-duplexcisco-PC2(config-if)#int lo 0cisco-PC2(config-if)#ip add 2.2.2.2 255.255.255.255cisco-NAT(config)#int f1/0 内部 的接口cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0cisco-NAT(config-if)#no shutcisco-NAT(config)#int f1/0cisco-NAT(config-if)#ip add 192.168.1.254 255.255.255.0cisco-NAT(config-if)#no shutcisco-NAT(config-if)#int f0/0 cisco-ISP1 的接口cisco-NAT(config-if)#ip add 23.1.1.1 255.255.255.252cisco-NAT(config-if)#no shutcisco-NAT(config-if)#speed 100cisco-NAT(config-if)#full-duplexcisco-NAT(config)#int f0/1 cisco-ISP2 的接口cisco-NAT(config-if)#ip add 24.1.1.1 255.255.255.0cisco-NAT(config-if)#speed 100cisco-NAT(config-if)#full-duplexcisco-NAT(config-if)#no shu
3、接口信息搞定,开始把Internet 路由打通cisco-ISP1(config)#router ospf 1cisco-ISP1(config-router)#router-id 3.3.3.3cisco-ISP1(config-router)#network 23.1.1.0 0.0.0.3 a 0cisco-ISP1(config-router)#network 35.1.1.0 0.0.0.3 a 0cisco-ISP1(config-router)#passive-interface f0/0cisco-ISP2(config-if)#router ospf 1cisco-ISP2(config-router)#router-id 4.4.4.4cisco-ISP2(config-router)#network 24.1.1.0 0.0.0.3 a 0cisco-ISP2(config-router)#passive-interface f0/1cisco-ISP2(config-router)#network 45.1.1.0 0.0.0.3 a 0cisco-Server(config-if)#router ospf 1cisco-Server(config-router)#router-id 5.5.5.5cisco-Server(config-router)#network 0.0.0.0 0.0.0.0 a 0这里server就偷懒了 直接全部宣告,上面的被动接口设置是习惯性的问题,实验环境无所谓的。
4、internet模拟完成,关键在内部了。cisco-NAT(config-if)#router eigrp 1cisco-NAT(config-router)#no auto-summarycisco-NAT(config-router)#network 192.168.1.0 0.0.0.255cisco-PC1(config-if)#router eigrp 1cisco-PC1(config-router)#no auto-summarycisco-PC1(config-router)#network 1.1.1.1 0.0.0.0cisco-PC1(config-router)#network 192.168.1.0 0.0.0.255cisco-PC2(config-if)#router eigrp 1cisco-PC2(config-router)#no auto-summarycisco-PC2(config-router)#network 192.168.1.0 0.0.0.255cisco-PC2(config-router)#network 2.2.2.2 0.0.0.0这里静态路由,如果直接写两条缺省的话,那么如果cisco-ISP1或cisco-ISP2出现了故障,而我们这边缺省路由却一直存在,可能会造成数据包黑洞的问题,所以这里必须与SLA做联动,检测对方的存在,如果在规定的时间内没有响应 这条路由也自动消失。
5、internet模拟完成,关键在内部了。cisco-NAT(config-if)#router eigrp 1cisco-NAT(config-router)#no auto-summarycisco-NAT(config-router)#network 192.168.1.0 0.0.0.255cisco-PC1(config-if)#router eigrp 1cisco-PC1(config-router)#no auto-summarycisco-PC1(config-router)#network 1.1.1.1 0.0.0.0cisco-PC1(config-router)#network 192.168.1.0 0.0.0.255cisco-PC2(config-if)#router eigrp 1cisco-PC2(config-router)#no auto-summarycisco-PC2(config-router)#network 192.168.1.0 0.0.0.255cisco-PC2(config-router)#network 2.2.2.2 0.0.0.0这里静态路由,如果直接写两条缺省的话,那么如果cisco-ISP1或cisco-ISP2出现了故障,而我们这边缺省路由却一直存在,可能会造成数据包黑洞的问题,所以这里必须与SLA做联动,检测对方的存在,如果在规定的时间内没有响应 这条路由也自动消失。
6、cisco-NAT(config)#ip sla 1 关于cisco-ISP1的cisco-NAT(config-ip-sla)#icmp-echo 23.1.1.2cisco-NAT(config-ip-sla-echo)#frequency 10cisco-NAT(config)#ip sla schedule 1 start-time now life forevercisco-NAT(config)#track 1 ip sla 1cisco-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 2cisco-NAT(config-ip-sla)#icmp-echo 24.1.1.2cisco-NAT(config-ip-sla-echo)#frequency 10cisco-NAT(config)#ip sla schedule 2 start-time now life forevercisco-NAT(config)#track 2 ip sla 2cisco-NAT(config)#ip route 0.0.0.0 0.0.0.0 24.1.1.2 track 2show ip sla statistics查看SLA的状态,successes代表每频率测试成功的次数,faulures是失败的次数。路由也正常cisco-NAT(config-router)#redistribute static把缺省推到内部,让它们的流量都引到cisco-NAT设备上来。
7、开始最重要的部分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-PC1cisco-NAT(config-ext-nacl)#permit ip 1.1.1.0 0.0.0.255 anycisco-NAT(config)#ip access-list extended cisco-PC2cisco-NAT(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 anycisco-NAT(config)#route-map cisco-NAT1 permit 10cisco-NAT(config-route-map)#match ip address cisco-PC1cisco-NAT(config-route-map)#match interface f0/0cisco-NAT(config)#ip nat inside source route-map cisco-NAT1 interface f0/0 overloadcisco-NAT(config)#route-map cisco-NAT2 permit 10cisco-NAT(config-route-map)#match ip address cisco-PC2cisco-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 10cisco-NAT(config-route-map)#match ip address cisco-PC1cisco-NAT(config-route-map)#match interface f0/1cisco-NAT(config)#ip nat inside source route-map cisco-NAT3 interface f0/1 overloadcisco-NAT(config)#route-map cisco-NAT4 permit 10cisco-NAT(config-route-map)#match ip address cisco-PC2cisco-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 10cisco-NAT(config-route-map)# match ip address cisco-PC1cisco-NAT(config-route-map)# match interface f0/0cisco-NAT(config-route-map)# set interface FastEthernet0/0这个是关于规定cisco-PC1的流量走f0/0的,因为GNS3的模拟器 以太网口不会自动down和up,必须还需要做个额外的工具EEM才能完成操作。实际中接口是会检测到的,所以不需要。cisco-NAT(config)#route-map policy permit 20cisco-NAT(config-route-map)#match ip address cisco-PC2cisco-NAT(config-route-map)#match interface f0/1cisco-NAT(config-route-map)# set interface FastEthernet0/1cisco-NAT(config-if)#ip policy route-map policycisco-NAT(config-if)#ip nat insidecisco-NAT(config-if)#int f0/0cisco-NAT(config-if)#ip nat outsidecisco-NAT(config-if)#int f0/1cisco-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的流量、关于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会发现有丢包的情况,其实这是GNS3的以太网口不能自动根据对方up和down来检测,所以自己的接口一直是up的,那些drop的包都是丢到了f0/0连接的cisco-ISP1上,因为cisco-ISP1我shutdown了,所以成了路由黑洞。 所以在这里还需要额外的加一个策略,EEM工具。这个工具能工具各种不同的状态来 实施定制的策略, 比如 某个时间,自动备份配置,某个状态dwon,自动shutwdo接口。这里就根据down的提示来做策略了。cisco-NAT(config)#event manager applet cisco-PC1cisco-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-PC2cisco-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。提示了up-down,就直接把f0/0的接口shudown了。 这里第一个测试我多加了句 clear ip nat translation * 因为cisco对ICMP特殊的支持,从先切换一个ISP的时候 需要把之前的cisco-NAT状态清理掉,在实际中肯定不需要这么做的,不然所以的流量都断开了down-up了,这是因为我在SLA里面并没有规定从哪个接口发出去的原因。这时候只要检测到cisco-ISP1接口正常了,我们可以根据这个提示来做另外个策略 就是把接口no shutdown。这个有兴趣可以自己做下。这个解决方案也不是很难,只需要把思路理清了 很容易解决的,主要是最后一个EEM比较难理解点,不过它不是必须的,这里是没办法才用这个。