☰
OpenClaw强行上线引发全网瘫痪:DHCP冲突与广播风暴事故复盘
2026/10/17 8:31:02 网站建设 项目流程

值班那晚我只做了三件事:先被手机震醒,再被值班群里的消息刷屏,然后跑到机房的路上脑子里只有一个念头——完蛋。

监控大屏上整片整片地飘红,核心交换机三层接口的CPU占用从百分之十几直接干到接近百分之百,全网丢包率肉眼可见地往上跳。而这一切的起点,是下午老板拍板“今晚必须把OpenClaw给我上上去”的那句话。

OpenClaw本身不是什么邪门东西,一个开源自动化控制框架,接手智能设备、跑定时任务、做跨系统联动,都很方便。问题从来不出在工具身上,问题出在“硬上”这两个字。不评审、不测试、不规划网段,直接拿生产环境当试验场。这篇文章就当是一份事故复盘,给所有在类似环境下做部署、运维、网络管理的人提个醒:有些坑,真的是老板替你挖的。

1. 老板拍板上线:一场没人拦得住的内网改造

1.1 这个项目原本长什么样

OpenClaw我们是内部调研过的,当时选它的理由很实在:开源、文档全、社区活跃度高,而且自带设备发现、自动化编排和Web控制台,比起原来传统自动化方案,管理成本低不少。

应用场景也很清晰,公司有好几层楼,每一层都有门禁、摄像头、温湿度传感器、会议室的灯光和投影设备,这些设备来自不同品牌,协议五花八门。原来都是各管各的,门禁一套系统、灯光一套系统、投影又是另一套。整合是迟早的事,OpenClaw确实能把这些全部串到一个控制台里管理。

但注意,我说的是“整合”,是逐步打通,而不是一次性全量接管。当时调研组的方案是先拿会议室这套做POC,跑满一个月,确认兼容性问题都处理干净了再往其他场景扩展。

老板不这么想。

他觉得POC太慢,直接下令一次性全公司铺开,并且要求当晚完成核心节点接入。理由也很简单粗暴:“设备不都在这了吗?你们不是测过吗?既然能跑会议室,就肯定能跑全楼。”这句话现在回忆起来,简直像是给事故买保险。

1.2 我们反对的三个技术理由

开会的时候,我们其实明确提过反对意见,而且是带着技术依据的。但老板说“出了问题我负责”,这句话大家都很熟悉吧?技术人最怕听到这句,因为真出了事,负责的还是你。

第一个问题是网络规划。调研阶段用的是独立测试网段,生产网完全没动。但全量铺开意味着OpenClaw的节点要进生产网段,而我司的生产网段和OpenClaw安装时默认生成的虚拟网段存在重叠。一旦两侧都开启自动地址分配,冲突是大概率事件。

第二个问题是认证方式。生产环境的接入认证用的是802.1X,而OpenClaw的默认设备发现机制依赖主动扫描和广播请求。扫描行为本身就会触发安全设备的告警,更别提广播请求有概率被接入层交换机直接丢弃——不是不能配,是要逐台设备调试,这不是一晚上能做完的。

第三个问题最致命:我们不清楚这套框架全量部署之后,节点之间的通信频率到底是多少。调研期间一共就接了十几个设备,数据量可以忽略不计,但全量接入上百个终端,控制信令、状态上报、心跳同步叠加在一起,二层广播域能不能扛住,没有人敢打包票。

这三个理由报上去之后,老板的回复是:“先上,有问题再说。”

2. 事故爆发当晚:从冒烟到全断只用了40分钟

2.1 爆的直观表现:Ping不通网关,控制台登不进去

当晚九点左右,第一批OpenClaw节点开始在机柜里点亮。刚开始还一切正常,控制台上能看到设备陆续上线,状态都是绿色。我当时的想法是:也许是我们过度担心了,这套东西确实没想象中那么占资源。

这种乐观情绪大概持续了二十分钟。

第一波异常是办公区的同事在群里反馈:Wi-Fi能连上,但上不了网。当时我第一反应是出口链路出问题了,赶紧ping了一下公网网关,结果是通的。然后我再ping内网网关,不通。

接着我开始尝试登录核心交换机的管理接口,发现SSH连上去之后敲命令有明显的延迟感,敲一个命令要等两三秒才回显。这就不对劲了。再查三层接口状态,看到两个接入侧VLAN的协议状态在Up和Down之间反复横跳,接口错包计数疯狂上涨。

到这一步,我基本确定问题不在出口,而在内网二层。

2.2 被忽略的第一波信号:广播包异常上涨

如果重新复盘,其实最早暴露问题的不是业务断网,而是广播包数量。

当时我在核心交换机上敲了show interface,看到广播计数那一栏的数字比平时上涨了至少两个数量级,同时ARP表里出现了大量没有业务含义的未知IP记录。这些IP不属于任何正式分配网段,却在反复向外发起地址解析请求。

还有一个关键特征:这些请求的源MAC地址都是同一家厂商的OUI前缀。换句话说,有一批新的设备在自动向全网宣告“我在这里”,并且频率极快。这种高速率ARP请求,在网络设备看来和病毒扩散几乎没有任何区别。

更麻烦的是,这批设备不仅发ARP,还在不停地尝试DHCP请求。核心交换机上配置了DHCP中继,于是每个请求都会被打包转发给地址池服务器。地址池里的租约瞬间被刷光了,大量员工终端拿不到IP地址,自然也就无法上网。

到这一步,我手里已经有好几个嫌疑对象了,但还没法把锅完全甩到OpenClaw头上,因为按架构来说,它不应该触碰宿主机的网络协议栈。直到我进入后端的排查,真相才真正浮出水面。

3. 排障全流程:我如何把锅从“网关坏了”钉到“地址池冲突”

3.1 第一轮误判:先怀疑上行链路

事故刚开始那会儿,所有人最直观的感受是“网络断了”,那自然会先怀疑“是不是交换机或者链路出问题了”。

我当时先检查了链路带宽使用情况。不看不知道,一看吓一跳:核心到汇聚的上行端口流量曲线陡然拉升到接近千兆线速,正常情况下这个端口平时只有两三百兆的波动。第一反应是有环路,有环才可能打成这种状态。

但查了一圈生成树状态,所有端口都正常,没有被阻塞的端口。排除环路之后,我怀疑是某台设备异常发包把带宽打满了。于是我在核心交换机的镜像端口上接了一台笔记本,开始抓包。

抓包的第一个结果很快出来了:TCP和UDP流量固然大,但真正把带宽吃满的不是业务数据,而是广播帧和组播帧。大量重复的ARP请求、DHCP Discover请求,以及OpenClaw节点之间的组播探活消息,在二层网络里反复转发和复制。这个问题就等于说,同一封信被打印了一万份,塞满了公司的邮筒。

3.2 抓包之后才看清:DHCP池被挤爆

把抓包文件导入分析工具之后,我发现了一个非常经典的冲突特征。

正常网络里,DHCP Discover是客户端开机或断线重连时才发的,频率很低。但那段时间抓到的DHCP Discover来源非常密集,而且源MAC高度集中在某几个前缀。更典型的是,抓包数据里同时出现了“DHCP Offer来自多个不同服务器”的现象。

正常情况下,每个子网里DHCP地址池由固定的一台服务器或中继代理响应,Offer应该是同一个来源。但抓包里出现了好几个不同IP的DHCP响应,并且它们给出的地址段互相重叠——也就是说,同一时刻有两套地址分配机制在同时工作。

我再回头查OpenClaw的安装文档,才发现这套框架安装时会默认创建一个内嵌管理网络,而这个网络默认配置的地址池范围正好覆盖了我们生产网的一部分网段。当节点的桥接模式开启时,宿主机就会把OpenClaw的管理网络直接桥接到生产网卡上。

后果就是:OpenClaw节点既当客户端,又当DHCP服务器,还敢向生产网段里的其他设备发地址确认报文。我司员工终端发起DHCP请求时,既收到正式DHCP服务器的Offer,也收到OpenClaw节点的Offer,甚至有的终端被迫接受了后者分配的非法地址,网关直接变成不存在的东西,网络自然就断了。

3.3 二层广播风暴的锁定过程

确认DHCP冲突还不够解释全网瘫痪。DHCP请求再频繁,也不至于把核心交换机的CPU打到99%。真正致命的,是二层广播风暴。

我继续在抓包里筛广播帧,按源IP和源MAC统计Top发送者,答案很快浮现出来。发送量最大的几个IP,全部来自OpenClaw节点所在的网段,且这些IP既不在正式地址池里,也不在保留地址列表里。这些OpenClaw节点互相发现、互相确认状态、不断同步路由信息,每个节点每次同步时都会触发对全网设备的一次地址解析,而因为地址规划混乱,解析过程中产生的未知请求又会再次触发其他节点的重试机制。

通信频率以指数级别叠加,最终变成每个节点每秒向全网发送数千个广播帧。一个子网里几十台节点同时这样操作,二层广播域里所有交换机都得把这些包从每个端口复制出去——这就是核心交换机CPU被打满的根本原因:它不是在转发业务数据,而是在复制垃圾广播包。

到这一步,问题终于彻底锁死了。

4. 根因拆解:部署方案里埋的三颗雷

4.1 默认网段与生产地址池完全重叠

先把这个最关键的问题拉出来说:部署OpenClaw时,如果没有仔细检查它的默认网络配置,它很可能自动创建一张管理网络。这个管理网络默认使用的私有网段,在一些常用软件里有着很高的撞车概率。打个比方,就像你买了一套新房,开发商默认把门锁密码设置成123456,而你偏偏也习惯用123456——你俩撞在一起是早晚的事。

在生产环境里,这个撞网段的后果非常严重。OpenClaw的管理网络会尝试向同网段内的设备发送数据包,而这些数据包会被核心交换机的三层接口当作普通流量直接转发,如果撞上了正式业务网段,数据就会混流。这个混流不是说你多个几百兆带宽的问题,而是双方地址解析表错乱,网关信息互相覆盖。

我们最后查到的现场就是:OpenClaw节点默认开启的接口地址、网关地址,和生产网络里某一段VLAN的网关配置完全一致。节点上线后,维护人员也许看不到冲突,因为交换机不会主动报错,但如果节点发出响应报文,生产设备就会开始怀疑自己的网关到底是谁。

4.2 节点伪装成网关

再说另一个烧脑的问题:OpenClaw节点为什么能替正式DHCP服务器发Offer?

这本质上是二层网络里常见的“私设服务器”问题。像DHCP这种基于广播的协议,本身不加密、不校验身份,任何能收到Discover请求的节点都可以回复Offer。当生产终端发起DHCP请求时,正规服务器和OpenClaw节点同时回复,终端遵从先到先得,谁能先回应,谁就是“合法网关”。

那晚实际发生的事情就是这样:OpenClaw节点因为直接在宿主机网络栈上层运行,响应速度快得离谱,几乎抢走了所有终端的DHCP请求。大批终端拿到的网关地址指向一个不存在的外网网关,内网通信全面瘫痪。

这也就是为什么事后我们回看监控,发现员工终端“在线但无网络”的比例一度高达80%以上。它们其实拿到了“地址”,不过是假地址。

4.3 端口探测风暴叠加上行拥塞

第三个雷是OpenClaw自带的设备发现机制。这套机制会主动向所在子网发送大量的探测包,用于发现同网段下的其他硬件设备。如果设备数量少,这完全没问题;但全量部署后,节点数量上来了,探测频率并没有自动降低。

多个OpenClaw节点同时做全网扫描,大量请求就在核心交换机汇聚。更尴尬的是,这些扫描请求的目标地址很多并不存在,交换机需要逐层广播寻找,直到超时。超时之后节点会重试,重试次数呈指数上升。配合DHCP风暴,核心交换机不仅被广播帧淹没,还被无效的地址解析请求折磨得不轻。

至此,三条雷同时引爆,全网彻底爆掉。

5. 事后处置:重启没问题,但问题会再来

5.1 当夜止血步骤

确认根因之后,我做的第一件事不是改配置,而是拔电。

连夜把42个OpenClaw节点的供电全部断开,让它们完全离线。拔电后大概五分钟,核心交换机的CPU占用率肉眼可见地降了下来,ARP表里的垃圾条目开始老化清除,员工终端重新发起DHCP请求后,顺利地拿到了正式地址。办公网基本在半小时内恢复。

第二件事是把地址池的剩余租约清空,避免那些拿到错误地址的终端续租时再次掉进坑里。第三件事是在接入交换机上临时关闭了该区域的DHCP中继,强制所有设备只从核心DHCP服务器获取地址。

这三步做完,稳定是第一位的。至于到底背不背锅、死哪些配置,那是天亮了再说的事。

5.2 第二天复盘出的整改清单

天亮之后,我拉上网络组、安全组和当时负责OpenClaw部署的人,一起过了个事故复盘。不仅复盘技术链路,也复盘立项流程。最后产出了一份整改清单,按优先级排列:

优先级整改项说明
P0OpenClaw强制使用独立网段所有节点必须在专用VLAN内运行,物理上禁止接入办公网地址段
P0关闭节点内嵌DHCP服务节点只能当客户端,不能当服务器,否则一律隔离
P1接入层开启DHCP Snooping非信任端口收到的DHCP Offer直接丢弃,从协议层面防止私设DHCP
P1网关IP绑定静态ARP防止任何设备以假身份冒充网关
P2限制节点的组播探测频率通过配置降低OpenClaw的自动发现触发次数,避免全网扫描
P2新服务上线必须有网络方案评审未经评审的变更一律禁止执行,包括老板指令

这套清单里最值得说的其实是P1里的DHCP Snooping。当初我们的接入交换机都支持这个功能,但一直没启用,因为觉得内网足够安全。实际上,只要一个私设DHCP节点出现,整个广播域都要遭殃。启用Snooping之后,只有信任端口能发DHCP Offer,非信任端口上所有DHCP服务器响应都会被交换机直接丢弃,从物理层面堵死伪服务器。

5.3 给所有“被老板硬上”的人建议

我不知道有多少人有过类似的经历:明明方案有明显风险,明明天花板就在那里,但决策者一句“先上再说”,你只能咬着牙照做。我特别理解这种处境,但作为实际执行的人,有几件事是可以提前做的,不要等爆了才后悔。

第一,上线前无论如何都要留一份回滚预案。哪怕老板催得再急,你也必须有一份“出事后先断哪个电、拔哪根线”的文档。这次如果没有预案,光靠现场排查,全公司怕是要断一上午网。

第二,把监控阈值和告警规则提前配好。我们当时虽然有大屏监控,但广播帧数量、DHCP异常请求这类指标并没有设阈值告警。如果提前配了广播包突增告警,至少能比“用户先发现断网”早十分钟处理。

第三,变更操作一定要有书面记录,哪怕是用一个简单的日期加变更人加变更内容的表格都行。复盘的时候,有没有记录完全是两条路:有记录可以直接回溯操作顺序,没有记录就只能靠猜。猜着猜着,事故报告就变成了互相甩锅。

我现在的习惯是,所有非计划变更必须有一页纸的“影响评估”,哪怕最后真的是老板硬上,我也会在他的指令后面写清楚风险,再签字执行。不是推卸责任,而是出了事的时候,这份文档能让技术人的腰杆稍微硬一点。

6. 事故之后:这套坑不能让第二个人再踩

事故处理完以后,OpenClaw并没有被彻底弃用。重新整改之后,它现在老老实实地跑在独立VLAN里,控制着该控制的设备,再也没有碰过生产网络。功能层面它确实是套好东西,只是当初的接入方式是个灾难。

最后分享一个小技巧,也是我后来处理所有自动化设备接入时必做的动作:先让设备待机两个小时,不开任何业务,只抓包看它的“沉默行为”。绝大多数设备启动后的自动广播、自动探测、自动请求,在上线头一两个小时就会暴露出来。花两个小时抓一次包,省下的是整整一个通宵的事故排查时间。这个习惯,强烈建议每个人都养起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询