防火墙是网络的单点——它挂了,整个网络就断了。双机热备是标配。但很多人配完发现:设备切换成功了,用户却感觉断网了。这篇文章就讲这个「切换成功但业务断」的原因。
一句话概括:VRRP 决定「谁来转发」,HRP 决定「转发状态是否连续」。只有 VRRP 没有 HRP,切换瞬间所有已建立的连接全部作废。
为什么一个协议不够
普通的路由器/交换机做冗余,VRRP 就够了——因为它们是无状态转发,换个设备接着转就行。
防火墙不一样,它是有状态的:它记着几万条会话表。设备一切换,新设备上什么都没有:
切换前:FW1(主)上有 30000 条会话表
└─ 用户 A 的 TCP 连接:10.1.1.10:1025 ↔ 200.1.1.1:443 ESTABLISHED
FW1 故障 → VRRP 切换 → FW2 接管
FW2 上的会话表:空的
用户 A 的报文到达 FW2:
→ 查会话表,没有
→ 当成首包,重新匹配安全策略
→ 策略可能允许(那就重建会话,用户感觉卡一下)
→ 但 TCP 序列号/窗口对不上,多数情况直接 RST
用户看到的现象:网页「刷新失败」,正在下载的文件中断
所以必须有第二个协议,把 FW1 的状态实时搬到 FW2 上。这就是 HRP(Huawei Redundancy Protocol)。
两个协议的分工
| VRRP | HRP | |
|---|---|---|
| 解决什么 | 谁当主、对外用哪个虚拟 IP/MAC | 状态怎么同步 |
| 跑在哪 | 业务接口(对外提供虚拟网关地址) | 心跳接口(专用链路) |
| 决定什么 | 流量走哪台设备 | 哪台设备是「HRP 主」,由谁往谁同步 |
| 典型配置 | vrrp vrid 1 virtual-ip … | hrp enable / hrp interface … |
| 少了它会怎样 | 两台都转发或都不转发,流量乱 | 切换后业务中断 |
两种模式:主备 vs 负载分担
主备模式(Active / Standby)
- 一台 Active 承载全部流量,另一台 Standby 只同步状态、不转发;
- 切换时业务几乎无感(会话表已同步);
- 代价:带宽只用一半,另一台设备白养着。
负载分担模式(Active / Active)
- 两台都是 Active,各承载一部分流量;
- 实现方式是两组 VRRP:FW1 在 VRID 1 当主、在 VRID 2 当备;FW2 反过来;
- 铁律:同一条会话必须走同一台设备。否则两个方向分别落在两台设备上,状态对不上,TCP 直接乱;
- 代价:配置复杂,链路规划要保证「同一个流始终命中同一台」。
负载分担听起来更好,但实际项目里主备用得更多。原因是:出口带宽通常不是瓶颈(瓶颈在运营商),而负载分担带来的路径一致性问题和排错难度是实打实的。
HRP 备份哪些内容
| 类别 | 具体内容 | 不同步会怎样 |
|---|---|---|
| 会话表 | 所有已建立的连接 | 切换后连接全断(最严重) |
| server-map | ASPF 动态生成的放行表项 | 切换后 FTP/SIP 等数据连接建不起来 |
| 动态 NAT 表项 | 地址端口的转换映射 | 切换后 NAT 失效,内网访问外网断 |
| 配置与状态 | 策略、NAT、路由、主备状态 | 两台配置不一致,切换后行为不一致 |
配置同步用 hrp auto-sync config 打开后,在主的上面改策略会自动同步到备——很方便,但也意味着改错了一起错。生产环境建议改配置前先确认同步状态。
心跳链路:别把它当儿戏
- 走独立物理链路:两台设备之间直连一根线,或者走独立 VLAN。不要跟业务流量共用链路;
- 心跳断了会怎样:两台都以为对方挂了,可能同时变成 Active(双主),造成地址冲突和流量黑洞;
- 建议:心跳链路本身也做冗余(两条),并在心跳接口上做
hrp track。
hrp track:最容易漏的一步
这是导致「切换成功但业务不通」的第二个常见原因。
拓扑: [运营商A]——FW1(主)——内网
|
心跳线
|
[运营商B]——FW2(备)——内网
故障:FW1 的上行口(连运营商 A)断了,但 FW1 自己没死
如果没有 hrp track:
FW1 依然是 VRRP 主 → 内网流量继续送给 FW1
FW1 发现上行口 down → 没有默认路由可用 → 丢包
FW2 在备着,什么都不做
→ 内网完全断网,但两台设备看起来都"正常"
配上 hrp track 之后:
hrp track interface GigabitEthernet1/0/0 # 监控上行口
上行口 down → 主动降低优先级 → VRRP 切换 → FW2 接管
→ 业务自动恢复
华为 USG 配置
# ── FW1(主)──────────────────────────────
# ① 心跳接口
interface GigabitEthernet1/0/3
ip address 10.0.0.1 30
hrp interface GigabitEthernet1/0/3 remote 10.0.0.2
# ② 开启 HRP
hrp enable
hrp auto-sync config # 配置自动同步到对端
hrp track interface GigabitEthernet1/0/0 # ★ 监控上行口
# ③ 业务接口跑 VRRP
interface GigabitEthernet1/0/1
ip address 10.1.1.2 24
vrrp vrid 1 virtual-ip 10.1.1.1 active # 本机是主
vrrp vrid 1 priority 120 # 主设备优先级高
# ④ 状态同步要覆盖的内容(默认已包含,确认一下)
hrp sync session all # 同步所有会话表
hrp sync server-map # 同步 server-map
hrp sync nat # 同步动态 NAT
# ── FW2(备)──────────────────────────────
# 配置基本一致,差别只在:
# vrrp vrid 1 virtual-ip 10.1.1.1 standby
# vrrp vrid 1 priority 100 # 备设备优先级低
# hrp interface GigabitEthernet1/0/3 remote 10.0.0.1
# ★ 负载分担模式:两台设备各起两组 VRRP,互相交叉主备
# FW1: vrid 1 active / vrid 2 standby
# FW2: vrid 1 standby / vrid 2 active
# 内网一半走 vrid 1 的网关,一半走 vrid 2 的网关
验证与排错
display hrp state # ★ HRP 运行状态(主/备/心跳)
display hrp state verbose # 详细信息:同步了哪些、心跳延迟
display hrp configuration # HRP 相关配置
display hrp interface # 心跳接口状态
display vrrp # VRRP 主备状态
display vrrp verbose # 含优先级、虚拟 IP、切换计数
display firewall session table # 对比两台的会话数是否接近
display hrp statistics # 同步报文统计(丢包说明心跳有问题)
排错顺序:
- 两台都是主 / 都是备 → 心跳不通。先 ping 心跳地址,再看
display hrp state里心跳是否 Up。心跳断了会双主,务必优先解决; - 切换后业务断 → 对比两台的
display firewall session table条数。差异巨大 = HRP 没同步会话表; - 上行断网但设备没切 → 没配
hrp track。这是最高频的坑; - 切换后 FTP/视频会议断 → server-map 没同步;
- 改配置后两台不一致 →
hrp auto-sync config没开,或者当时心跳是断的(同步失败)。
一句话总结:VRRP 管「谁来转发」,HRP 管「状态连不连续」,
hrp track管「上行断了要主动让位」。三件事缺一件,双机热备就是摆设。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
合并了原始笔记中「双机热备 / 高可用」两页。
原笔记以组网截图为主,本文把「切换瞬间发生了什么」用序列化的方式重写了一遍,并补上 hrp track、双主、负载分担路径一致性这几个实际项目才会暴露的坑。
配置命令保留华为 VRP 原样。