热备份路由器协议 —— HSRP

 通常来说,主机通过默认网关与外部的网络联系,主机发送到外部网络的报文先发送给网关,再由网关传递给外网主机。如果网关出现故障,主机和外部的通信将会被切断。可以通过添加多个网关来解决网络中断的问题,但是大部分主机只允许配置一个默认网关,如果出现网关故障需要管理员手工切换配置,过于复杂,响应时间慢,安全性也较低。因此,计算机科学家开发了网关冗余协议,在不需要改变主机配置的情况下,通过使用多台路由器,提供相同的网关IP地址,实现冗余。当其中某台路由器出现故障,其他路由器会自动接管网关服务,提供高容错性、稳定性和响应性。

     本章主要介绍以下网关冗余协议。①HSRPHot Standby Router Protocol:热备份路由器协议,Cisco私有协议。②VRRP(Virtual Router Redundancy Protocol):虚拟路由器冗余协议,国际通用协议③GLBP (Gateway Load Balancing Protocol):网关负载均衡协议,Cisco私有协议,具有流量负载均衡的功能。  

15.1 热备份路由器协议 —— HSRP

15.2.1 实验目的

1)理解HSRP的工作原理;

2)掌握HSRP的配置

3)观察HSRP状态信息, 在此基础上理解HSRP的用途。

15.2.2 实验原理

1.网关冗余的用途

随着Internet的日益普及,用户对网络可靠性的需求越来越高。这同时对网络的稳定性提出了更高的要求,网络中路由器运行动态路由协议如RIPOSPF可以实现网络路由的冗余备份,当一个主路由发生故障后,网络可以自动切换到它的备份路由实现网络的连接。但是,如果作为整个网络的核心和心脏路由器发生致命性的故障,将导致本地网络的瘫痪,如果是骨干路由器,影响的范围将更大,所造成的损失也是难以估计的。因此,人们自然想到了基于设备的备份结构,就像在服务器中为提高数据的安全性而采用双硬盘结构一样。所以对路由器采用热备份是提高网络可靠性的必然选择。在一个路由器完全不能工作的情况下,它的全部功能便被系统中的另一个备份路由器完全接管,直至出现问题的路由器恢复正常

单网关型的网络如图15-1所示。

                 热备份路由器协议 —— HSRP_第1张图片

 网关冗余的网络结构如图15-2所示:

                热备份路由器协议 —— HSRP_第2张图片

HSRPVRRP是最常用的网关冗余技术,区别在于HSRPcisco的专用协议。VRRP是国际上的标准,允许在不同厂商的设备之间运行。但这两种协议的缺点是只能选定一个活动路由器,备用的路由器处于闲置状态,设备的潜能没有充分发挥出来。GLBP则可以绑定多个MAC地址到虚拟IP,从而允许客户端通过获得不同的虚拟MAC地址,通过不同的路由器转发数据,因为客户端利用的地址是解析到的虚拟的MAC地址,而网关地址仍使用相同的虚拟IP,从而不但实现了冗余还能够负载均衡。

 

2.HSRP工作原理

实现HSRP的条件是系统中有多台路由器,它们组成一个热备份组,这个组形成一个虚拟路由器。在任一时刻,一个组内只有一个路由器是活动的,并由它来转发数据包,如果活动路由器发生了故障,将选择一个备份路由器来替代活动路由器,但是在本网络内的主机看来,虚拟路由器没有改变。所以主机仍然保持连接,没有受到故障的影响,这样就较好地解决了路由器切换的问题。

HSRP协议利用一个优先级方案来决定哪个配置了HSRP协议的路由器成为默认的主动路由器。如果一个路由器的优先级设置的比所有其他路由器的优先级高,则该路由器成为主动路由器。路由器的缺省优先级是100,所以如果只设置一个路由器的优先级高于100,则该路由器将成为主动路由器。 通过在设置了HSRP协议的路由器之间广播HSRP优先级,HSRP协议选出当前的主动路由器。当在预先设定的一段时间内主动路由器不能发送hello消息时,优先级最高的备用路由器变为主动路由器。路由器之间的包传输对网络上的所有主机来说都是透明的。

配置了HSRP协议的路由器交换以下三种多点广播消息:

l Hello:hello消息通知其他路由器发送路由器的HSRP优先级和状态信息,HSRP路由器默认为每3秒钟发送一个hello消息;

l Coup:当一个备用路由器变为一个主动路由器时发送一个coup消息;

l Resign:当主动路由器要宕机或者当有优先级更高的路由器发送hello消息时,主动路由器发送一个resign消息。

另外,配置了HSRP协议的路由器都将处于以下种状态之一:

l Initial:HSRP启动时的状态,HSRP还没有运行,一般是在改变配置或端口刚刚启动时进入该状态。

l Learn路由器已经得到了虚拟IP地址,但是它既不是活动路由器也不是等待路由器。它一直监听从活动路由器和等待路由器发来的HELLO报文。

l Listen:路由器正在监听Hello消息;

l Speak:在该状态下,路由器定期发送HELLO报文,并且积极参加活动路由器或等待路由器的竞选。

l Standby:当主动路由器失效时路由器准备接管包传输功能。

l Active:路由器执行包传输功能。

3.HSRP配置命令

热备份路由器协议(HSRP)的设计目标是支持特定情况下 IP 流量失败转移不会引起混乱、并允许主机使用单路由器,以及即使在实际第一跳路由器使用失败的情形下仍能维护路由器间的连通性。换句话说,当源主机不能动态知道第一跳路由器的 IP 地址时,HSRP 协议能够保护第一跳路由器不出故障。

负责转发数据包的路由器称之为主动路由器(Active Router)。一旦主动路由器出现故障,HSRP 将激活备份路由器(Standby Routers)取代主动路由器。HSRP 协议提供了一种决定使用主动路由器还是备份路由器的机制,并指定一个虚拟的 IP 地址作为网络系统的缺省网关地址。如果主动路由器出现故障,备份路由器(Standby Routers)承接主动路由器的所有任务,并且不会导致主机连通中断现象。

HSRP 运行在 UDP 上,采用端口号1985。路由器转发协议数据包的源地址使用的是实际 IP 地址,而并非虚拟地址,正是基于这一点,HSRP 路由器间能相互识别.

命令 

 

Router(config-if)# standby group_number ip ip_address

设置HSRP组号和虚拟IP地址

Router(config-if)standby group_number priority priority_value

配置HSRP的优先级,如果不设置该项,默认优先级为100 ,该值越大,抢占为活动路由器的优先权越

Router(config-if)standby group_number preempt

该设置允许该路由器在优先级是最高时成为活动路由器。

Router(config-if)standby group_number timer hello_time  hold_Time

设置该路由器的hello_timehold_time

Router(config-if)#standby group_number

Authentication  md5   key-string   password

配置认证密码,防止非法设备加入到HSRP组中,同一个组的密码必须一致

Router(config-if)# standby  group_number  track

interface_id  priority_value

表明跟踪的接口,如果该接口出故障了,优先级降低该值。降低的值应该选择合适的值,使得其他路由器能成为活动路由器。

4.HSRP配置实例

热备份路由器协议 —— HSRP_第3张图片

地址表:

设备

接口

IP地址

子网掩码

R1

Fa 0/0

192.168.13.1

255.255.255.0

S0/0/0

192.168.12.1

255.255.255.0

R2

Fa 0/1

172.16.1.1

255.255.255.0

S0/0/0

192.168.12.2

255.255.255.0

S0/0/1

192.168.23.2

255.255.255.0

R3

Fa 0/0

192.168.13.3

255.255.255.0

S0/0/0

192.168.23.3

255.255.255.0

PC1

NIC

192.168.13.100

255.255.255.0

PC2

NIC

172.16.1.100

255.255.255.0

15-1IP地址表

表15-1IP地址表
(1)步骤1:配置ip地址和路由协议等。
R1(config)#interface fa 0/0
R1(config-if)#ip add 192.168.13.1 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int s0/0/0
R1(config-if)#ip add 192.168.12.1 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#router rip
R1(config-router)#network 192.168.12.0
R1(config-router)#network 192.168.13.0
R1(config-rotuer)#passive-interface fa 0/0
//配置路由器R1;把fa0/0接口设为被动接口,防止从该接口发送rip信息给R3
R2(config)#int fa 0/1
R2(config-if)#ip add 172.16.1.1 255.255.255.0
R2(config-if)#no shut
R2(config-if)#exit
R2(config)#int s0/0/0
R2(config-if)#clock rate 128000
R2(config-if)#ip add 192.168.12.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#exit
R2(config)#int s0/0/1
R2(config-if)#clock rate 128000
R2(config-if)#ip add 192.168.23.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#exit
R2(config)#router rip
R2(config-router)#network 172.16.0.0
R2(config-router)#network 192.168.23.0
R2(config-router)#network 192.168.13.0
R2(config-router)#passive-interface fa 0/0
//配置路由器R2;把fa0/1接口设为被动接口,防止从该接口发送rip信息给PC2
R3(config)#int fa 0/0
R3(config-if)#ip add 192.168.13.3 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit
R3(config)#int s0/0/1
R3(config-if)#ip add 192.168.23.3 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit
R3(config)#router rip
R3(config-router)#network 192.168.23.0
R3(config-router)#network 192.168.12.0
R3(config-router)#passive-interface fa 0/0
//配置路由器R3;把fa0/0接口设为被动接口,防止从该接口发送rip信息给R1
(2)步骤2:配置 hsrp
R1(config)# int fa 0/0
R1(config-if)#standby 1 ip 192.168.13.254
//启用hsrp功能,并设置虚拟ip地址,1为standby的组号,相同组号的路由器属于同一个hsrp组。所有属于同一个hsrp组的路由器的虚拟地址必须一致。
R1(config-if)#standby 1 priority 120
//配置hsrp的优先级,如果不设置该项,默认优先级为100,该值越大,抢占为活动路由器的优先权越高。
R1(config-if)#standby 1 preempt
//该设置允许该路由器在优先级是最高时成为活动路由器,如果不设置,即使该路由器权值在高也不会成为活动路由器。
R1(config-if)#standby 1 timers 3 10
//其中3为hello time,表示路由器每隔多长时间发送hello信息,10为hold time,表示在多长时间内同组的其他路由器没有收到活动路由器的信息,则认为活动路由器出故障了。该设置的默认值分别为3s和10s.如果要更改默认值,所有同hsrp组的路由器的该项设置必须一致。
R1(config-if)#standby 1 authentication md5 key-string cisco
//以上是配置认证密码。防止非法设备加入到hsrp组中,同一个组的密码必须一致。
R3(config)#int fa 0/0
R3(config-if)#standby 1 ip 192.168.13.254
R3(config-if)#standby 1 preempt
R3(config-if)#standby 1 timers 3 10
R3(config-if)#standby 1 authentication md5 key-string cisco
//以上我们没有配置优先级,默认为100
(3)步骤3:检查、测试hsrp
R1#:show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P  State   Active          Standby         Virtual IP
Fa0/0      1   120 P Active  local           192.168.13.3    192.168.13.254
//以上表明R1就是活动路由器,备份路由器为R3(192.168.13.3)
R3#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp   Pri  P  State     Active          Standby         Virtual IP
Fa0/0       1    100 P  Standby  192.168.13.1      local           192.168.13.254
//以上表明R3是备份路由器,活动路由器为R1(192.168.13.1)
在PC1上配置IP地址192.168.13.100/24,网关指向192.168.13.254,在PC2上配置IP 地址172.16.1.100/24,网关指向172.16.1.1。
在PC1上连续ping PC2上,在R1上关闭fa 0/0接口,观察PC1上ping 的结果:
C:\>ping –t 172.16.1.100
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
… …
***以下省略部分输出***
然后在R1上关闭fa 0/0接口,观察PC1上ping 的结果:
C:\>ping –t 172.16.1.100
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Request timed out.
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=13ms TTL=254
Reply from 172.16.1.100; bytes=32 time=13ms TTL=254
再从路由器R3上运行以下查看命令
R3#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp   Pri  P  State     Active          Standby         Virtual IP
Fa0/0       1    100 P  Standby    local         Unknown           192.168.13.254
//以上可以看到,R1故障时,R3很快就替代了R1,通信只受到短暂的影响
(4)步骤4:配置端口跟踪。
同上,在在PC1上连续ping PC2上,在R1上关闭S 0/0/0接口,观察PC1上ping 的结果:
C:\>ping –t 172.16.1.100
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Request timed out
Request timed out
Request timed out
… …
***以下省略部分输出***
//结果是PC1无法ping 通PC2


R1#:show standby brief
                     P indicates configured to preempt.


Interface   Grp  Pri P  State   Active          Standby         Virtual IP
Fa0/0      1   120 P Active  local           192.168.13.3    192.168.13.254
//以上表明R1就是活动路由器,备份路由器为R3(192.168.13.3)
R3#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp   Pri  P  State     Active          Standby         Virtual IP
Fa0/0       1    100 P  Standby  192.168.13.1      local           192.168.12.254
//以上表明R3是备份路由器,活动路由器为R1(192.168.13.1)
【说明】
在前面的配置环境中S0/0/0接口故障对于活动路由器的变化没有影响,R1和R3之间的以太网仍然没有问题,HSRP的Hello包正常发送和接收。因此,R1仍然是虚拟网关192.168.13.254的活动路由器,PC1数据会发送给R1,而由于S0/0/0接口故障,R1将没有到达PC2所在网段的路由,这样会造成PC1无法ping 通PC2。我们可以配置端口跟踪解决这个问题:
R1(config)#int fa 0/0
R1(config-if)#standby 1 track s0/0/0 30
//以上表明跟踪的是s0/0/0接口,如果该接口处故障了,优先级降低30,变成120-30=90,刚好小于路由器R3的默认值100,使得路由器R3成为活动路由器。注意:降低的值应该选取合适的值,以使得其他路由器能成为活动路由器。
同样,按照前面的过程我们再在PC1上连续ping PC2上,在R1上关闭S 0/0/0接口,观察PC1上ping 的结果:
C:\>ping –t 172.16.1.100
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Request timed out.
Reply from 172.16.1.100; bytes=32 time=11ms TTL=254
Reply from 172.16.1.100; bytes=32 time=12ms TTL=254
Reply from 172.16.1.100; bytes=32 time=12ms TTL=254
Reply from 172.16.1.100; bytes=32 time=13ms TTL=254
Reply from 172.16.1.100; bytes=32 time=13ms TTL=254
再从路由器R3上运行以下查看命令
R3#show standby brief
                     P indicates configured to preempt.
                     |
Interface  Grp  Pri  P  State     Active          Standby         Virtual IP
Fa0/0     1   100  P  Standby    local         192.168.13.1     192.168.13.254
//以上可以看到,R1故障时,R3很快就替代了R1,通信只受到短暂的影响
从路由器R1上运行以下查看命令
R1#:show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P  State   Active          Standby         Virtual IP
Fa0/0      1    90 P  Active  local           192.168.13.3    192.168.13.254
//以上表明当R1的S0/0/0接口故障时,R1的优先级变为90,低于R3的优先级,R1变为备份路由器,活动路由器为R3(192.168.12.3)
(5)步骤5:配置多个HSRP组。
之前的步骤已经虚拟了192.168.12.254网关,对于这个网关只能有一个活动路由器R1,R3是备份路由器,于是活动路由器R1将承担全部的数据流量,可以再 创建一个HSRP组,虚拟出另一个网关192.168.12.253,这时R3是活动路由器,R1是备份路由器,让一部分计算机指向这个网关,这样就能做到负载平衡,以下是创建2个hsrp组的完整的配置。
在R1上:
R1(config)#interface fa 0/0
R1(config-if)#standby 1 ip 192.168.13.254
R1(config-if)#standby 1 priority 120
R1(config-if)#standby 1 preempt
R1(config-if)#standby 1 authentication md5 key-string cisco
R1(config-if)#standby 1 track s0/0/0 30
R1(config-if)#standby 2 ip 192.168.13.253
R1(config-if)#standby 2 priority 100   //优先级默认为100,本句可省略
R1(config-if)#standby 2 preempt
R1(config-if)#standby 2 authentication md5 key-string cisco
在R3上:
R3(config)#interface fa 0/0
R3(config-if)#standby 1 ip 192.168.13.254
R3(config-if)#standby 1 priority 100  //优先级默认为100,本句可省略
R3(config-if)#standby 1 preempt
R3(config-if)#standby 1 authentication md5 key-string cisco
R3(config-if)#standby 2 ip 192.168.13.253
R3(config-if)#standby 2 priority 120
R3(config-if)#standby 2 preempt
R3(config-if)#standby 2 authentication md5 key-string cisco
R3(config-if)#standby 2 track s0/0/0 30
我们这里创建2个HSRP组,第一个组的IP为192.168.13.254,活动路由器为R1,这一部分计算机的网关指向192.168.13.254。第二组的IP为192.168.13.253,活动路由器为R3,这一部分计算机的网关指向192.168.13.253。这样,如果网络全部正常时将一部分PC的网关设为192.168.13.254,这部分数据是R1转发的,其他的PC的网关设为192.168.13.253,这部分数据是R3转发的。这样相当于手工实现负载均衡;如果一个路由器出现问题,则另一个路由器就成为两个HSRP组的活动路由器,承担全部的数据转发功能。但碰到如果计算机的IP 是通过DHCP分配的话,这种方式就不太方便使用了。

大家可以思考下是否可以在3台甚至更多的路由器上创建3个甚至多个HSRP组。





你可能感兴趣的:(网络互连)