出口就一台防火墙宕机全网断?华为双机负载分担两台同转发坏一台不断网

很多公司的网络出口长这样:一条或者两条运营商线路,全接在一台防火墙上。平时没事,一旦这台设备宕机或者要停机升级,全公司上网、对外的业务系统一起断——单点故障明明白白摆在那里。想要"平时两台一起干活、坏一台另一台全扛",华为官方文档里有一套完整的双机热备负载分担组网:两台防火墙做出口网关,分别连两家运营商,内网按部门分流到不同ISP;设备之间拉心跳线跑HRP协议同步状态和会话,任何一台故障,流量自动切到另一台,业务不中断。本篇按官方CLI示例原样走一遍,两台设备的命令都给全。

组网需求(官方原文转述)

DeviceA和DeviceB的业务接口都工作在三层,上下行分别连接二层交换机。上行的两台交换机分别连接到不同的运营商,其中ISP1分配给企业的IP地址为1.1.1.1、1.1.1.2、1.1.1.3,ISP2分配给企业的IP地址为2.2.2.1、2.2.2.2、2.2.2.3。现在希望DeviceA和DeviceB以负载分担方式工作:部门A的用户(10.3.0.51~10.3.0.100)的流量去往ISP1,部门B(10.3.0.101~10.3.0.150)的流量去往ISP2。正常情况下,DeviceA和DeviceB共同转发流量;当其中一台设备出现故障时,另外一台设备转发全部业务,保证业务不中断。本例中interface1、interface2、interface3、interface7分别代表GE0/0/1、GE0/0/2、GE0/0/3、Eth-Trunk0。

地址与角色规划(按官方命令归纳)

项目 DeviceA DeviceB
GE0/0/1(连ISP1侧交换机) 1.1.1.1/24 1.1.1.2/24
GE0/0/2(连ISP2侧交换机) 2.2.2.1/24 2.2.2.2/24
GE0/0/3(连内网) 10.3.0.1/24 10.3.0.2/24
心跳口 Eth-Trunk0 10.10.0.1/24 10.10.0.2/24
VRRP备份组1(虚拟IP 1.1.1.3,上行ISP1) active standby
VRRP备份组2(虚拟IP 2.2.2.3,上行ISP2) standby active
VRRP备份组3(虚拟IP 10.3.0.3,内网部门A网关) active standby
VRRP备份组4(虚拟IP 10.3.0.4,内网部门B网关) standby active

角色交错的用意:A在ISP1方向和部门A网关是主、ISP2方向和部门B网关是备,B正好相反——两台设备各扛一半流量,这就是负载分担;任何一台故障,全部VRRP组角色由另一台接管。策略路由:部门A(10.3.0.51~10.3.0.100)下一跳1.1.1.254走ISP1,部门B(10.3.0.101~10.3.0.150)下一跳2.2.2.254走ISP2;NAT地址池1用1.1.1.3、地址池2用2.2.2.3。

第一步:接口IP、心跳口与安全区域(官方命令照抄)

两台设备各三个业务口配IP:

<HUAWEI> system-view
[HUAWEI] sysname DeviceA
[DeviceA] interface ge 0/0/1
[DeviceA-GE0/0/1] ip address 1.1.1.1 24
[DeviceA-GE0/0/1] quit
[DeviceA] interface ge 0/0/2
[DeviceA-GE0/0/2] ip address 2.2.2.1 24
[DeviceA-GE0/0/2] quit
[DeviceA] interface ge 0/0/3
[DeviceA-GE0/0/3] ip address 10.3.0.1 24
[DeviceA-GE0/0/3] quit
<HUAWEI> system-view
[HUAWEI] sysname DeviceB
[DeviceB] interface ge 0/0/1
[DeviceB-GE0/0/1] ip address 1.1.1.2 24
[DeviceB-GE0/0/1] quit
[DeviceB] interface ge 0/0/2
[DeviceB-GE0/0/2] ip address 2.2.2.2 24
[DeviceB-GE0/0/2] quit
[DeviceB] interface ge 0/0/3
[DeviceB-GE0/0/3] ip address 10.3.0.2 24
[DeviceB-GE0/0/3] quit

心跳口用Eth-Trunk捆绑两个万兆口。官方提醒:心跳接口需要发送业务相关的表项备份报文,心跳接口的流量大小与业务流量大小有关,心跳接口的带宽建议不低于峰值业务流量的20%:

[DeviceA] interface Eth-Trunk 0
[DeviceA-Eth-Trunk0] service-manage enable
[DeviceA-Eth-Trunk0] service-manage ping permit
[DeviceA-Eth-Trunk0] service-manage ssh permit
[DeviceA-Eth-Trunk0] ip address 10.10.0.1 24
[DeviceA-Eth-Trunk0] mode lacp-static
[DeviceA-Eth-Trunk0] lacp timeout fast
[DeviceA-Eth-Trunk0] trunkport 10GE 0/0/1
[DeviceA-Eth-Trunk0] trunkport 10GE 0/0/2
[DeviceA-Eth-Trunk0] load-balance round-robin
[DeviceA-Eth-Trunk0] quit
[DeviceB] interface Eth-Trunk 0
[DeviceB-Eth-Trunk0] service-manage enable
[DeviceB-Eth-Trunk0] service-manage ping permit
[DeviceB-Eth-Trunk0] service-manage ssh permit
[DeviceB-Eth-Trunk0] ip address 10.10.0.2 24
[DeviceB-Eth-Trunk0] mode lacp-static
[DeviceB-Eth-Trunk0] lacp timeout fast
[DeviceB-Eth-Trunk0] trunkport 10GE 0/0/1
[DeviceB-Eth-Trunk0] trunkport 10GE 0/0/2
[DeviceB-Eth-Trunk0] load-balance round-robin
[DeviceB-Eth-Trunk0] quit

接口入安全区域:ISP1、ISP2各建一个区域,心跳口放DMZ:

[DeviceA] firewall zone name isp1
[DeviceA-zone-isp1] set priority 10
[DeviceA-zone-isp1] add interface ge 0/0/1
[DeviceA-zone-isp1] quit
[DeviceA] firewall zone name isp2
[DeviceA-zone-isp2] set priority 15
[DeviceA-zone-isp2] add interface ge 0/0/2
[DeviceA-zone-isp2] quit
[DeviceA] firewall zone trust
[DeviceA-zone-trust] add interface ge 0/0/3
[DeviceA-zone-trust] quit
[DeviceA] firewall zone dmz
[DeviceA-zone-dmz] add interface Eth-Trunk0
[DeviceA-zone-dmz] quit
[DeviceB] firewall zone name isp1
[DeviceB-zone-isp1] set priority 10
[DeviceB-zone-isp1] add interface ge 0/0/1
[DeviceB-zone-isp1] quit
[DeviceB] firewall zone name isp2
[DeviceB-zone-isp2] set priority 15
[DeviceB-zone-isp2] add interface ge 0/0/2
[DeviceB-zone-isp2] quit
[DeviceB] firewall zone trust
[DeviceB-zone-trust] add interface ge 0/0/3
[DeviceB-zone-trust] quit
[DeviceB] firewall zone dmz
[DeviceB-zone-dmz] add interface Eth-Trunk0
[DeviceB-zone-dmz] quit

第二步:策略路由按部门分流(官方命令照抄)

两台设备配一样的规则——部门A推给ISP1网关,部门B推给ISP2网关:

[DeviceA] policy-based-route
[DeviceA-policy-pbr] rule name route_policy_isp1
[DeviceA-policy-pbr-rule-route_policy_isp1] source-zone trust
[DeviceA-policy-pbr-rule-route_policy_isp1] source-address range 10.3.0.51 10.3.0.100
[DeviceA-policy-pbr-rule-route_policy_isp1] action pbr next-hop 1.1.1.254
[DeviceA-policy-pbr-rule-route_policy_isp1] quit
[DeviceA-policy-pbr] rule name route_policy_isp2
[DeviceA-policy-pbr-rule-route_policy_isp2] source-zone trust
[DeviceA-policy-pbr-rule-route_policy_isp2] source-address range 10.3.0.101 10.3.0.150
[DeviceA-policy-pbr-rule-route_policy_isp2] action pbr next-hop 2.2.2.254
[DeviceA-policy-pbr-rule-route_policy_isp2] quit
[DeviceA-policy-pbr] quit
[DeviceB] policy-based-route
[DeviceB-policy-pbr] rule name route_policy_isp1
[DeviceB-policy-pbr-rule-route_policy_isp1] source-zone trust
[DeviceB-policy-pbr-rule-route_policy_isp1] source-address range 10.3.0.51 10.3.0.100
[DeviceB-policy-pbr-rule-route_policy_isp1] action pbr next-hop 1.1.1.254
[DeviceB-policy-pbr-rule-route_policy_isp1] quit
[DeviceB-policy-pbr] rule name route_policy_isp2
[DeviceB-policy-pbr-rule-route_policy_isp2] source-zone trust
[DeviceB-policy-pbr-rule-route_policy_isp2] source-address range 10.3.0.101 10.3.0.150
[DeviceB-policy-pbr-rule-route_policy_isp2] action pbr next-hop 2.2.2.254
[DeviceB-policy-pbr-rule-route_policy_isp2] quit
[DeviceB-policy-pbr] quit

第三步:双机热备的五项前置优化(官方命令照抄)

这几条官方都给了理由,建议原样保留:

心跳口直连情况下,建议不使能Checksum校验,以提升备份性能;心跳口非直连情况下不建议关闭,保持默认即可:

[DeviceA] undo hrp checksum enable
[DeviceB] undo hrp checksum enable

主备设备关闭非同网段ARP学习功能,可以避免从业务口学习到心跳口同网段的ARP影响心跳报文,同时也可以防止虚假源IP发送大量ARP请求攻击导致ARP表项耗尽:

[DeviceA] arp learning on-different-segment disable
[DeviceB] arp learning on-different-segment disable

一致性检查功能,官方建议保持默认1天检查1次:

[DeviceA] hrp auto-check enable
[DeviceA] hrp auto-check interval 1440
[DeviceA] hrp auto-check warning enable
[DeviceB] hrp auto-check enable
[DeviceB] hrp auto-check interval 1440
[DeviceB] hrp auto-check warning enable

HRP抢占时延官方建议配置为300秒,以保证抢占时数据备份完全;时延过小,在数据表项较多的情况下可能导致双机抢占后表项未备份完全、业务受损:

[DeviceA] hrp preempt delay 300
[DeviceB] hrp preempt delay 300

开启配置自动备份,保证修改配置能双机同步。官方口径:在上下行连接交换机的双机热备组网中,设备通常采用静态路由或策略路由,且主备设备的路由下一跳一致、出接口属于同一广播域,此时建议开启静态路由或策略路由的自动备份,保持主备设备路由一致,以免主备倒换后路由不一致导致业务不通;其他情况不建议开启路由备份,否则可能导致备机功能异常。同时开启备用设备的部分配置功能:

[DeviceA] hrp auto-sync
[DeviceA] hrp auto-sync config static-route
[DeviceA] hrp auto-sync config policy-based-route
[DeviceA] hrp auto-sync config dns-transparent-policy
[DeviceB] hrp auto-sync
[DeviceB] hrp auto-sync config static-route
[DeviceB] hrp auto-sync config policy-based-route
[DeviceB] hrp auto-sync config dns-transparent-policy
[DeviceA] hrp standby config enable
[DeviceB] hrp standby config enable

第四步:VRRP备份组定角色,再启用HRP(官方命令照抄)

四个VRRP备份组按规划表分角色,两台设备的active/standby交错:

[DeviceA] interface ge 0/0/1
[DeviceA-GE0/0/1] vrrp vrid 1 virtual-ip 1.1.1.3 active
[DeviceA-GE0/0/1] quit
[DeviceB] interface ge 0/0/1
[DeviceB-GE0/0/1] vrrp vrid 1 virtual-ip 1.1.1.3 standby
[DeviceB-GE0/0/1] quit
[DeviceA] interface ge 0/0/2
[DeviceA-GE0/0/2] vrrp vrid 2 virtual-ip 2.2.2.3 standby
[DeviceA-GE0/0/2] quit
[DeviceB] interface ge 0/0/2
[DeviceB-GE0/0/2] vrrp vrid 2 virtual-ip 2.2.2.3 active
[DeviceB-GE0/0/2] quit
[DeviceA] interface ge 0/0/3
[DeviceA-GE0/0/3] vrrp vrid 3 virtual-ip 10.3.0.3 active
[DeviceA-GE0/0/3] vrrp vrid 4 virtual-ip 10.3.0.4 standby
[DeviceA-GE0/0/3] quit
[DeviceB] interface ge 0/0/3
[DeviceB-GE0/0/3] vrrp vrid 3 virtual-ip 10.3.0.3 standby
[DeviceB-GE0/0/3] vrrp vrid 4 virtual-ip 10.3.0.4 active
[DeviceB-GE0/0/3] quit

负载分担组网下,DeviceA和DeviceB都转发流量,为了防止来回路径不一致,需要在两台设备上都配置会话快速备份功能:

[DeviceA] hrp mirror session enable
[DeviceB] hrp mirror session enable

指定心跳接口、配认证密钥、启用双机热备:

[DeviceA] hrp interface Eth-Trunk0 remote 10.10.0.2
[DeviceA] hrp timer hello 1000
[DeviceA] hrp escape enable
[DeviceA] hrp authentication-key YsHsjx_202206
[DeviceA] hrp enable
[DeviceB] hrp interface Eth-Trunk0 remote 10.10.0.1
[DeviceB] hrp timer hello 1000
[DeviceB] hrp escape enable
[DeviceB] hrp authentication-key YsHsjx_202206
[DeviceB] hrp enable

第五步:安全策略与NAT(官方命令照抄)

双机热备状态成功建立后,在DeviceA上配置的安全策略会自动备份到DeviceB上:

[DeviceA] security-policy
[DeviceA-policy-security] rule name policy_sec
[DeviceA-policy-security-rule-policy_sec] source-zone trust
[DeviceA-policy-security-rule-policy_sec] destination-zone isp1 isp2
[DeviceA-policy-security-rule-policy_sec] action permit
[DeviceA-policy-security-rule-policy_sec] quit
[DeviceA-policy-security] quit

NAT同理,双机热备建立后自动备份。先配地址池(地址池1用ISP1给的1.1.1.3,地址池2用ISP2给的2.2.2.3),再配NAT策略按去向选池:

HRP_M[DeviceA] nat address-group 1
HRP_M[DeviceA-address-group-1] section 0 1.1.1.3 1.1.1.3
HRP_M[DeviceA-address-group-1] quit
HRP_M[DeviceA] nat address-group 2
HRP_M[DeviceA-address-group-2] section 0 2.2.2.3 2.2.2.3
HRP_M[DeviceA-address-group-2] quit
HRP_M[DeviceA] nat-policy
HRP_M[DeviceA-policy-nat] rule name policy_nat_1
HRP_M[DeviceA-policy-nat-rule-policy_nat_1] source-zone trust
HRP_M[DeviceA-policy-nat-rule-policy_nat_1] destination-zone isp1
HRP_M[DeviceA-policy-nat-rule-policy_nat_1] action source-nat address-group 1
HRP_M[DeviceA-policy-nat-rule-policy_nat_1] quit
HRP_M[DeviceA-policy-nat] rule name policy_nat_2
HRP_M[DeviceA-policy-nat-rule-policy_nat_2] source-zone trust
HRP_M[DeviceA-policy-nat-rule-policy_nat_2] destination-zone isp2
HRP_M[DeviceA-policy-nat-rule-policy_nat_2] action source-nat address-group 2
HRP_M[DeviceA-policy-nat-rule-policy_nat_2] quit
HRP_M[DeviceA-policy-nat] quit

提示符变成 HRP_M[DeviceA],就是双机热备已经建立的标志。最后在内网设备上配缺省路由:部门A用户的下一跳设为VRRP备份组3的虚拟IP地址10.3.0.3,部门B用户的下一跳设为VRRP备份组4的虚拟IP地址10.3.0.4。

验证:看到Remote标记才算成(官方检查结果原文)

  • 在DeviceA和DeviceB上分别执行 display vrrp 命令,检查VRRP组内接口的状态信息。
  • 在DeviceA和DeviceB上分别执行 display hrp state verbose 命令,查看双机热备的状态。
  • 在trust区域的部门A PC端能够ping通ISP1区域的1.1.1.254,在trust区域的部门B PC端能够ping通ISP2区域的2.2.2.254,并分别在DeviceA和DeviceB上执行命令 display firewall session table 检查会话。如果在DeviceA和DeviceB上存在会话,在另一台设备上同时存在有Remote标记的会话,说明双机热备负载分担配置成功。
  • 当DeviceA或DeviceB出现故障时,流量能切换到另一台设备上转发到对应的ISP,保证业务不中断。

判读要点:会话表里的Remote标记是负载分担成立的硬证据——它表示这条会话是从对端备份过来的;两台设备互有本地会话和Remote会话,说明双向流量都在分担。演练时直接拔一台的心跳线或断电,看流量是否切到另一台,官方判据就是最后一条。

配完后DeviceA的配置脚本(官方原文,供逐行核对)

#
sysname DeviceA
#
hrp enable
hrp interface Eth-Trunk0 remote 10.10.0.2
hrp mirror session enable
hrp authentication-key %+%##!!!!!!!!!"!!!!"!!!!*!!!!J6+;U#>V\!_e1NY[iGLXjT%k=rKkg,Z)CI0!!!!!!!!!!!!!!!:!!!!Ec&0;Y9kF~"+*IM>Io(Sm{&9' 5y$6'L:2@-!!!!!%+%#
undo hrp checksum enable
hrp auto-check enable
hrp auto-check interval 1440
hrp auto-check warning enable
hrp preempt delay 300
hrp timer hello 1000
hrp escape enable
hrp auto-sync
hrp auto-sync config static-route
hrp auto-sync config policy-based-route
hrp auto-sync config dns-transparent-policy
hrp standby config enable
#
interface GE0/0/1
 ip address 1.1.1.1 255.255.255.0
 vrrp vrid 1 virtual-ip 1.1.1.3 active
#
interface GE0/0/2
 ip address 2.2.2.1 255.255.255.0
 vrrp vrid 2 virtual-ip 2.2.2.3 standby
#
interface GE0/0/3
 ip address 10.3.0.1 255.255.255.0
 vrrp vrid 3 virtual-ip 10.3.0.3 active
 vrrp vrid 4 virtual-ip 10.3.0.4 standby
#
interface Eth-Trunk0
 service-manage enable
 service-manage ping permit
 service-manage ssh permit
 ip address 10.10.0.1 255.255.255.0
 mode lacp-static
 lacp timeout fast
 trunkport 10GE 0/0/1
 trunkport 10GE 0/0/2
 load-balance round-robin
#
arp learning on-different-segment disable
#
firewall zone trust
 set priority 85
 add interface GE0/0/3
#
firewall zone dmz
 set priority 50
 add interface Eth-Trunk0
#
firewall zone isp1
 set priority 10
 add interface GE0/0/1
#
firewall zone isp2
 set priority 15
 add interface GE0/0/2
#
 nat address-group 1
  section 0 1.1.1.3 1.1.1.3
 nat address-group 2
  section 0 2.2.2.3 2.2.2.3
#
security-policy
 rule name policy_sec
  source-zone trust
  destination-zone isp1
  destination-zone isp2
  action permit
#
policy-based-route
 rule name route_policy_isp1
  source-zone trust
  source-address range 10.3.0.51 10.3.0.100
  action pbr next-hop 1.1.1.254
 rule name route_policy_isp2
  source-zone trust
  source-address range 10.3.0.101 10.3.0.150
  action pbr next-hop 2.2.2.254
#
nat-policy
 rule name policy_nat_1
  source-zone trust
  destination-zone isp1
  action source-nat address-group 1
 rule name policy_nat_2
  source-zone trust
  destination-zone isp2
  action source-nat address-group 2

DeviceB的配置脚本与上面对称,差异只有四处:接口IP换成1.1.1.2/2.2.2.2/10.3.0.2;hrp interface 的 remote 指向10.10.0.1;四个VRRP组的active/standby角色与DeviceA互换;心跳口IP为10.10.0.2。认证密钥在配置脚本里显示为密文串,这是cipher加密的正常呈现,核对时别拿明文去对。

注意事项(官方口径整理)

  • 心跳口带宽建议不低于峰值业务流量的20%——表项备份报文量跟业务流量正相关,心跳口堵了双机就是瞎子。
  • undo hrp checksum enable 只适用于心跳口直连场景;心跳口非直连保持默认,别跟着抄。
  • hrp preempt delay 300 别贪快调小:数据表项多的时候抢占太快,表项还没备份完就切主,业务反而受损。
  • 静态路由/策略路由的自动备份只在"上下行连接交换机、主备路由下一跳一致且出接口同广播域"的组网里建议开启,其他情况开启可能导致备机功能异常。
  • 安全策略和NAT策略只需要在主设备上配,双机热备建立后会自动备份到另一台——两边各配一遍反而容易出错。

双出口双机的改造牵一发而动全身,从运营商地址段到内网网关切换都要一盘棋考虑,有这类计划的贵州企业不妨先与诚鑫致达科技交换一下思路。各厂商设备的命令与默认参数存在差异,本文步骤与命令均出自华为官方文档,操作前请核对你的设备型号与软件版本。

源:华为官方文档 USG防火墙6000F-S/security_cfgcase_hotstandby_0008.md《CLI举例:双机作为出口网关,连接两个ISP的负载分担组网》