
前阵子给一个客户做出口网络改造机房里两台H3C SecPath防火墙已经跑了三四年单台扛着全部业务流量厂商巡检报告里明确写着“设备老化存在单点故障风险”。客户预算有限不想额外采购新设备但希望把这两台机器利用起来做成高可用冗余。我给出的方案就是H3C防火墙IRF堆叠配置。IRF这个东西很多刚接触H3C设备的工程师容易把它当成普通的“主备切换”其实理解浅了。IRF全称Intelligent Resilient Framework智能弹性架构核心思想是把两台甚至多台物理设备虚拟成一台逻辑设备来管理和运行。对防火墙这种需要承载会话、状态同步的设备来说IRF不只是解决“设备坏了怎么办”更重要的是解决“这么多配置、这么多会话、这么多链路怎么在两台设备之间无缝交接”的问题。这篇东西我尽量少讲虚的把我实际配置过程、翻车经历、验证细节都写出来给准备上手IRF的同行一个参考。1. IRF堆叠不是玄学先说清楚这台逻辑防火墙是怎么工作的1.1 从“两台设备”到“一台逻辑设备”初次接触IRF的人脑子里往往有一个疑问两台设备堆叠在一起到底是“一台干活、一台睡觉”还是“两台同时干活”答案是都不是简单的一种状态。IRF建立之后两台设备对外表现是一台设备有统一的IP管理地址、统一的配置界面、统一的会话表。但内部两台成员设备是有角色的一台是Master主设备负责整个IRF系统的管理、控制平面处理比如路由协议邻居、ARP学习、配置下发都是Master主导另一台是Slave备设备它的数据平面是活的可以转发流量但控制平面和Master保持同步随时准备在Master故障时接管。这个机制带来的直接好处有两个。一是管理成本低以前两台防火墙各自配一遍策略、地址簿、NAT规则以后只需要在这台逻辑设备上操作一次配置自动同步到所有成员。二是业务可靠性高Master宕机或堆叠链路中断后Slave能快速接替业务侧看到的网关IP不变不需要改动任何终端的配置。1.2 必须搞懂的关键角色成员编号、优先级与IRF端口搞IRF有几个概念绕不过去不理解它们后面命令敲起来就会晕。第一个是成员编号Member ID。每台物理设备在IRF系统里都有一个唯一编号配置里所有接口都带着这个编号前缀。比如设备1的接口叫GigabitEthernet1/0/0设备2的接口叫GigabitEthernet2/0/0这里的1和2就是成员编号。注意一台设备如果从IRF里退出、恢复成独立设备它的接口编号依然带着成员号这个问题后面配置时我会再强调。第二个是优先级Priority。它决定设备在IRF中的角色在设备启动或加入IRF时优先级高的设备会被选举为Master。优先级范围通常是1到32默认是1数值越大越优先。想让哪台做主设备就把它的优先级调高。第三个是IRF端口IRF-Port。IRF物理端口不是简单的“把两台设备的网线连在一起就行”而是需要把物理接口绑定到逻辑的IRF端口上。在H3C设备上每个成员设备有两个IRF端口分别是IRF-Port1和IRF-Port2。组堆叠时有一个非常重要的口诀成员1的IRF-Port1对成员2的IRF-Port2成员2的IRF-Port1对成员1的IRF-Port2必须交叉连接。很多新手第一次组堆叠失败就是在这里栽了跟头。1.3 这套方案适合什么场景不适合什么场景从实际项目经验看防火墙IRF最适合两类场景。一类是出口或核心边界业务流量大、对链路冗余要求高需要把两台防火墙做成一台逻辑设备来简化路由和NAT设计另一类是分支机构或数据中心内部区域边界设备数量不多希望减少管理节点、降低策略维护成本。但不是所有场景都适合上IRF。比如两台设备型号不一样、软件版本差距过大就不建议强行堆叠IRF要求成员设备型号和版本必须一致否则会出现版本不兼容、业务异常这类说不清道不明的故障。再比如设备地理位置相距很远、中间依赖运营商链路互联这种场景也不适合IRF因为IRF的堆叠链路对时延和稳定性要求很高。一句话总结堆叠链路必须是设备之间的直连物理链路中间不能有任何交换设备介入。2. 动手前一定要做好的规划选口、定角色、设计检测链路2.1 堆叠物理链路选择不是随便插根网线就行H3C防火墙的堆叠物理口一般建议使用SFP万兆光口或专用堆叠口使用光纤或堆叠线缆直连。我在实际项目中通常推荐用两根链路做堆叠一根做主链路一根做备份链路避免单根光纤被误拔或者光模块故障导致整个IRF分裂。这里有个容易忽视的细节堆叠口一旦绑定到IRF端口后它就不再转发普通业务流量也不能在上面配置IP地址、加入安全域。所以选择堆叠口时要优先挑那些“业务上暂时用不到”或者“接口带宽较高、对后续扩容影响小”的端口。我见过一个案例对方把设备上仅有的两个万兆口全部配成了堆叠口结果后续想上联核心交换机时才发现万兆口不够用只能重新调整堆叠拓扑白白增加了一次割接风险。另外堆叠物理链路两端的光模块和光纤类型必须匹配。多模光纤配多模模块单模光纤配单模模块堆叠设备之间的链路距离尽量控制在几十米以内。2.2 成员编号与优先级规划在真正敲命令之前先做一张规划表把两台设备的成员编号、优先级、设备名称、在机柜中的位置写清楚。举例来说机柜从上往下第一台防火墙作为Master成员编号定成1优先级设为32第二台作为Slave成员编号定成2优先级保持默认1。这样即便两台设备同时上电也能保证第一台稳定当选Master避免因为选举结果不确定导致业务网关地址出现漂移。还要考虑一个问题设备出厂默认的成员编号是多少绝大多数H3C防火墙默认成员编号是1。如果你有两台设备都是默认编号1那就必须把其中一台改成2。改成员编号的命令需要重启设备才能生效所以这个动作必须在组堆叠之前完成不能组完堆叠再改否则会引发整个IRF系统的重新选举和接口编号变更业务影响非常大。2.3 MAD检测方案这个配置不做堆叠做了等于白做MADMulti-Active Detection检测中文叫多Active检测是IRF里最容易被忽略、但最关键的一项配置。它的作用是当两台设备之间的堆叠链路全部中断时IRF系统会分裂成两个独立的设备每一个都认为自己还是Master这就叫“脑裂”。脑裂发生后两台设备同时使用相同的IP地址、相同的网关、相同的VRRP虚拟IP整个网络会陷入混乱。MAD检测的常见方式有两种。一种是BFD MAD检测需要在两台设备之间另拉一根独立的检测链路并在设备上创建一个独立的VLAN和VLAN接口来跑BFD报文。另一种是LACP MAD检测通过聚合链路来检测组网结构相对复杂一般用于交换机堆叠。防火墙项目里我用得最多的是BFD MAD配置清晰、排障直观。规划MAD链路时最重要的原则是这条链路必须独立于堆叠链路之外不能跟堆叠口共用物理线路否则堆叠链路一断MAD链路大概率也断了检测机制直接失效。我一般会从设备上找一个单独的千兆电口或光口作为MAD检测口在两端设备之间直连。2.4 配置前需要收集的信息表实际操作之前花十分钟把下面这张表填好后面敲命令会顺畅很多项目设备A主设备B备设备型号SecPath F1020SecPath F1020软件版本R9333P06R9333P06成员编号12IRF优先级321设备名称FW-MasterFW-Slave堆叠物理口XGE1/0/1、XGE1/0/2XGE2/0/1、XGE2/0/2MAD检测口GE1/0/1GE2/0/1MAD VLAN接口IP192.168.255.1/30192.168.255.2/30检查软件版本这一步千万别省。IRF要求成员设备软件版本一致如果两台设备版本不一样先升级成相同的版本再谈堆叠。版本检查命令是display version逐台执行重点对比版本号字段。3. H3C防火墙IRF配置实操从命令行到状态验证3.1 基础检查与设备命名下面的配置以H3C Comware V7平台为例不同版本命令细节可能有微调但整体思路一致。开始之前先登录设备逐台确认硬件状态没有异常报警。# 在设备A上执行 system-view sysname FW-Master# 在设备B上执行 system-view sysname FW-Slave给设备配置不同的主机名非常必要。IRF建立之后设备的主机名会统一变成Master的主机名但在建立过程中如果两台设备主机名相同登录时容易搞混当前操作的是哪一台。网络设备调试最怕的就是“我以为我在A上操作其实命令全都敲到了B上”。3.2 第一台设备Master的IRF配置先把堆叠口绑好再调优先级。system-view # 进入IRF端口1/1交叉绑定物理成员口 irf-port 1/1 port group interface Ten-GigabitEthernet1/0/1 port group interface Ten-GigabitEthernet1/0/2 quit # 调整成员1的优先级为32 irf member 1 priority 32有几点要强调。第一irf-port 1/1这个编号的含义是“成员1的IRF-Port1”。物理接口绑定到IRF端口后接口视图下就不再允许配置业务IP这是正常现象。第二有些版本会要求先执行irf-port-configuration active让IRF端口的配置立即生效有些版本则建议配置完所有IRF参数后统一重启生效。我个人的习惯是先保存配置再执行一次reboot让设备在干净的IRF配置状态下重启。设备A的最终配置和保存return save force reboot设备重启后再次登录使用display irf确认成员编号和设备角色FW-Master display irf Member Role Priority CPU-Mac Description *1 Master 32 1234-5678-9100 FW-Master带*的表示当前登录的成员带的表示该成员是Master。看到这个输出说明设备A已经以Master身份运行在IRF模式了。3.3 第二台设备Slave的加入配置设备B的配置比设备A多一个步骤——修改成员编号。因为设备B默认也是成员1如果不改两台设备都叫成员1根本无法组堆叠。需要特别提醒修改成员编号要趁设备还没加入IRF时进行并且要重启生效。system-view irf member 1 renumber 2执行完renumber后系统会提示该配置将在重启后生效。此时先不要急着重启继续完成IRF端口绑定。irf-port 2/2 port group interface Ten-GigabitEthernet2/0/1 port group interface Ten-GigabitEthernet2/0/2 quit注意这里的IRF端口是2/2含义是“成员2的IRF-Port2”。按照交叉连接的原则设备A的IRF-Port1必须对应设备B的IRF-Port2。如果设备B上绑定的物理口是XGE2/0/1和XGE2/0/2那设备A的XGE1/0/1需要和设备B的XGE2/0/1通过光纤互联设备A的XGE1/0/2和设备B的XGE2/0/2互联。保存配置并重启设备Breturn save force reboot设备B重启完成且两台设备的堆叠光纤物理接通后设备A上应该能看到成员2已经加入。再到设备A上执行一次FW-Master display irf Member Role Priority CPU-Mac Description *1 Master 32 1234-5678-9100 FW-Master 2 Standby 1 1234-5678-0002 FW-Slave如果能显示两条成员信息并且其中一台角色是Master、另一台是Standby说明IRF已经基本建立成功。此时你在任何一台成员设备上敲配置另一台设备会自动同步。3.4 堆叠建立后的验证命令堆叠建立后不要急着上业务先做一轮系统验证。我会按顺序执行下面几个命令# 查看IRF成员信息确认角色和优先级 display irf # 查看IRF拓扑连接关系重点看两两设备之间是否连通 display irf topology # 查看IRF链路状态确认堆叠物理口有没有UP display irf link # 查看系统运行时间确认两台设备的启动时间是否接近 display versiontopology输出里能看到设备之间的连接拓扑正常情况下成员1和成员2之间应该是双向连接。如果发现拓扑里只有单台设备说明堆叠口没有协商成功回去检查物理链路和IRF端口绑定绝大多数问题都是交叉接反或者物理口没UP。4. 堆叠之后的必补动作MAD配置与业务接口联动4.1 BFD MAD的配置思路与命令IRF刚建好的时候系统是正常的但如果不做MAD检测这个堆叠等于埋了一颗雷。我在测试环境里专门模拟过堆叠链路中断的情况两根堆叠光纤同时拔掉两台设备立刻各自为政都认为自己还是Master虚拟网关的IP地址在两台设备上同时存在内网部分终端走设备A、部分终端走设备B来回路径不一致防火墙会话直接乱掉。配置BFD MAD需要提前准备好一条独立的MAD检测链路。我在规划里用的检测口是GE1/0/1和GE2/0/1在两台设备上用一根网线直连并将这两个接口加入一个专门为MAD创建的VLAN。# 在IRF系统下统一配置串口登录Master操作即可配置会自动同步 system-view # 创建专门的MAD VLAN建议和业务VLAN完全隔离 vlan 4092 description MAD-DETECT-VLAN quit # 把两台成员上的MAD检测口都加入该VLAN interface GigabitEthernet1/0/1 port link-type trunk port trunk permit vlan 4092 quit interface GigabitEthernet2/0/1 port link-type trunk port trunk permit vlan 4092 quit # 创建MAD VLAN虚接口配置互连地址 interface Vlan-interface 4092 ip address 192.168.255.1 30 mad bfd enable quit这里有一个很容易踩的坑VLAN 4092被用于MAD检测后这个VLAN和对应的接口就不能再跑任何业务流量。如果业务网段规划时不小心把某个网段划到了4092MAD检测会和各种广播报文互相干扰出现莫名其妙的丢包或者MAD误判。另外mad bfd enable这个命令是加在VLAN虚接口下的不是加在物理接口下的很多第一次配置的人容易找错位置。配置完成后可以在接口下看到BFD会话已经建立display bfd session正常情况下能看到一个Up状态的BFD会话两端IP分别是192.168.255.1和192.168.255.2。4.2 哪些接口需要排除在MAD关闭之外MAD检测机制生效后如果IRF真的发生了分裂检测到冲突的备用成员会主动关闭自己上面除保留接口之外的所有业务接口以此避免双Master同时对外提供服务。这个动作叫MAD Shutdown。问题来了如果备用成员把包括管理口在内的所有接口全关了那你后续想登录这台设备排查问题就变得非常困难。所以我每次配置MAD之后都会手动把管理接口、堆叠口、MAD检测口本身排除在MAD Shutdown范围之外。# 将管理口从MAD关闭范围中排除以实际管理口编号为准 interface M-GE0/0/0 mad exclude interface quit管理口的实际编号每台设备可能不一样可以用display interface查看名字带M-GE的那个口。这里的内容属于经验补充不同版本上mad exclude支持的对象范围略有差异配置前最好在官方命令手册里确认当前版本支持排除哪些接口类型。4.3 业务接口与安全域在IRF模式下的配置习惯IRF模式下业务接口的编号会带上成员编号例如设备A的接口叫GigabitEthernet1/0/0设备B的接口叫GigabitEthernet2/0/0配置安全域时要注意别配错设备。以将两个接口都加入Trust域为例security-zone name Trust import interface GigabitEthernet1/0/0 import interface GigabitEthernet2/0/0 quit按这个方式把两台成员设备上的业务接口统一纳入对应的安全域后续配置安全策略时只需要写一次两台设备会同时生效。排查问题时如果发现某条策略只在一台设备上生效第一反应应该是确认另一台成员上的对应接口有没有加入正确的安全域。5. 实战排错IRF堆叠中最容易翻车的几个点5.1 成员编号冲突导致无法建堆叠这是我在实验环境里遇到最多的问题。两台都是默认成员1配置命令全程没报错物理线也接对了但display irf里永远只有一台设备。后来检查才发现设备B压根没执行irf member 1 renumber 2重启之后还是成员1和Master冲突自然无法加入。判断方法很简单分别登录两台设备执行display irf看看各自的Member ID是不是唯一。如果两台设备都显示Member 1赶紧在设备B上重新执行一次成员编号修改并重启不要试图在IRF状态下动态修改编号那时候系统已经处于异常状态强行修改容易把配置搞乱。5.2 激活时机造成业务中断IRF配置后需要重启设备让配置生效但很多人忽略了一个细节如果这台防火墙正在承载业务流量重启本身就会造成一次业务中断。割接窗口内单独重启一台设备问题不大但如果设备B重启后自动加入了设备A的IRF它会触发IRF系统重新选举如果此时设备A的优先级没有正确调高或者两台设备优先级都是默认值Master可能会发生切换引起业务转发路径震荡。我的做法是把设备A的优先级先调成32再重启确保设备A重新启动后一定是Master设备B加入时它的优先级是1无论如何都不可能抢过设备A。这样即使设备A重启整个IRF系统的Master角色也只有一个等到设备A起来后两台设备会自动恢复堆叠。5.3 堆叠口绑定错误导致堆叠分裂堆叠口绑错是另一个高频问题。我见过有人把设备A的IRF-Port1和设备B的IRF-Port1绑在一起结果物理口两端的链路协议一直起不来。这是因为IRF端口之间的连接有严格的交叉关系成员1的IRF-Port1必须对成员2的IRF-Port2成员1的IRF-Port2必须对成员2的IRF-Port1。如果现场已经接好了线怎么快速判断哪端接哪端拔掉一根堆叠光纤在同一台设备上执行display irf link看哪个物理口变成了Down再拿着这根光纤的另一头去对端设备上看它插在哪个口上就能梳理出实际的连接关系。这个方法在机房标签丢失、线缆混乱的时候特别有用。5.4 MAD误判导致接口被全部关闭MAD误判是IRF故障里最棘手的一种。堆叠链路本身正常但因为BFD检测链路出现瞬断或者检测接口上误跑了业务流量备用成员误以为Master丢了于是触发MAD Shutdown把自己所有业务接口关掉。此时从网络侧看仿佛整台防火墙宕机了。遇到这种情况先不要慌着重启设备。重启会让问题变得更难定位因为重启后MAD状态会被清除。正确做法是登录到被关闭接口的成员设备上执行display mad verbose查看MAD状态如果显示的是Recovery状态说明这台设备正处于MAD恢复模式。手动在系统视图下执行mad restore可以强制让设备恢复转发状态。恢复后马上检查MAD链路配置确定是不是检测接口松动或者配置了业务流量。根据我个人经验MAD误判多数情况下是检测链路设计不合理造成的。用一根百兆电口、质量一般的网线去跑BFD检测出问题的概率远大于用千兆光口。如果条件允许MAD检测链路尽量选择单独的千兆口并且和堆叠链路分开走不同的物理路径避免同一次线缆故障同时打断两条链路。6. 给准备上线IRF的同行一些实在建议IRF这套配置网上能搜到的命令教程很多但真正决定项目成败的往往不是命令本身而是配置前的规划和故障后的冷静判断。我做过的每一次成功案例都离不开三件事版本核对、成员编号规划、MAD检测设计。这三件事每一件都看起来不起眼但任何一件没做好都可能在业务割接时给你当头一棒。如果条件允许我强烈建议先找两台测试设备或者用H3C官方模拟器把堆叠流程完整跑一遍重点模拟堆叠线中断、单台设备重启、主备倒换这几类故障场景亲眼看一下设备行为和业务影响再在现网操作时心里就有底了。模拟器里敲命令的感觉虽然和真机有差异但IRF的选举逻辑、接口编号规则这些核心流程是一模一样的。另外一个小习惯每次配置变更前把关键配置导出一份存到本地。IRF出问题的时候最快的恢复手段往往不是现场改配置而是把备份配置刷回去。机房里线缆标签混乱是常态一根光纤拔错了可能导致整个堆叠分裂所以操作前一定要确认设备面板上对应端口的编号再下手。搞网络这行手稳比手快重要细心比聪明值钱。