文章整理自《华为防火墙技术漫谈》
双机热备概述
防火墙部署在企业网络出口处,内外网之间的业务都会通过防火墙转发。如果防火墙出现故障,便会导致内外网之间的业务全部中断。由此可见,在这种网络关键位置上如果只使用一台设备的话,无论其可靠性多高,我们都必然要承受因设备单点故障而导致网络中断的风险。
于是,我们在网络架构设计时,通常会在网络的关键位置部署两台(双机)或多台设备,以提升网络的可靠性。当一台防火墙出现故障时,流量会通过另外一台防火墙所在的链路转发,保证内外网之间业务正常运行。
路由器的双机部署只需考虑路由备份
如果是传统的网络转发设备(如路由器、三层交换机),只需要在两台设备上做好路由的备份就可以保证业务的可靠性。因为普通的路由器、交换机不会记录报文的交互状态和应用层信息,只是根据路由表进行报文转发。
如图所示,当R1出现故障时,R1所在链路Cost值变成无穷大,而在R3上看R2所在链路Cost值仍为21,这时网络的路由会重新收敛,流量会根据新的路由被转发到R2,所以R2会接替R1处理业务。业务从R1切换到R2的时间就是网络的路由收敛时间。如果路由收敛时间较短,则正在传输的业务不会中断。
防火墙的双机部署还需考虑会话备份
如果将传统网络转发设备换成状态检测防火墙,情况就大不一样了。状态检测防火墙是基于连接状态的,它会对条流量的首包(第一个报文)进行完整的检测,并建立会话来记录报文的状态信息(包括报文的源IP、源端口、目的IP、目的端口、协议等),而这条流量的后续报文只有匹配会话才能够通过防火墙并且完成报文转发,如果后续报文不能匹配会话则会被防火墙丢弃。
双机热备解决防火墙会话备份问题
防火墙双机热备功能最大的特点在于提供一条专门的备份通道(也称为心跳线),用于两台防火墙之间协商主备状态,以及备份会话、Server-map表等重要的状态信息和配置信息。双机热备功能启动后,正常情况下,两台防火墙会根据管理员的配置分别成为主用设备和备用设备。
上面介绍的是主备备份方式的双机热备。在主备备份场景中,正常情况下备用设备不处理业务流量,处于闲置状态。如果不希望买来的设备闲置,或者只一台设备处理流量时压力较大,可以选择负载分担方式的双机热备。
在负载分担场景下,两台防火墙均为主用设备,都建立会话,都处理业务流量。同时两台防火墙又都相互作为对方的备用设备,接受对方备份的会话和配置信息。
VRRP与VGMP的故事
VRRP概述
VRRP是一种容错协议,它保证当主机的下一跳路由器(默认网关)出现故障时,由备份路由器自动代替出现故障的路由器完成报文转发任务,从而保持网络通信的连续性和可靠性。
我们将局域网内的一组路由器(实际上是路由器的下行接口)划分在一起,形成一个VRRP备份组。VRRP备份组相当于一台虚拟路由器,这个虚拟路由器有自己的虚拟IP地址和虚拟MAC地址(格式:00-00-5E-00-01-{VRID},VRID是VRRP备份组的ID),所以,局域网内的主机可以将默认网关设置为VRRP备份组的虚拟IP地址。在局域网内的主机看来,它们就是与虚拟路由器进行通信的,然后通过虚拟路由器与外部网络进行通信。
VRRP备份组中的多个路由器会根据管理员指定的VRRP备份组优先级确定各自的VRRP备份组状态。优先级最高的VRRP备份组状态为Master,其余VRRP备份组状态为Backup。VRRP备份组的状态决定了路由器的主备状态。VRRP备份组状态为Master的路由器称为Master路由器,VRRP备份组状态为Backup的路由器称为Backup路由器。当Master路由器正常工作时,局域网内的主机通过Master路由器与外界通信。当Master路由器出现故障时,一台Backup路由器(VRRP优先级次高的)将成为新的Master路由器,接替转发报文的工作,保证网络不中断。
VRRP工作原理
管理员在路由器上配置完VRRP备份组和优先级后,VRRP备份组会短暂的工作在initialize状态。当VRRP备份组收到接口Up的消息后,会切换成Backup状态,等待定时器超时切换至Master 状态。
在VRRP备份组的多个路由器中,率先将VRRP备份组状态切换成Master的路由器将会成为Master路由器。VRRP备份组优先级越高的路由器,它的定时器时长越短,越容易成为Master路由器。这个根据VRRP备份组优先级确定Master路由器的过程称为Master路由器选举。
选举成功后,Master路由器会立即周期性(缺省为1秒)地向VRRP备份组中内的所有Backup路由器发送VRRP报文,以通告自己的Master状态和优先级。同时Master路由器会发送免费ARP报文,将VRRP备份组的虚拟MAC地址和虚拟IP地址通知给与它连接的交换机。
由于内网的PC将网关设置为VRRP备份组1的虚拟IP地址,所以当内网PC访问Internet时,首先会在广播网络中广播ARP报文,请求虚拟IP地址对应的虚拟MAC地址。这时只有Master路由器会回应此ARP报文,将虚拟MAC地址回应给PC。
PC使用虚拟MAC地址作为目的MAC地址封装报文,然后将其发送至交换机。交换机根据MAC表记录的MAC地址与端口的关系,将PC发送的报文通过端口Eth0/0/1转发给Router1。
以上讲的是正常情况下,Master路由器和Backup路由器的状态建立和运行过程。
下面将介绍Master路由器和Backup路由器的状态切换和运行过程。
当Master路由器发生故障(Router1整机或接口GE1/0/1故障)时,它将无法发送VRRP报文通知Backup路由器。如果Backup路由器在定时器超时后仍不能收到Master路由器发送的VRRP报文,则认为Master路由器故障,从而将自身状态切换为Master。
还有一种情况:当Master路由器主动放弃Master地位(如Master路由器退出VRRP备份组)时,会立即发送优先级为0的VRRP报文,使Backup路由器快速切换成Master路由器。
当VRRP备份组状态切换完成后,新的Master路由器会立即发送携带VRRP备份组虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的设备(下行交换机)中的MAC表项。下行的交换机的MAC表项会记录虚拟MAC地址与新的端口Eth0/0/2的对应关系。
当内网PC将报文发送给交换机后,交换机会将PC发送的报文通过端口Eth0/0/2转发给Router2,这样内网PC的流量就都通过新的Master路由器Router2转发了。这个过程对用户是完全透明的,内网PC感知不到Master路由器已经由Routerl切换成Router2。
当原Master路由器(现Backup路由器)Routerl故障恢复后,优先级会高于现在的Master路由器。这时如果配置了抢占功能,原Master路由器会在抢占定时器超时后将状态切换成Master,重新成为Master路由器;如果没有配置抢占功能,原Master路由器将仍然保持Backup状态。
多个VRRP状态相互独立产生问题
VRRP备份组之间是相互独立的,当一台设备上出现多个VRRP备份组时,它们之间的状态无法同步。
VGMP的产生解决了VRRP的问题
为了解决多个VRRP备份组状态不一致的问题,华为防火墙引入VGMP(VRRP Group Management Protocol,VRRP组管理协议)来实现对VRRP备份组的统一管理,保证多个VRRP备份组状态的一致性。我们将防火墙上的所有VRRP备份组都加入到一个VGMP组中,由VGMP组来集中监控并管理所有的VRRP备份组状态。如果VGMP组检测到其中一个VRRP备份组的状态变化,则VGMP组会控制组中的所有VRRP备份组统一进行状态切换,保证各VRRP备份组状态的一致性。
VGMP组有状态和优先级两个基本属性,并且有三条基本运行原则。
VGMP组的状态决定了组内VRRP备份组的状态,也决定了防火墙的主备状态。
两台防火墙的VGMP组状态是通过相互比较优先级来决定的。优先级高的VGMP组状态为Active,优先级低的VGMP组状态为Standby。
VGMP组会根据组内VRRP备份组的状态变化来更新自己的优先级。一个VRRP备份组的状态变成Initialize,VGMP组的优先级就会降低2。
VGMP报文结构
在双机热备中,两台防火墙的VGMP组是通过VGMP报文来传递状态和优先级信息的,VGMP是华为的私有协议,它为了实现防火墙双机热备功能对VRRP报文进行了扩展和修改,并衍生出多种使用VGMP报文头封装的报文。
从VGMP报文封装顺序中我们可以发现,VGMP报文是根植于VRRP报文的,是由VRRP报文头封装的。但这个VRRP报文头并不是标准的VRRP报文头,是经过华为扩展和修改的新VRRP报文头,具体有以下几点变化。
- 标准VRRP报文头的"Type"字段只有"1"一个取值,新VRRP报文头中增加了"2”取值。也就是说如果Type=1,就是标准的VRRP报文头;如果Type=2,就是我们修改后的新VRRP报文头。
- 标准VRRP报文头的"Virtual Rtr ID"字段代表VRRP备份组ID,而修改后的新VRRP报文头"Virtual Rtr ID"取值固定为"0"。
- 修改后的新VRRP报文头中去掉了标准VRRP报文的"IPAddress"字段。
- 标准VRRP报文头中的"Priority"字段在新VRRP报文头中被修改成"Type2"字段。
VGMP报文(VGMP Hello报文)。VGMP Hello报文用于两台防火墙间的VGMP组协商主备状态。
HRP心跳报文(HRP Hello报文),HRP心跳报文用于探测对端的VGMP组是否处于工作状态。状态为Active的VGMP组会每隔一段时间(缺省为1s)向对端的VGMP组发送HRP心跳报文,用来通知本端的VGMP组状态和优先级。
如果状态为Standby的VGMP在三个周期内没有收到对端发送的HRP心跳报文,则认为对端VGMP组故障,会将自身状态切换成Active HRP数据报文。在VGMP报文头后增加HRP报文头,才能封装成HRP数据报文。HRP数据报文用于主备设备之间的数据备份,包括命令行配置的备份和各种状态信息的备份。
在防火墙双机热备中新VRRP报文头是用来封装VGMP报文的,那标准的VRRP报文还存在吗,它还有什么作用?答案是标准VRRP报文仍旧存在,它还是用于VRRP备份组内部通信。只是其中的优先级字段(Priority)已经为固定值,无法配置,所以标准VRRP报文实际上已名存实亡。优先级字段失去作用导致标准VRRP报文已经无法控制VRRP备份组的状态协商了,只能在主备防火墙之间通告一下VRRP备份组的状态和虚拟IP地址了。这跟宪政体制下的“皇帝”的作用相似,保留名号,但没有管理国家的权利。
VGMP想要接管防火墙和VRRP备份组的状态管理,就意味着VGMP报文中必须要包含VGMP组状态和优先级信息。我们再看一下VGMP报文头的结构。
- "Mode"字段表示是请求报文还是应答报文。
- "vgmplD"字段表示VGMP组是Active组还是Standby组。
- "vPriority"字段表示VGMP组的优先级。
两台防火墙通过备份通道(心跳线)来传递备份数据,可见HRP数据报文是通过备份通道传输的。实际上以上所讲的各种VGMP报文(除标准VRRP报文)都是通过备份通道传输的。
那么使用VRRP封装的VGMP报文和使用UDP封装的VGMP报文有什么区别?前者是组播报文,不能跨越网段传输,不受安全策略控制;后者是单播报文,只要路由可达就可以跨越网段传输,但是受安全策略控制。具体来说就是如果是组播报文,那么两台防火墙的心跳口之间就必须直连或通过二层交换机相连,但是不需要配置安全策略;如果是单播报文,那么两台防火墙的心跳口之间可以通过路由器这种三层设备相连,但是需要配置安全策略允许报文在Local区域与心跳口所在安全区域间双向通过。另外使用业务接口做心跳口时也必须使用UDP封装VGMP报文。
防火墙VGMP组的缺省状态
每台防火墙提供两个VGMP组:Active组和Standby组。缺省情况下,Active组的优先级为65001,状态为Active;Standby组的优先级为65000,状态为Standby。主备备份情况下,主用设备启用Active组,所有成员(例如VRRP备份组)
加入Active组;备用设备启用Standby组,所有成员加入Standby组。负载分担情况下,两台设备都启用Active组和Standby组,每台设备上的所有成员分别加入Active组和Standby组。FW1的Active组和FW2的Standby组形成一组“主备",FW2的Active组和FW1的Standby组形成一组“主备”,两台防火墙互为“主备”,形成负载分担。
主备备份双机热备状态形成过程
各种VGMP报文和HRP报文都是通过心跳口发送的,心跳口可以说是双机热备的
“命脉”,要点多多,务必关注。
- 两台设备的心跳口必须加入相同的安全区域。
- 两台设备的心跳口的接口类型和编号必须相同。例如主用设备的心跳接口为GigabitEthernet 1/0/2,那么备用设备的心跳接口也必须为GigabitEthernet 1/0/2。
- 当双机热备的两台防火墙距离较近时,心跳口可以直接相连或通过二层交换机相连。配置方法是在配置心跳口时不添加remote参数。这时心跳口发送的报文是用VRRP报文封装的,是组播报文。组播报文不能跨越网段传输,且不受安全策略控制。这是首选的心跳口相连方式。
- 当双机热备的两台防火墙距离较远且需要跨越网段传输时,心跳口需要通过路由器相连。配置方法是在配置心跳口时添加remote参数,指定对端心跳口地址(例如hrp interface GigabitEthernet 1/0/2 remote 10.1.1.2),添加remote参数后,从心跳口发送的各种报文将封装成UDP报文。UDP报文是单播报文,只要路由可达就可以跨越网段传输,但需要受到安全策略控制。安全策略的配置方法是允许目的端口为18514的报文在Local区域与心跳口所在安全区域间双向通过。
- 当双机热备的两台防火墙接口资源紧张时,也可以使用业务接口作为心跳
口。配置方法是在配置心跳口时添加remote参数,指定对端心跳口(其中的一个业务接口)的地址。安全策略的配置方法是允许目的端口为18514的报文在Local区域与心跳口所在安全区域间双向通过。
主用设备接口故障后的状态切换过程
1.当主口GE10/1障后,FW1的VRRP备份组1的状态变成Initialize。
2.FW1的Active组会感知到这一变化,将自身的优先级降低2(一个接口故障优先降低2),并自身状成Active To Standby(图中简写为A To S),Active To Standby是一种短暂的中间状态,用户是不可见的。
3.FW1的Active组会向对端发送VGMP请求报文,请求将状态切换成Standby。
VGMP请求报文是一种VGMP报文,携带本端VGMP组调整后的优先级64999
4.FW2的Standby组收到FW1的Active组的VGMP请求报文后,将会与对端比较VGMP优先级。经过比较后发现本端的优先级65000高于对端的64999,因此FW2的Standby组会将自身状态切换成Active。
5.FW2的Standby组会向对端返回VGMP应答报文,允许对端进行状态切换。
6.与此同时FW2的Standby组会强制组内的VRRP备份组1和2也将状态切换成Active.
7.FW2的VRRP备份组1和2会分别向下行和上行交换机发送免费ARP报文,更新它们的MAC转发表。
8.FW1的Active组收到对端的VGMP确认报文后,会将自身状态切换成Standby。
9.FW1的Active组会强制组内的VRRP备份组将状态切换成Standby。由于VRRP备份组1内的接口故障,所以VRRP备份组1的状态为Initialize不变,只有VRRP备份组2的状态切换成Standby。
10.与此同时,上下行交换机收到FW2的免费ARP报文后会更新MAC表项,记录虚拟MAC地址与端口Etho/0/2的对应关系。这样当上下行的业务流量到达交换机后,交换机会将流量转发到FW2上。至此两台防火墙的主备状态切换完成,FW2成为新的主用设备,FW1成为新的备用设备。
11.主备状态切换完成后,新的主用设备FW2会定时向新的备用设备FW1发送心跳报文。
主用设备整机故障后的状态切换过程
当原主用设备故障恢复后,如果配置了抢占功能,那么原主用设备将重新抢占成为主用设备。如果没有配置抢占功能,则原主用设备依旧保持备份状态。
总结
VGMP在双机热备中主要实现以下三个功能
1.故障监控
VGMP组能够监控VRRP备份组状态变化,从而感知到VRRP组内接口的故障和恢复。强叔脑中闪出新的问号:那么VGMP组能不能直接监控接口故障呢,一定要通过VRRP备份组监控接口么?
2.状态切换
VGMP组的状态切换过程也就是设备主备状态切换的过程。VGMP组感知到VRRP备份组状态变化后,会调整自身的优先级,并与对端的VGMP组重新协商主备状态。这一点比较清楚了,本节都是在讲状态如何切换和协商的。
3.流量引导
两个VGMP组主备状态建立或者切换后,会强制组内VRRP备份组状态统一切换,然后由状态为Active的VRRP备份组发送免费ARP来引导流量通过自身转发,也就是通过主用设备转发。