一、双机热备概述

通常企业都会在出口或者边界部署防火墙,为了避免单台防火墙失效,在网络设计时就将防火墙高可靠纳入设计方案中,一般采用两台防火墙做冗余,保障业务的连续性。防火墙的冗余部署不同于路由器和交换机仅需要考虑路由备份,还需要考虑会话备份。解决防火墙会话备份的关键就是双机热备技术。

双机热备技术提供了一条心跳线,用于两台防火墙之间协商主备状态、会话备份、Server-map等重要状态信息和配置信息。双机热备支持主备和主主两种运行模式:

  • 主备备份:两台防火墙根据配置分别称为Active和Standby,Active会负责处理业务,并将设备上的会话、Server-map等重要状态信息以及配置信息通过心跳线实时同步给Standby,Standby不会处理任何流量。

  • 负载分担:两台防火墙根据配置均为Active,都负责处理业务并且建立会话,同时两台防火墙之间互为备份,接受和备份对方的会话、Server-map。

二、双机热备原理

USG防火墙的双机热备技术是对VRRP的扩展。当根据高可靠设计原则,在防火墙上下行接口均配置VRRP时,如何同步VRRP的状态是防火墙能够实行主备切换的关键。华为通过提出采用VGMP来实现多个VRRP之间的状态同步。

VGMP(VRRP Group Management Protocol,VRRP组管理协议)用于实现对多个VRRP的统一管理,保证状态的一致性。VGMP是华为私有协议,VGMP协议跑在心跳线上,VGMP运行规则:

  • VGMP组状态决定了VRRP的状态和防火墙的主备状态。

  • VGMP优先级决定了防火墙的A/S。优先级高的是Active,优先级低的是Standby。

  • VGMP根据组状态的变化来更新自己的优先级。

正常A/S组网场景下,通常的做法就是上下链路均采用VRRP,以实现故障后的无感切换。如何将上下链路的VRRP进行统一管理和状态同步就是VGMP的主要职责。通过设置USG_A的上下行链路VRRP为Active,USG_B的上下行链路VRRP为Standby来指定主备设备,如果发现USG_A上的上下行链路任意一个VRRP组状态发生变化,那么VGMP就会将此消息同步给另一个VRRP组,最后达到上下行链路VRRP组状态一致。同时VGMP会降低自身的优先级,通过心跳线路的hello报文交互比较后,重新协商主备状态。USG_B接管Active后,通过向上下行链路发送ARP以刷新MAC转发表,交换机将流量从USG_A转而发送给USG_B,实现流量的无感切换。

1、双机热备建立&维护

两台USG防火墙建立和维护双机热备需要通过VGMP报文和HRP报文交互。各报文的作用:

  • VGMP报文:交换VGMP组状态信息,协商主备。

  • HRP心跳报文:主备协商完成后探测对端存活情况。

  • HRP数据报文:主备切换之前的数据备份,包括配置和会话。

  • HRP链路探测报文:探测对端心跳口能否正常工作,防止心跳口假死,类似FortiGate的pingserver。

  • 一致性检查报文:主备运行模式下两台USG是否具备相同的配置。

某项目中检查USG防火墙异常日志时发现The key pairs of the active and standby devices are inconsistent(VsysID=0).To solve this problem, run the pki rsa local-key-pair backup all-sys and pki certificate backup all-sys commands.这是因为USG6600 V500R005C20之前的版本以及USG6000E V600R007之前的版本,在防火墙组建双机时,会自动把主墙的证书和rsa密钥对同步给备墙并覆盖掉备墙已有的预置证书和rsa密钥对。后来研发考虑到直接同步覆盖风险比较大,所以在USG6600 V500R005C20版本以及USG6000E V600R007版本开始就不会直接同步了,如果主备不一致会报HRPI/4/COCHK主备配置不一致。通过在主防火墙配置以下命令消除告警:pki rsa local-key-pair backup all-sys、pki certificate backup all-sys。此命令对在线业务无影响,操作前请先告知客户,得到客户授权后方可操作。

1)双机热备建立过程

USG防火墙默认每秒相互发送VGMP报文。通过VGMP报文中的字段和自身VGMP组状态进行比对,进行角色切换。以下是双机热备建立过程:

  • hrp enable后,VGMP组状态Init切换为Standby,互相发送VGMP报文。

  • 对比VGMP报文中的优先级和组状态字段发现相同,VGMP组状态Standby切换为Load Balance。

  • 对比VGMP报文中的设备角色发现Standby-device,VGMP组状态Load Balance切换为Active,另一台USG VGMP组状态Load Balance切换为Standby。

双机热备的维护需要通过VGMP报文和HRP报文。通过不断交互优先级、VGMP组状态和角色,以维持双机热备。备防火墙则通过HRP报文探测主防火墙是否存活,如果主防火墙连续5次无法收到HRP报文,则备防火墙则认为主防火墙整机故障,将自身的VGMP状态调整为Active,并开始接管流量。

2)双机热备同步机制

主备备份和负载分担运行模式下,双机热备的同步尤为重要。当前的NGFW很多都是具备状态化功能,而维护状态化功能的关键就是表项,其中会话表如果不同步,则会导致传输中的数据中断。

正常情况下主防火墙会生成很多动态表项,备防火墙不会有任何表项。为了保障主备切换后,业务不中断的需求,华为提出了HRP(Huawei Redundancy Protocol,华为冗余协议),HRP主要用于主备防火墙之间的动态表项和关键配置的同步。

配置信息同步项:

  • 策略:安全策略、NAT策略(包括NAT地址池)、NAT Server、服务器负载均衡、带宽管理、配额控制策略、代理策略、审计策略、加密流量检测、攻击防范、信誉、Ping代理、IP限速、白名单、黑名单、IP-MAC绑定、ASPF配置。

  • 对象:证书(包括本地证书、CA证书、CRL、证书过滤、SSL解密证书)、地址、地区、服务、应用、用户、短信发送配置、终端设备、认证服务器(包括RADIUS、HWTACACS、AD、LDAP、Agile Controller)、地址池、时间段、标签、URL分类、DNS分类、关键字组、MIME标题组、邮件地址组、签名、安全配置文件(反病毒、入侵防御、URL过滤、DNS过滤、文件过滤、内容过滤、应用行为控制、云接入安全感知、邮件过滤、APT防御、全局配置)、健康检查。

  • 网络:新建逻辑接口、接口对、安全区域、VXLAN、DNS、静态路由(配置hrp auto-sync config static-route后才可以备份)、DHCP Server、DHCPv6 Server、虚拟路由器(ip vpn-instance)、IPSec、SSL VPN、SACG。

  • 系统:管理员、虚拟系统(包括虚拟系统创建和虚拟系统内的业务配置命令)、日志配置。

接口地址和路由不能备份,需要在双机热备建立前完成配置。

状态信息同步项:会话表、SeverMap表、黑名单、白名单、PAT方式端口映射表、NO-PAT方式地址映射表、二层转发表(静态MAC备份)、AAA用户表(缺省用户admin不备份)、在线用户监控表、PKI证书,CRL、IPSec备份、支持IKE、IKEv2安全联盟的备份、支持隧道的批量备份、支持隧道和序列号的实时备份。

双机热备建立后,只能在主防火墙上配置,备防火墙无法配置。可以通过在主防火墙上配置hrp standby config enable命令后,备防火墙便可以配置了,此时如果在备防火墙上新增可同步的配置,那么主防火墙也能同步该配置。默认情况双机热备建立后会自动备份配置周期性的同步状态信息

2、双机热备故障&恢复

一台防火墙需要的最基本也是最重要的能力就是故障时的快速无感切换&恢复。USG系列防火墙通过VGMP的状态优先级来实现故障&恢复功能。VGMP的状态优先级信息的同步则是依靠VGMP报文承载在心跳线路上。

1)VGMP状态&VGMP优先级

VGMP状态分为四种:Initialize、Load Balance、Active、Standby。其中稳定态主要是Active和Standby,主防火墙显示Active,备防火墙显示Standby。防火墙的选举流程及VGMP的状态变化过程(当工程师配置好两边的双机热备配置,同时undo shutdown心跳链路时):

  • 主备场景:USG_B比USG_A多一个hrp standby-device。

  • 负载场景:USG_A和USG_B双机热备配置完全相同。

VGMP初始优先级为45000。优先级是主备切换时的重要依据参数,高优先级的防火墙为Active,低优先级的防火墙为Standby,所以控制优先级的增减就是控制主备切换。USG通过监控接口来控制优先级:

高端USG型号例如9500系列具备更多的降低优先级的故障监控参数。

2)故障点&切换流程

故障主要分为接口/链路故障,整机故障,主墙恢复后的抢占动荡。针对三种类型的故障,描述故障切换流程。

接口/链路故障

为了更快速的检测故障点,业内具备了较完善的故障探测方案,比较常用的就是接口和链路故障。接口故障检测较为直接,通常将业务接口加入到VGMP监控中,以实现业务接口故障后,能够快速同步多个VRRP组状态和主备切换。链路故障一般用于防火墙和其他三层设备之间直连了一台二层设备,如果故障点发生在二层设备和其他三层设备之间,那么业务接口监控其实是感知不到的,所以需要增加链路监控,让VGMP故障感知范围扩大。

接口监控可以针对物理接口、聚合接口、Vlanif等。USG针对聚合接口的监控和其他厂商不太一样,默认情况下聚合接口中的任意一个成员接口down,都会导致优先级降低。从正常的思考逻辑来说,聚合接口一般都看作一个逻辑接口,其成员接口的Up/Down应当没有必要对VGMP优先级造成影响,所以一般会配置undo hrp track trunk-member enable关闭因成员接口down而导致的主备切换。

链路监控可以采用IP LINK或者BFD来做,两个工具都是用于远端链路探测的,但是一般采用BFD,因为感知故障的时间更快。在实际应用中,会发现USG和S系列的交换机建立指定label的双向BFD时会有无法建立BFD Session的情况出现,后来两端修改为自动协商label的方式建立双向BFD能够成功。不同产品线,但是同品牌出现这种问题,这其实是一种遗憾,希望华为针对BFD能够做一些优化。

监控发生故障后,通过主备切换来恢复故障。但是仅仅主备切换仍然无法解决实际生产环境中遇到的问题。为了实现无感流量切换,需要考虑以下几点:

  • 会话同步:该功能主备设备之间通过心跳线路和VGMP报文同步。

  • 静态路由同步:USG默认不对静态路由进行同步,需要配置hrp auto-sync config static-route以进行同步。

  • 主备防火墙通告不同的OSPF Cost值:为了影响互联设备的下一跳的选路,主备通过通告相同路由的不同Cost,主防火墙通告正常的OSPF Cost,备防火墙通告偏大的OSPF Cost。主备防火墙配置hrp adjust ospf-cost add 100,备防火墙通告的路由将比主防火墙的Cost大100。

整机故障

如果USG_A出现整机故障,此时USG_B仍然发送心跳报文,如果连续5次收不到心跳报文,USG_B则认为USG_A整机故障,将自身的VGMP状态调整为Active,并开始接管流量。

主墙恢复后的抢占

存在常见的第三种场景就是主墙恢复后是否抢占。默认情况下不抢占,如果主墙接口/链路恢复,且配置了抢占,那么抢占默认会在60s后生效。为了避免不必要的业务震荡,建议将抢占延迟计时提高到120s左右,防止主防火墙恢复后接口再次故障引起主备再次切换的情况。

3、主备切换测试

当配置主备备份运行模式后,需要对主备进行切换测试。除了可以通过命令强制进行切换测试外,还可以通过触发监控链路以触发主备切换。

通过在主防火墙上配置hrp switch standby命令强制切换成备防火墙,该命令主要通过降低VGMP优先级值来达到切换效果。

三、双机热备最佳实践

USG防火墙A/S配置建议:

  • VGMP

  • 近端接口监控:track interface

  • 远端链路监控:track bfd-session

  • 静态路由同步:auto-sync static

  • 主防火墙抢占:preempt delay 120s

  • OSPF Cost修改:adjust ospf-cost enable add 100

USG-6K-01/Act#
sysname USG-6K-01/Act

int eth-trunk 0
description HA_Link
ip address 1.1.1.1 32
service-manage ping permit
service-manage ssh permit
service-manage http permit
service-manage https permit
undo shutdown

int GE1/0/3
description To_USG-6K-02/Stby_GE1/0/3
eth-trunk 0

int GE1/0/4
description To_USG-6K-02/Stby_GE1/0/4
eth-trunk 0

firewall zone name HA id 4
set priority 95
add interface Eth-trunk 0

hrp enable
hrp interface Eth-trunk 0 remote 1.1.1.2
hrp preempt delay 120
hrp auto-sync config static-route
undo hrp track trunk-member enable
hrp track interface GE1/0/1
hrp adjust ospf-cost enable add 100

int GE1/0/1
description To_SW-5700-01_GE0/0/1
ip address 10.11.127.1 29
vrrp vrid 1 virtual-ip 10.11.127.3 active
service-manage ping permit
undo shutdown

int GE1/0/2
description To_SWHX-01_GE0/0/1
ip address 10.11.128.1 30
ospf network-type p2p
service-manage ping permit
service-manage ssh permit
service-manage http permit
service-manage https permit
undo shutdown

int Lo0
ip address 100.27.10.1 32

ospf 10 router-id 100.27.10.1
area 0.0.0.0
network 10.11.128.0 0.0.0.3

route-static 0.0.0.0 0.0.0.0 10.11.127.6 description To_Internet

firewall zone trust
set priority 85
add interface GE1/0/2

firewall zone untrust
set priority 0
add interface GE1/0/1

security-policy
 rule name Permit_Any_to_Any
 source-zone trust untrust local
 destination-zone trust untrust local
 action permit


bfd 
bfd 1 bind peer-ip 10.11.127.4 source-ip 10.11.127.1 auto
commit

USG-6K-02/Stby#
sysname USG-6K-02/Stby

int eth-trunk 0
description HA_Link
ip address 1.1.1.2 30
service-manage ping permit
service-manage ssh permit
service-manage http permit
service-manage https permit
undo shudown

int GE1/0/3
description To_USG-6K-01/Stby_GE1/0/3
eth-trunk 0

int GE1/0/4
description To_USG-6K-01/Stby_GE1/0/4
eth-trunk 0

firewall zone name HA id 4
set priority 95
add interface Eth-trunk 0

hrp enable
hrp interface Eth-trunk 0 remote 1.1.1.1
hrp auto-sync config static-route
undo hrp track track-member enable
hrp track interface GE1/0/1
hrp adjust ospf-cost enable add 100

int GE1/0/1
description To_SW-5700-02_GE0/0/1
ip address 10.11.127.2 29
vrrp vrid 1 virtual-ip 10.11.127.3 active
service-manage ping permit
undo shutdown

int GE1/0/2
description To_SWHX-02_GE0/0/1
ip address 10.11.129.1 30
ospf network-type p2p
service-manage ping permit
service-manage ssh permit
service-manage http permit
service-manage https permit
undo shutdown

int Lo0
ip address 100.27.10.2 32

ospf 10 router-id 100.27.10.2
area 0.0.0.0
network 10.11.129.0 0.0.0.3

route-static 0.0.0.0 0.0.0.0 10.11.127.6 description To_Internet

firewall zone trust
set priority 85
add interface GE1/0/2

firewall zone untrust
set priority 0
add interface GE1/0/1

security-policy
 rule name Permit_Any_to_Any
 source-zone trust untrust local
 destination-zone trust untrust local
 action permit

bfd 
bfd 1 bind peer-ip 10.11.127.4 source-ip 10.11.127.1 auto
commit