首页 > 代码库 > 单路由器多出口解决方案(route-map+sla+track)
单路由器多出口解决方案(route-map+sla+track)
网络拓扑请见附件:
背景: 当前越来越多的公司,随着公司的网络结构和规模的扩大,原有的网络带宽已经慢慢达到饱和,这时候需要网络管理员考虑如何解决网速越来越慢的问题。在已经无法再用限制内部员工的网络流量的方式之后,增加出口带宽已经是迫在眉睫。一般都不会选择直接撤掉原先的网络,会先申请一根光纤,然后并入现有的网络中,然后在等原先的带宽到期废弃。有些公司直接慢慢增加外网的出口线路。这样的情况下多出口的网络解决方案尤为重要,能更好的利用网络资源(一根商业光纤价格还是比较昂贵的)。也有些公司增加新的线路就是为了做备份,可是老板不会让一根昂贵的线路睡觉(土豪忽略)。
本文就是要解决,通过分流内部网络分别从不同的出口走,当一条线路down了,会自动切换到另一条线路上。题外话:最好不要安装多条相同的isp服务商的线路在同一所大楼里面,因为一旦大楼机房某个服务商的光端机down了,那就都没用啦。
(1)大体描述网络拓扑结构
client1----->内网部分机器,client2------>内网部分机器。出口router链接内网,也就是连接client1和client2。router分别有二个出口分别连接isp1和isp2(都用路由器代替)。isp1和isp2之间也连接了,并且做了ospf,模拟广域网。
(2)网络设备ip地址
client1---192.168.10.2 ,网关:192.168.10.1;client2---192.168.20.2,网关:192.168.20.1;
router---10.10.10.2连接isp1---10.10.10.1;router---30.30.30.2连接isp2---30.30.30.1;isp1--
20.20.20.1连接isp2---20.20.20.2;
(3)模拟器
本实验用的是web iou
配置:
(1) client1:
部分默认配置略
interface Ethernet0/0
ip address 192.168.10.2 255.255.255.0
no ip route-cache
!
ip default-gateway 192.168.10.1(因为用路由器模拟的所以,先no ip routing后增加网关)
ip forward-protocol nd
(2)client2
ip default-gateway 192.168.20.1
ip forward-protocol nd
ip default-gateway 192.168.20.1
(3)router
!
redundancy
!
!
!
track 1 ip sla 1 reachability(此处定义一个track,跟踪连接isp1的链路状态,后面的1是调用这条语句的标识,后面是调用哪个sla,不要调用错了。本语句的意思就是判断 sla 1 所定义的语句判断的结果,如果sla 1结果为非,那么结果就是track1 不可达,这个是track调用sla。track自己也可以直接跟踪端口,并且被调用。但是track跟踪端口只可以是本机的,端口,协议或者是服务。而sla 可以判断链路对端的端口是否开启可用。因为在很多情况下,都有由于电信或者联通的机房出现问题导致链路不可用,如果用track本机,那么就算对方down了,也不会被判断出来,所以这里就是track 和sla的结合使用)
!
track 2 ip sla 2 reachability (定义 track 2,跟踪连接isp2的链路状态)
!
interface Ethernet0/0
ip address 192.168.10.1 255.255.255.0
ip nat inside
ip virtual-reassembly in
ip policy route-map ccie
!
--More--
*Nov 2 08:24:59.059: %SYS-5-CONFIG_I: Configured from console by console
interface Ethernet0/1
ip address 192.168.20.1 255.255.255.0
ip nat inside
ip virtual-reassembly in
ip policy route-map ccie (在内部两个接口上应用route-map,这里解释一下做route-map和nat的思路,因为这个解决方案里面的route-map比较多,很多刚刚接触的不知道从何下手,不知道如何去合理的理清思路。大家不妨这样想,一个内部数据要想送出去,那么到达路由器被送出去的时候,网关路由器要对数据进行封装,那么就需要知道下一条地址和如何被PAT转换。那么就很简单了,分为二部分解决,二者route-map没有直接关联,直接关联的都是内部的数据。在内部端口应用的策略是为了让路由器的得到下一条地址。所以以上二个内部端口都应用了route-map)
!
interface Ethernet0/2 (外部端口连接isp1)
ip address 10.10.10.2 255.255.255.0
ip nat outside
ip virtual-reassembly in
!
interface Ethernet0/3 (外部端口连接isp2)
ip address 30.30.30.2 255.255.255.0
ip nat outside
ip virtual-reassembly in
!
no ip http server
no ip http secure-server
ip nat inside source route-map nat1 interface Ethernet0/2 overload
ip nat inside source route-map nat11 interface Ethernet0/3 overload
(以上二句是处理route-map定义的流量 如何被pat,因为是二个出口,所以需要二条语句,第二条为isp2出口,当isp1线路down了之后,路由器会通过第二条语句来pat流量)
ip nat inside source route-map nat2 interface Ethernet0/3 overload
ip nat inside source route-map nat22 interface Ethernet0/2 overload
(同上)
ip route 0.0.0.0 0.0.0.0 10.10.10.1
ip route 0.0.0.0 0.0.0.0 30.30.30.1
!
ip access-list extended client1 (定义client1的感兴趣流)
permit ip 192.168.10.0 0.0.0.255 any
ip access-list extended client2(定义client2的感兴趣流)
permit ip 192.168.20.0 0.0.0.255 any
!
ip sla 1 (测试到isp1的线路)
icmp-echo 10.10.10.1 source-ip 10.10.10.2
frequency 5(定义一个sla 通过icmp的echo包从本机的10.2到10.1,并且是5秒一次,不能低于5秒。如果10.1down了那么sla 1 结果就是非,track 1 的结果就是非)
ip sla schedule 1 life forever start-time noaw
(定义sla 1 从现在开始到永远 都开启)
ip sla 2 (测试到isp2 的线路)
icmp-echo 30.30.30.1 source-ip 30.30.30.1
frequency 5
ip sla schedule 2 life forever start-time now
!
route-map ccie permit 10
match ip address client1
set ip next-hop verify-availability 10.10.10.1 1 track 1
set ip next-hop verify-availability 30.30.30.1 2 track 2
!
route-map ccie permit 20
match ip address client2
set ip next-hop verify-availability 30.30.30.1 1 track 2
set ip next-hop verify-availability 10.10.10.1 2 track 1
(这个route-map是用于定义下一条地址,分别匹配client1和client2的流量,然后为匹配的流量设定下一跳地址,下面一条是备用下一跳地址,只有当第一条语句结果为非时才能用到下一句,还不清楚route-map语法和规则请百度。这样就client1和2定义了主备下一跳地址了,当然是用在内部端口上)
!
route-map nat2 permit 10
match ip address client2
match interface Ethernet0/3
!
route-map nat1 permit 10
match ip address client1
match interface Ethernet0/2
!
route-map nat11 permit 10
match ip address client1
match interface Ethernet0/3
!
route-map nat22 permit 10
match ip address client2
match interface Ethernet0/2
!
(这四个route-map和上面的route-map没有关联。主要是为了匹配流量和匹配对应的端口,为下面的pat,可以结合上面的pat部分来看。二者是对应的关系。)
end
以上就是router的配置。
isp1和isp2的配置由于时间关系就忽略了,里面就是对应的端口ip和ospf。下面就直接上测试结果。全部是真实的实验结果。
router路由器上面开启了debug ip nat,查看转换结果
(1)测试1,client1到外网走isp1出口。在client1 上ping广域网
在router上的nat转换表为:
*Nov 2 10:54:55.853: NAT*: s=192.168.10.2->10.10.10.2, d=10.10.10.1 [30]
*Nov 2 10:54:55.854: NAT*: s=10.10.10.1, d=10.10.10.2->192.168.10.2 [30]
*Nov 2 10:54:55.859: NAT*: s=192.168.10.2->10.10.10.2, d=10.10.10.1 [31]
*Nov 2 10:54:55.859: NAT*: s=10.10.10.1, d=10.10.10.2->192.168.10.2 [31]
说明正确。
(2)测试2,关闭isp2路由器的端口。查看网关router的track:
Router#sh track
Track 1
IP SLA 1 reachability
Reachability is Up
2 changes, last change 00:07:31
Latest operation return code: OK
Latest RTT (millisecs) 1
Tracked by:
ROUTE-MAP 0
Track 2
IP SLA 2 reachability
Reachability is Down
1 change, last change 00:12:07
Latest operation return code: Timeout
Tracked by:
ROUTE-MAP 0
然后在从client2上ping外网,本应该转换为30.30.30.2。
*Nov 2 11:04:25.625: NAT*: s=192.168.20.2->10.10.10.2, d=20.20.20.1 [15]
*Nov 2 11:04:25.626: NAT*: s=20.20.20.1, d=10.10.10.2->192.168.20.2 [15]
*Nov 2 11:04:25.630: NAT*: s=192.168.20.2->10.10.10.2, d=20.20.20.1 [16]
*Nov 2 11:04:25.631: NAT*: s=20.20.20.1, d=10.10.10.2->192.168.20.2 [16]
已经转换成 10.10.10.2的外网地址。
实验结束。谢谢!
本文出自 “CCIE” 博客,谢绝转载!
单路由器多出口解决方案(route-map+sla+track)