文章目录
- 前言
- 双机热备技术产生的背景
- HRP基本概念
- 实验拓扑
- 基于VRRP的路由器冗余部署方案
- 为什么要用VRRP
- VGMP基本原理
- web端配置HRP
- 心跳线
- [eth-Trunk (链路聚合)](#eth-Trunk (链路聚合))
前言
HRP(Huawei Redundancy Protocol)

假设有两台防火墙FW1跟FW2,内部的数据出去时,假设从FFW1出去,但是数据回包时,从FW2回来。现在所有的网络设备都是正常工作的情况下,内部是否能够正常访问业务?
业务访问不正常,因为session table不同步。
当流量从防火墙FW1出去时,会在FW1上形成对应的会话(session table),但是如果流量从FW2回来时,由于FW1跟FW2的会话表不同步,会使得FW2上缺少会话,回包的流量也就不会从FW2上放行了。
解决方案
正常时,流量来回都走同一个防火墙,当这个防火墙彻底出现故障时,让流量来回走第二个防火墙。
但是还有问题
万一流量出去时,防火墙FW1是好的,走的FW1,但是流量回来时,FW1坏了,那次是流量也走不了FW2。








负载分担模式并不总是比主备备份模式好,两者是适应不同场景的解决方案,没有绝对的优劣。
如果采用负载分担模式的话,不同的业务走不通的防火墙出去。 如果要分析一个数据包的访问路径到底是怎么规划的,这要分析路径花费的时间比主备备份要多。
主备备份摸清楚一条路径的走向就足够了;而负载分担时得把不通流量经过不通防火墙的路径都逐台摸清楚,在进行一些故障排查时,分析流量走向,花费的时间更多。
在很多场景下,采用负载分担方案时,如果万一有一台设备出现故障,别的设备可能会突增压力。

这种模式通常不是让同一个用户的同一次访问的流量拆成两半走不同设备(那会导致会话错乱),而是让不同的用户、或同一用户的不同连接,分别走不同的设备。





双机热备技术产生的背景

HRP基本概念




"主备备份模式"是一个通用的工作模式/架构,而"VRRP+VGMP"是华为防火墙实现这种模式的一套具体技术方案。
拆解 VRRP 和 VGMP 各自的作用
在华为方案里,这两个协议分工合作,共同完美实现了主备备份:
-
VRRP(虚拟路由冗余协议):这是一个通用标准协议,很多厂商都支持。
-
它主要解决"IP地址"的冗余问题。
-
两台防火墙的接口加入同一个VRRP组,共享一个虚拟IP地址。这个VIP就是内网PC的默认网关。
-
VRRP通过选举决定Master设备 (拥有VIP并响应ARP请求)和Backup设备。
-
但,标准VRRP只管理单个接口或单个链路的状态。对于一台拥有多个接口(内网口、外网口、DMZ口)的防火墙来说,如果各个接口的VRRP组独立运行,就可能出现"脑裂"------比如内网口是设备A为主,外网口却是设备B为主,导致流量不通。
-
-
VGMP(华为专有协议):它就是为了解决上述"脑裂"问题,并实现整机状态的统一管理。
-
VGMP将设备上所有接口的VRRP组捆绑成一个"统一管理组"。
-
它负责监控整机的健康状态(如设备故障、链路故障、CPU过载等)。
-
一旦主机出现任何问题,VGMP会统一地、同时地将自己管理的所有VRRP组状态从Master降为Backup,而备机则同时将所有VRRP组状态提升为Master。
-
这样就保证了"整机切换",所有流量路径都统一从一台设备切换到另一台,杜绝了脑裂。
-
实验拓扑

FW1跟FW2配置G0/0/0口的管理地址
bash
# FW1
[USG6000V1-GigabitEthernet0/0/0]ip address 192.168.9.100 24
# FW2
[USG6000V1-GigabitEthernet0/0/0]ip address 192.168.9.101 24
两个防火墙的管理口都配置 这样才能web端登录防火墙
[USG6000V1-GigabitEthernet0/0/0]service-manage all permit
基于VRRP的路由器冗余部署方案

VRRP的方案什么时候采用?
当防火墙下游或下游链路接的是二层设备时,可以采用该方案( VRRP + VGMP )。
原因:
当下游接三层设备时,通常不需要或不推荐使用VRRP,因为路由协议(如OSPF、BGP)是实现高可用的更好选择。
- 二层设备(交换机):只认MAC地址 → 需要一个永不消失的网关IP → 需要VRRP创造虚拟网关
- 三层设备(路由器/三层交换机):懂路由协议 → 能智能选路 → 用OSPF/BGP实现高可用更优

现在这个拓扑的两台防火墙的上游跟下游接的是二层交换机,交换机上只起连接作用。
为什么要用VRRP


防火墙配置接口IP
FW1上的配置

FW1的G1/0/1连接的是上游区域,G1/0/0连接的是下游区域。
FW2上的配置
问题:FW2上的GE1/0/0口可不可以也是1.0网段,比如是否可以给这个接口配置1.253
这是可以的,因为中间是一台普通的交换机,不进行IP地址的配置,说明在转发数据时,不会去参考路由表进行转发。那么两边配置同网段的没什么影响。
对于中间的交换机而言,PC1要找FW1还是FW2,是根据MAC地址表做转发的,根本没有涉及到IP地址。
什么时候是不能把FW1的G1/0/0跟FW2的G1/0/0的接口的IP地址配置在同网段呢?
就是FW1跟FW2下游接的不是二层设备,比如下游接的是工作的网络层的路由器。
因为路由器的接口隔离广播域,路由器每个接口只能工作在一个网段,并且两边的网段是不能冲突的---否则路由表都不知道怎么转发了。
现在中间是交换机,二层交换机的转发不参考IP地址进行工作,所以可以把FW2的G1/0/0口配置成同网段的任何一个不冲突的IP就可以。同理可以把FW2的G1/0/1口配置在2.0网段的任何一个不冲突的IP即可。
FW2配置

现在在两个防火墙上粗略写一下安全策略
bash
[USG6000V1]security-policy
[USG6000V1-policy-security]rule name test
[USG6000V1-policy-security-rule-test]source-zone trust
[USG6000V1-policy-security-rule-test]destination-zone untrust
[USG6000V1-policy-security-rule-test]action permit
此时此刻,两个防火墙上,安全区域,安全策略,ip地址都配置好了。

现在的组网是跨网段的
在PC1跟PC2上指定网关,都让FW1作为网关。


现在两台主机的网络连通性没有问题

现在如果把FW1的GE1/0/0口shutdown掉,PC1跟PC2就不通了。
现在如果要恢复通信,只能将PC1跟PC2的网关都改成对应的FW2上的接口IP地址。
VRRP其实就干了一件事,帮助用户虚拟出一个IP地址出来。
在路由器上VRRP的配置

主机去Ping 192.168.1.252是能通的

这个192.168.1.252是没有配置在路由器下的任何一个接口上的,但是仍然可以对外提供服务。
vrid 是小组编号,小组编号一样的设备才能共同干活。
vrrp vrid 1 priority 120 如果没有配置优先级的话,默认优先级是100
谁优先级大谁先使用这个虚拟IP,正常时候只让一台设备去使用这个虚拟IP,防止IP地址冲突。


如果左边设备坏了


现在用户侧都不需要改变什么,依然能Ping通网关



现在可以同时对上游跟下游链路都做VRRP
FW1上配置 - 下游接口
bash
[USG6000V1]interface GigabitEthernet 1/0/0
[USG6000V1-GigabitEthernet1/0/0]vrrp vrid 1 virtual-ip 192.168.1.252 ?
INTEGER<1-32> Length of IP address mask
X.X.X.X IP address mask
active Set as active virtual router
standby Set as standby virtual router
[USG6000V1-GigabitEthernet1/0/0]vrrp vrid 1 virtual-ip 192.168.1.252 active

没有设置优先级的地方
FW2上配置 - 下游接口
bash
[USG6000V1]interface GigabitEthernet 1/0/0
[USG6000V1-GigabitEthernet1/0/0]vrrp vrid 1 virtual-ip 192.167.1.252 ?
INTEGER<1-32> Length of IP address mask
X.X.X.X IP address mask
active Set as active virtual router
standby Set as standby virtual router
[USG6000V1-GigabitEthernet1/0/0]vrrp vrid 1 virtual-ip 192.168.1.252 standby
FW1上配置 - 上游接口
bash
[USG6000V1]interface GigabitEthernet 1/0/1
[USG6000V1-GigabitEthernet1/0/1]vrrp vrid 2 virtual-ip 192.168.2.252 active
FW2上配置 - 上游接口
bash
[USG6000V1]interface GigabitEthernet 1/0/1
[USG6000V1-GigabitEthernet1/0/1]vrrp vrid 2 virtual-ip 192.168.2.252 standby
防火墙的VRRP和路由器的VRRP略微不同之处
防火墙的VRRP的虚拟IP后面需要加上active/standby,其次防火墙的VRRP不能配置优先级。

1、没有办法保证多个组的状态是一致的,如果防火墙A的上下游都是主状态,流量的来回路径就一致,会话表就正常,数据包转发就正常。
传统VRRP在防火墙应用中一个致命缺陷:多VRRP组状态不一致导致路径不对称和状态检测失败。
VGMP基本原理

对于主墙来说,一旦有任何一个VRRP的状态变成了BACKUP,那立刻把所有VRRP中MASTER的状态都切换成BACKUP状态,这样就不会出现会话表不同步的问题了。
对于路由器而言,因为没有防火墙这种会话检测机制,路由器其实对于数据包基本不做安全的检查,只要没有错包,乱包都能正常转发,所以来回路径不一致对于路由器而言根本不是问题,但是对于防火墙而言就是个大问题。
防火墙为了避免你漏做,少做一些追踪机制,所以天生自带VGMP协议去管理VRRP。

对于防火墙而言,VRRP的包是不处理的,防火墙只以VGMP的主备状态去选择VRRP状态
VGMP的主备状态报文是从HRP的心跳线去发
现在上述实验并还没有配置两台防火墙的的双击热备,此时HRP还并没有正常工作,说明还不存在HRP的心跳线,那么就发不了VRRP的心跳包,那就就会导致VRRP主备异常。
如果是通过web界面做VRRP的双机热备方案时,要求强制性的必须先做HRP,才能够往后做VRRP+VGMP的配置。
所以要先在防火墙上配置HRP,它的VRRP才能正常工作
web端配置HRP
先把之前配置的vrrp删掉



双机热备是跟防火墙系统层面有关的内容。

FW1跟FW2都要做配置
当前并还没有做双机热备,还处于单机状态
点击【配置】

【心跳接口】的作用
让FW1和FW2通过这个接口的连接线,同步包括但不限于安全策略,会话表,NAT的配;以及VGMP报文的协商



现在登录命令行界面查看,发现前面以及改变了


现在这个地方配置的是HRP的主与备
VGMP、VRRP、HRP三者之间的关系
HRP的主设备负责给备设备同步内容,备设备负责学习主设备同步过来的信息。
VGMP是大脑,VRRP是四肢,HRP是神经和血液系统。
1. HRP(Huawei Redundancy Protocol) - 神经和血液系统
-
作用:负责同步数据
-
同步什么:
- 配置信息:你在主设备上做的配置(策略、对象、NAT等)
- 状态信息:会话表、Server-map表、黑名单、路由表等
- 动态信息:DHCP地址租约、用户在线信息等
-
工作方式:
- 主设备(Active):主动推送变化给备设备
- 备设备(Standby):被动接收并学习主设备发来的信息
-
特点:
- 单向同步(主→备)
- 实时或定时同步,确保备设备随时准备好接管
2. VGMP(VRRP Group Management Protocol) - 大脑
-
作用:负责决定谁当老大
-
功能:
-
管理整台防火墙(不是单个接口)
-
决定整台设备是Active(主) 还是Standby(备)
-
监控设备的整体健康状态(CPU、内存、链路等)
-
-
工作方式:
-
通过心跳线发送VGMP Hello报文
-
如果收不到对端的心跳,就认为对方故障,自己升级
-
-
关键特性:
-
整机切换:要么全部接口都是Master,要么都是Backup
-
防止脑裂:确保只有一个Active设备
-
VRRP(Virtual Router Redundancy Protocol) - 四肢
-
作用:负责对外提供虚拟IP
-
功能:
-
在每个接口上创建虚拟网关IP
-
响应终端的ARP请求
-
提供具体的转发路径
-
-
工作方式:
-
独立选举接口的Master/Backup状态
-
但受VGMP控制(VGMP让它当Master它才能当)
-
三者的协同工作流程
场景:防火墙A和B组成双机热备
步骤1:启动协商(谁当老大?)
bash
防火墙A ───[VGMP心跳]──→ 防火墙B
"我还活着,优先级100"
防火墙B ───[VGMP心跳]──→ 防火墙A
"我也活着,优先级90"
结果:A优先级高 → A成为VGMP Active,B成为VGMP Standby
步骤2:控制VRRP状态(统一指挥)
bash
VGMP A(大脑)下令:所有VRRP组都当Master!
VGMP B(大脑)下令:所有VRRP组都当Backup!
结果:
防火墙A:内网口VRRP=Master,外网口VRRP=Master
防火墙B:内网口VRRP=Backup,外网口VRRP=Backup
步骤3:同步数据(保持信息一致)
bash
防火墙A(主)─HRP通道─→ 防火墙B(备)
同步:
1. 安全策略配置 ✓
2. NAT配置 ✓
3. 当前会话表(小明访问百度的连接) ✓
4. 路由表 ✓
...
步骤4:故障切换
bash
假设防火墙A电源故障:
1. 防火墙B收不到A的VGMP心跳(大脑发现对方宕机)
2. VGMP B:我要升级为Active!
3. VGMP B下令:所有VRRP组变成Master!
4. 防火墙B的VRRP开始响应虚拟IP的ARP请求
5. 流量切换到防火墙B
6. 因为HRP已经同步了会话表,B能继续处理小明的连接
关键区别对比表



现在在备用防火墙上是进不了安全策略,也进不了NAT策略。

做完了双机热备之后,剩下的很多关于防火墙的操作只用在主墙上去做就可以了。
现在进入FW1(主防火墙)

这会出现(+B),这代表这里的操作会同步给备份设备一份。
现在在主设备上做的安全策略的操作都会同步到备设备上。
现在即使没有做VRRP,HRP也可以正常工作,因为在HRP里面本来就具备选择主备能力。
HRP是为了选择防火墙谁是主,谁是备,由主设备给备设备同步配置,但是光有HRP,流量不一定会去找主墙,如果现在PC写了一个网关1.253,还是会去找备墙的。
肯定是希望所有的配置,所有的会话的内容都由主墙生成--怎么样让主墙生成呢?配置好说,都在主墙上配置就行了,但是会话表怎么办?--- 怎么样让流量过主墙(VRRP刚好实现这个效果)
VRRP可以让FW1作为VRRP的主,让FW2作为VRRP的备,用户出去的流量都去找VRRP的主出去,会话会生成在主设备,主设备再通过HRP把会话,把配置同步到备墙上。
HRP负责让主跟备同步,VRRP负责将流量引到主墙。
现在再HRP通了的基础上,部署VRRP



FW2也这样配置
现在看FW1跟FW2上的命令行上已经发生改变了


不是A先成了HRP主,然后"顺便"成了VGMP主。而是A成为了"主设备",然后HRP和VGMP协议各自从这个统一状态中获取自己需要的信息。
这个地方我出现了一个问题,就是FW2在配置HRP的时候,【运行角色】跟FW1一样选择的都是【主用】

改成【备用】即可


现在FW1跟FW2的VRRP一个是active,一个是standby。
现在继续做防火墙连接上游的vrrp组



命令行配置总结

以下几个查看命令需要掌握
bash
# 查看HRP当前状态
HRP_M[USG6000V1]display hrp state # 查看本设备和邻居设备的HRP状态

bash
HRP_M[USG6000V1]display vrrp
显示结果
bash
HRP_M[USG6000V1]display vrrp
2025-12-10 08:29:54.110
GigabitEthernet1/0/0 | Virtual Router 1
State : Master
Virtual IP : 192.168.1.252
Master IP : 192.168.1.254
PriorityRun : 120
PriorityConfig : 100
MasterPriority : 0
Preempt : YES Delay Time : 0 s
TimerRun : 60 s
TimerConfig : 60 s
Auth type : NONE
Virtual MAC : 0000-5e00-0101
Check TTL : YES
Config type : vgmp-vrrp
Backup-forward : disabled
Create time : 2025-12-10 07:51:28
Last change time : 2025-12-10 07:51:28
GigabitEthernet1/0/1 | Virtual Router 2
State : Master
Virtual IP : 192.168.2.252
Master IP : 192.168.2.254
PriorityRun : 120
PriorityConfig : 100
MasterPriority : 120
Preempt : YES Delay Time : 0 s
TimerRun : 60 s
TimerConfig : 60 s
Auth type : NONE
Virtual MAC : 0000-5e00-0102
Check TTL : YES
Config type : vgmp-vrrp
Backup-forward : disabled
Create time : 2025-12-10 08:13:57
Last change time : 2025-12-10 08:13:57
HRP正常了,VGMP才正常,VGMP正常了,VRRP才正常
1. HRP正常 → VGMP才正常
逻辑链 :HRP提供同步通道 → VGMP通过这个通道检测对端状态 → VGMP才能决定整机状态
具体过程:
bash
# HRP正常时:
防火墙A --[HRP心跳]--> 防火墙B
防火墙B --[HRP心跳]--> 防火墙A
# VGMP检测:收到心跳,对端活着
VGMP A:我能收到B的心跳,B是活的
VGMP B:我能收到A的心跳,A是活的
# VGMP正常运作:可以选举主备
如果HRP不正常(心跳链路断了):
bash
防火墙A --[无心跳]--> 防火墙B
防火墙B --[无心跳]--> 防火墙A
# VGMP无法检测对端状态
VGMP A:收不到心跳!B死了吗?我要当主!
VGMP B:收不到心跳!A死了吗?我要当主!
# 结果:脑裂!两台都变成主,网络混乱
所以:VGMP的正常选举依赖HRP提供的可靠心跳通信。
2. VGMP正常 → VRRP才正常
逻辑链 :VGMP决定整机状态 → VGMP控制各接口VRRP组 → VRRP执行接口级主备
具体过程:
bash
# VGMP选举完成
防火墙A:我是VGMP主(Active)
防火墙B:我是VGMP备(Standby)
# VGMP控制VRRP组
VGMP A:所有VRRP组,你们都给我当Master!
VRRP A:好的,我宣告虚拟IP,响应ARP
VGMP B:所有VRRP组,你们都给我当Backup!
VRRP B:好的,我沉默,不响应ARP
# 结果:只有A的VRRP工作,B的VRRP待命
如果VGMP不正常(比如状态不明确):
bash
# VGMP混乱了
防火墙A:我好像是主?不确定...
防火墙B:我好像也是主?不确定...
# VGMP无法给VRRP明确指令
VRRP A:我该当Master还是Backup?
VRRP B:我该当Master还是Backup?
# 结果:VRRP可能都变成Master,IP冲突;或都变成Backup,没有服务
所以 :VRRP的状态完全依赖VGMP的明确指令。

如果把FW1的G1/0/1口shutdown,会出现很多告警

现在FW1的角色由主变成备了

当一个vrrp组状态不正常时,会把其他组同步变成备份组。
现在在FW1上查看hrp状态
bash
HRP_S[USG6000V1-GigabitEthernet1/0/1]dis hrp state
2025-12-10 09:00:58.450
Role: standby, peer: active (should be "active-standby")
Running priority: 44998, peer: 45000
Backup channel usage: 0.00%
Stable time: 0 days, 0 hours, 6 minutes
Last state change information: 2025-12-10 8:54:05 HRP core state changed, old_s
tate = normal, new_state = abnormal(standby), local_priority = 44998, peer_prior
ity = 45000.
在HRP场景下,每挂掉一个接口,优先级减少2
而优先级不相同时,谁高谁是主人,谁低谁是slave
同时VRRP状态也会跟着VGMP状态改变

现在FW2上可以配置安全策略跟nat策略了

心跳线


心跳线的链路是非常重要的。

在实验模拟的过程中,将这个千兆链路指定为心跳线,没什么问题,能同步信息。但是这些链路也可能会跑其他的业务流量。如果这条链路的带宽已经占满的话,心跳报文可能会丢包。可能会让其他防火墙产生误判--老大挂了。可能自己会抢占防火墙的主地位,可是主防火墙并没有挂,那么网络中就会出现双主的情况。
出现了双主之后,两台防火墙都会同步,会认为自己是VGMP的主,同步就会认为自己是VRRP的主,如果有人去找VRRP的虚拟地址的话,每个人都认为自己是vrrp的虚拟网关地址,那么就产生了IP地址冲突。
从组网层面来说,心跳线要单独起线缆。
基本不会用业务口去发射心跳包

现在在两台防火墙之间拉一条心跳线

这个心跳线只发送HRP报文。
切换HRP报文的发送接口
原先FW1上的hrp的配置
bash
#
hrp enable
hrp interface GigabitEthernet1/0/0 remote 192.168.1.253
#
新的FW1上的hrp的配置
bash
HRP_M[USG6000V1-GigabitEthernet1/0/2]ip address 10.1.1.1 24
FW2上的hrp的配置
bash
HRP_S[USG6000V1-GigabitEthernet1/0/2]ip address 10.1.1.2 24
任何一个防火墙的接口想要正常工作,一定是要加入到安全区域当中 (实际中心跳接口一般会单独放在一个区域中)-- 可以划分在DMZ区域,不受其他的影响


FW1跟FW2的命令行配置已经改变了


此时在心跳线上抓包,可以抓到HRP的报文(基于UDP)

一个项目中的心跳线是重中之重,现在单独拉了一根线出来,不跑别的流量,但是如果这根线也出现问题呢?
eth-Trunk (链路聚合)

需要线清楚1/0/2口上的配置,FW1跟FW2上都要清除

bash
HRP_M[USG6000V1]interface Eth-Trunk 1
HRP_M[USG6000V1-Eth-Trunk1]trunk
HRP_M[USG6000V1-Eth-Trunk1]trunkport
Dec 11 2025 03:56:34 USG6000V1 DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25
.191.3.1 configurations have been changed. The current change number is 15, the
change loop count is 0, and the maximum number of records is 4095.
HRP_M[USG6000V1-Eth-Trunk1]trunkport G
HRP_M[USG6000V1-Eth-Trunk1]trunkport GigabitEthernet 1/0/2 to 1/0/3
Error: Can not add HRP backup tunnel to Eth-Trunk.
The error port is GigabitEthernet1/0/2.
HRP_M[USG6000V1-Eth-Trunk1]
需要再删掉HRP的配置
bash
HRP_M[USG6000V1]undo hrp interface GigabitEthernet1/0/2
Info: All HRP interfaces have been removed.
HRP_M[USG6000V1]undo hrp interface GigabitEthernet1/0/2
Info: All HRP interfaces have been removed.
FW1跟FW2上g1/0/2的配置都要删掉


可以把这些接口都划入DMZ区域





现在基于这个合二为一的链路聚合口部署HRP。


现在防火墙又变成了一个Master,一个Slave


Eth-Trunk只要有一个接口处于up状态,我的整个聚合链路Eth-Trunk就是up的。
除非所有物理接口都Down了
心跳口的状态

bash
HRP_S[USG6000V1]display hrp interface
2025-12-11 08:00:20.770
Eth-Trunk1 : running

