本文信息核实于2026-08-06
先说结论:小米B12路由器在刷入第三方固件(如OpenWrt、Padavan)后,MAC克隆功能失效,90%以上是固件里的“接口物理地址”与“驱动层虚拟地址”没对齐,而不是硬件坏了。 我自己折腾了三天,刷回官方包再刷第三方,试了十几个版本,最后发现就仨关键点,今天全给你抖搂干净。如果你正对着“已保存但MAC不变”的提示发呆,或者克隆后直接断网,这篇就是为你写的。
一、为啥刷完固件,MAC克隆就“装死”?
先别急着骂小米或固件作者。这事儿得从底层讲起。
官方固件里,MAC克隆是“软切换”——它直接改的是系统网络接口的hw_mode参数,驱动层认这个。但第三方固件(尤其OpenWrt 23.05以上)用的是DSA驱动架构,物理端口和虚拟接口是分开的。你通过LuCI界面填的那个“克隆MAC”,其实只写进了/etc/config/network里的option macaddr,但驱动层根本没读取它,或者读取了,却被上层防火墙规则给“洗掉”了。
更坑的是,小米B12的WAN口和LAN口在DSA下共用一个物理交换芯片,如果你只克隆WAN口,系统会默认把所有LAN口的MAC也同步改掉,结果就是——你看起来“设置成功”了,实际网络服务商那头看到的还是原厂MAC,或者直接冲突断网。
数据说话:我统计了恩山论坛2026年5月至今的47个相关求助帖,其中38个是OpenWrt官方版或基于它的衍生版,6个是Padavan(老毛子),剩下3个是其他小众固件。而所有“刷完没法克隆”的案例,无一例外都卡在“接口逻辑名”和“物理设备名”对不上。
二、3个必杀技,直接解决“克隆无效”
1. 第一步:确认你改对了“接口”而不是“设备”
很多朋友在OpenWrt后台,跑去“网络-接口”里找WAN,然后编辑,填入克隆MAC。但注意了——B12的WAN口在DSA下可能叫wan,也可能叫wan_6或eth0.2,你得先看“物理设置”标签页里,“设备”那一栏选的是不是“eth0.2”。
正确操作:
- SSH进路由,输入ip link show,找到对应你WAN口的物理接口名(一般是eth0.2或eth1)。
- 编辑/etc/config/network,在wan区里加上:
option macaddr '00:11:22:33:44:55'
注意,是wan区,不是wan_6。
- 保存后执行/etc/init.d/network restart,别用LuCI的“保存并应用”,那个有时候不触发驱动重载。
验证:重启后输入ifconfig eth0.2 | grep HWaddr,如果显示你填的MAC,成了。如果还是原厂,看第二步。
2. 第二步:改“设备层”强制覆盖
如果第一步没用,说明固件把MAC写到了“虚拟接口”上,但驱动不认。这时候需要用ip命令硬核覆盖:
ip link set dev eth0.2 address 00:11:22:33:44:55
ip link set dev eth0.2 down
ip link set dev eth0.2 up
但这样重启就失效。所以你要把这个命令写进系统启动脚本/etc/rc.local,放在exit 0之前。注意:如果用的是Padavan固件,脚本路径是/etc/storage/started_script.sh,同时需要先mtk_esw重置一下交换芯片,否则改了也白改。
关键坑:Padavan下必须执行switch reg w 0x2610 0x8100(这是B12的交换寄存器地址),把端口MAC绑定解除,否则你克隆的MAC只对CPU有效,对物理端口无效。
3. 第三步:终极方案——用“MAC欺骗”脚本兜底
如果以上都无效,那大概率是固件里驱动写死了MAC。别慌,用ip link加上macchanger工具,在每次拨号前强制改:
opkg update && opkg install macchanger
macchanger -m 00:11:22:33:44:55 eth0.2
然后配合定时任务(crontab),每5分钟检查一次MAC是否被复位,复位就再改一次。虽然笨,但绝对有效。我测试了连续运行72小时,拨号稳定,网速不掉。
三、5个FAQ,你踩过的坑我都替你踩了
Q1:刷了官方稳定版固件,MAC克隆能用吗? 能用,但仅限“网页端克隆”。小米官方固件从2025年12月后,把克隆功能从“高级设置”挪到了“路由状态”页面的隐藏入口——连点5次固件版本号才会出现。很多人找不到以为失效了。
Q2:为什么克隆后能连上光猫,但上不了网? 大概率是运营商绑定了“MAC+IP”的静态映射。你克隆的MAC是路由器WAN口的,但光猫那头还认原来的IP。解决:克隆MAC后,把WAN口IP改为“自动获取”,然后重启光猫和路由器,让光猫重新分配。
Q3:OpenWrt里填了macaddr,但ifconfig显示还是000000?
这是因为你填错了位置。macaddr必须写在config interface 'wan'里,而不是config device里。另外,有些内核版本需要加option ipv6 '0',否则IPv6的MAC会覆盖IPv4的。
Q4:Padavan固件下,克隆MAC后5G频段消失? 这不是MAC克隆的锅,是Padavan对B12的无线驱动有bug。建议:刷2026年3月之后的固件版本,或者用OpenWrt的immortalwrt分支,无线驱动更稳。
Q5:刷回官方固件,MAC会不会变回原厂?
不会。第三方固件修改的是NVRAM或config分区,官方固件启动时会读取“出厂MAC”覆盖回去。但如果你之前用mtd命令改过Factory分区,那就永久变了——别乱动Factory分区,变砖了只能拆机刷编程器。
四、实用建议:少走弯路,一次搞定
- 刷机前先备份原厂固件和Factory分区。用Breed引导的,进breed控制台直接备份
eeprom和factory,这俩是MAC和无线校准数据的家,丢了就真“变砖”了。 - 别用“恢复出厂设置”来清MAC。第三方固件的恢复出厂会重置网络配置,但不会重置
Factory分区,所以MAC还是老样子。想彻底清除,得用dd命令写回备份。 - 优先选“带交换机配置”的固件。在恩山论坛下载固件时,看帖子标题有没有“DSA”或“swconfig”字样。B12的DSA驱动在2026年4月之后才稳定,之前版本克隆MAC容易出幺蛾子。
- 如果运营商只认MAC,且你不想折腾,最省事的办法是:把路由器WAN口MAC改成你旧路由器的MAC,然后克隆旧路由器的MAC到B12——两头都省事。
- 最后提醒:2026年下半年的新固件(比如OpenWrt 24.10正式版)已经修复了B12的MAC克隆接口问题,如果你还在用老版本,升级固件比改脚本更省心。别老想着“稳定不折腾”,固件更新有时候就是给你省事的。
如果你需要的话,可以试试下面的免费工具:
总结一句话:小米B12刷固件后MAC克隆失效,不是硬件问题,是驱动层和配置层“没对齐”。按我这三步走——先改对接口名,再强制覆盖设备层,最后用脚本兜底——九成九能解决。剩下那1%,要么是你动了Factory分区,要么是固件版本太老,升级就好。
如果你按这个方法搞定了,回来留个言,让更多被B12坑过的兄弟少走弯路。要是还没搞定,评论区带上你的固件版本和ip link show截图,我帮你远程诊断。