双机热备的备份问题
1、配置备份问题
如下图所示,主用设备 FW1 上配置了允许内网用户访问外网的安全策略。如果主用设备 FW1配置的安全策略没有备份到备用设备 FW2 上,那么当主备状态切换后,因为防火墙缺省情况下禁止所有报文通过新的主用设备,FW2不会允许内网用户访问外网,从会而导致业务中断。
2、会话备份问题
防火墙属于状态检测防火墙,对于每一个动态生成的连接,都需有一个会话表项与之对应。如下图所示,主用设备 FW1 上创建了 PC1 访问 PC2 的会话, PC1 与 PC2 之间的后续报文会按照此会话转发。如果主用设备 FW1 上的会话不能备份到备用设备 FW2 上,那么当主备状态切换后, PC1 访问 PC2 的后续报文在FW2 上匹配不到会话。这样就会导致 PC1 访问 PC2 的业务中断。
HRP的作用
为了实现主用设备出现故障时备用设备能平滑地接替工作,必须在主用和备用设备之间备份关键配置命令和会话表等状态信息。为此华为防火墙引入了 HRP( Huawei Redundancy Protocol)协议,实现防火墙双机之间动态状态数据和关键配置命令的备份。
如下图所示,主用设备 FW1 上配置了允许内网用户访问外网的安全策略,所以 FW1 会允许内网 PC1 访问外网 PC2 的报文通过,并且会建立会话。
由于在 FW1 和 FW2 上都使用了 HRP协议(配置了双机热备中的 HRP 功能),因此主用设备 FW1 上配置的安全策略和创建的会话都会备份到备用设备 FW2 上。这样当主备状态切换后,由于备用设备上已经存在允许内网用户访问外网的安全策略以及 PC1 访问 PC2 的会话,所以 PC1 访问 PC2 业务报文不会被禁止或中断。
HRP备份实现原理
防火墙通过心跳口(HRP 备份通道)发送和接收 HRP 数据报文来实现配置和状态信息的备份。如下图所示, HRP 数据报文从外到内依次封装了 VRRP 报文头、 VGMP 报文头和 HRP报文头。其中 VRRP 报文头中 Type=2, Type2=2。VGMP 报文头中的“vType”字段对应为“HRP 数据报文”的取值。
HRP 报文头中的关键参数:
- Source Module ID和Source Sub Module ID表示本端防火墙哪些特性模块和子模块的数据需要备份。
- Dest Module ID和和Dest Sub Module ID表示需要向对端防火墙的哪些特性模块和子模块备份数据。
HRP数据备份的过程如下图所示:
- FWA在发送HRP数据报文时,会将ASPF特性模块的ID写入HRP报文头的“Source Module ID”和“Dest Module ID”字段中,并将ASPF模块的配置和表项信息封装到HRP据报文中。
- FW_A将HRP数据报文通过备份通道发送给FW_B。
- FW_B收到HRP数据报文后,会根据HRP数据报文中的“Source Module ID”和“Dest Module字段将报文中的配置和表项信息发送到本端的特性模块,并进行配置与表项的下发。
HRP能够备份的配置与状态信息
FW能够备份的配置如下:
- 策略:安全策略、NAT策略(包括NAT地址池)、NAT Server、服务器负载均衡、带宽管理、认证策略、审计策略、攻击防范、黑名单、ASPF
- 对象:地址、地区、服务、应用、用户、认证服务器、时间段、地址池、URL分类、关键字组、邮件地址组、签名、安全配置文件(反病毒、入侵防御、URL过滤、文件过滤、内容过滤、应用行为控制、邮件过滤、APT防御)、健康检查
- 网络:新建逻辑接口、安全区域、DNS、静态路由(配置hrp auto-sync config static-route后才可以备份)、IPSec、SSL VPN、TSM联动、DHCP Server、DHCPv6 Server
- 系统:管理员、虚拟系统(包括虚拟系统创建和虚拟系统内的业务配置命令)、日志配置
说明:
一般情况下,display、reset、debugging命令都不支持备份。
缺省情况下,对于可以备份的配置命令,只能在配置主设备上执行。可以在配置主设备或配置备设备上执行hrp standby config enable命令,开放配置备设备的配置权限。
如果配置命令支持备份,在FW上执行命令时,命令后面会有(+B)的标识符。例如,下图中安全策略相关的配置命令支持备份,接口IP地址的配置命令不支持备份。
FW能够备份的状态信息如下:
- 会话表
- SeverMap表
- 黑名单
- 白名单
- PAT方式端口映射表
- NO-PAT方式地址映射表
- 二层转发表(静态mac备份)
- AAA用户表(缺省用户admin不备份)
- 在线用户监控表
- PKI证书,CRL
- IPSec备份
HRP 的备份方向
- 在主备备份组网下,配置命令和状态信息都由主用设备备份到备用设备。
- 在负载分担组网下,配置命令只能由“配置主设备”备份到“配置备设备”。状态信息则是两台设备相互备份的。
在负载分担组网下,两台FW都是主用设备。如果允许两台主用设备之间能够相互备份命令,那么可能就会造成两台设备命令相互覆盖或冲突的问题。
为了方便管理员对两台FW配置的统一管理,避免混乱,华为引入配置主和配置从设备的概念。发送备份配置命令的FW称为配置主设备,接收备份配置命令的FW称为配置从设备。
配置主和配置从设备的选举情况如下:
- 设备名称(sysname)的ASCⅡ码较小的FW会成为配置主设备。例如,FW_A与FW_B形成负载分担,FW_A会成为配置主设备;
- 如果两台设备名称(sysname)相同,执行hrp enable命令时的时钟小为主,执行hrp enable命令时的时钟大为备。
HRP的三种备份方式
双机热备的HRP支持以自动备份、手工批量备份和快速备份三种方式。下面对这三种备份方式的描述和区别进行介绍。
自动备份
自动备份功能(命令为 hrp auto-sync [ config | connection-status ]) 缺省为开启状态,能够自动实时备份配置命令和周期性地备份状态信息。
- 备份配置命令:启用自动备份功能后,在一台FW上每执行一条可以备份的命令时,此配置命令就会被立即同步备份到另一台FW上。
- 备份状态信息:启用自动备份功能后,主用设备会周期性地将可以备份的状态信息备份到备用设备上。即主用设备的状态信息建立后不会立即备份,而是在建立一段时间(10秒左右)之后才会备份到备用设备。
手工批量备份
手工批量备份需要管理员手工触发,每执行一次手工批量备份命令(hrp sync [ config | connection-status ]),主用设备就会立即同步一次配置命令和状态信息到备用设备。因此手工批量备份主要适用于主备设备之间配置不同步,需要手工同步的场景。
- 执行手工批量备份命令后,主用设备会立即同步一次可以备份的配置命令到备用设备。
- 执行手工批量备份命令后,主用设备会立即同步一次可以备份的状态信息到备用设备,而不必等到自动备份周期的到来。
说明
用户的配置信息包含两部分:一部分保存在配置文件,另一部分保存在用户数据库。前者支持自动备份和手工批量备份,后者仅支持自动备份。
快速备份
快速会话备份功能(命令为 hrp mirror session enable), 适用于负载分担的工作方式,以应对报文来回路径不一致的场景。为了保证状态信息的及时同步,快速备份功能只是备份状态信息,不备份配置的命令。配置命令的备份由自动备份功能实现。
FW使用自动备份方式进行备份状态信息时,不同类型会话表的备份支持情况和备份时机如下:
- 到FW自身和从FW发出的报文产生的会话不会备份。
- ICMP会话不会备份。
- 对于TCP协议会话,FW在TCP三次握手完成后才会备份会话。
- 对于UDP协议会话,FW在收到正向的第二个报文后才会备份。
- 对于SCTP协议会话,FW在SCTP四次握手完成后才会备份会话。
在报文来回路径不一致的场景下,上述会话备份机制可能导致业务异常。如下图所示,一条TCP连接的SYN报文是由FW_A转发,SYN-ACK报文被引导到FW_B上处理。
对于TCP协议报文,默认FW只有在收到SYN报文时才会创建会话,收到SYN+ACK、ACK报文不会创建会话。因此,FW_A收到SYN报文,会创建一条TCP半连接会话。FW_B只收到了SYN-ACK报文,不会创建会话。由于自动备份方式FW_A不会向FW_B备份TCP半连接会话,当SYN-ACK报文到达FW_B时,会因为匹配不到会话而被丢弃,TCP连接无法建立。
为了解决上述问题,需要在FW上开启会话快速备份功能。启用快速备份功能后,主用设备会实时的将可以备份的状态信息都同步到备用设备上,同时FW上不同类型会话表的备份支持情况和备份时机如下:
- 到FW自身和从FW发出的报文产生的会话不会备份。
- ICMP会话会备份,FW收到ICMP ECHO-REQUEST报文生成会话后就立即备份会话。
- 对于TCP协议会话,FW收到SYN报文生成会话后就立即备份会话。
- 对于UDP协议会话,FW收到正向的首个报文生成会话后就立即备份会话。
- 对于SCTP协议会话,FW收到INIT报文生成会话后就立即备份会话。
如下图所示,开启会话快速备份后,FW_A收到SYN报文创建的TCP半连接会话会立即备份到FW_B。当SYN-ACK报文到达FW_B时,会匹配FW_A备份过来的会话转发。
综上所示,三种备份方式的使用方式通常是:自动备份(hrp auto-sync [ config | connection-status ]) 默认开启,不要关闭;如果主备设备之间配置不同步,需要执行手工批量备份的命令(hrp sync [ config | connection-status ]);如果是负载分担组网,一般需要开启快速会话备份功能(hrp mirror session enable)。
心跳口与心跳链路探测报文
两台防火墙之间备份的数据是通过防火墙的心跳口发送和接收的,是通过心跳链路(备份通道)传输的。心跳口必须是状态独立且具有 IP 地址的接口,可以是一个物理接口 GE,也可以是为了增加带宽,由多个 GE 接口捆绑而成的一个逻辑接口 Eth-Trunk(通常情况下,备份数据流量约为业务流量的 20%~30%)。
如下图所示,两台防火墙通过心跳口相互发送心跳链路探测报文,来检测对端设备的心跳口能否正常接收本端设备的报文,以确定是否有心跳口可以使用。心跳链路探测报文也是由 VRRP 报文头封装的,当 VRRP 报文头中 Type=2, Type2=2 时,报文封装成心跳探测链路报文。
如上图所示,心跳接口有五种状态(执行命令 display hrp interface 可以查看):
- invalid:当本端防火墙上的心跳口配置错误时显示此状态(物理状态up,协议状态down),例如指定的心跳口为二层接口或未配置心跳接口的IP地址。
- down:当本端防火墙上的心跳口的物理与协议状态均为down时,则会显示此状态。
- negotiation failed:表示和对端设备协商主备状态失败。有可能是因为本端和对端设备的软件版本不一致、某端配置错误、对端设备的心跳接口状态为Down、HRP源或目的端口号被修改、或者底层链路不通等原因导致。
- ready:当本端FW上的心跳口的物理与协议状态均为up时,则心跳口会向对端对应的心跳口发送心跳链路探测报文。如果对端心跳口能够响应此报文(也发送心跳链路探测报文),那么FW会设置本端心跳接口状态为ready,随时准备发送和接受心跳报文。这时心跳口依旧会不断发送心跳链路探测报文,以保证心跳链路的状态正常。
- running:当本端FW有多个处于ready状态的心跳口时,FW会选择最先配置的心跳口形成心跳链路,并设置此心跳口的状态为running。如果只有一个处于ready状态的心跳口,那么它自然会成为状态为running的心跳口。状态为running的接口负责发送HRP心跳报文、HRP数据报文、HRP链路探测报文、VGMP报文和一致性检查报文。
综上所述,心跳链路探测报文和 HRP 心跳报文的区别如下:
- 心跳链路探测报文用于检测对端设备的心跳口能否正常接收本端设备的报文,以确定心跳口是否可用的。只要本端心跳接口的物理和协议状态 up 就会向对端心跳口发送心跳链路探测报文进行探测。
- HRP 心跳报文是用于探测和感知对端设备(VGMP 组)是否正常工作的。HRP 心跳报文只有主用设备的 VGMP组通过状态为 running 的心跳口发出。
HRP一致性检查报文
配置一致性检查功能用来检测组成双机热备的两台FW的关键配置是否相同。
配置一致性检查可以通过以下两种方式触发:
- 配置主设备周期性地自动发起一致性检查
- 管理员在FW上执行hrp configuration check命令触发一致性检查
HRP一致性检查的实现原理如下:
- 执行一致性检查命令后,执行此命令的设备会发送一致性检查请求报文给对端,并且同时收集自身的相关模块的配置信息摘要。
- 对端设备收到请求后,会收集自身相关模块的配置信息摘要,然后封装到一致性检查报文中返回给本端设备。
- 本端设备会对比自身的配置摘要和对端设备的配置摘要,并记录比较信息。客户可以执行命令display hrp configuration check查看一致性检查结果。