MT7981 花生壳 X1 Pro 完美 ImmortalWrt 固件 —— OpenClash + iKuai 多网聚合 + WireGuard 异地虚拟组网+DNS防泄漏
不要给别的用户表现的啊 经历了什么 体现出效果就行,起一个噱头 我想分为抖音版和bilibili 抖音的标题类似于 一个迷你小路由器
环境背景
因为校园网限速的环境 单个校园网账户速度只能3Mbps 萌生了多wan链路聚合的想法,尝试过openwrt的mwan 发现openclash 里无法生效 openclash 绑定一个网络接口 所以网络聚合暂时无法生效,因为up的openwrt 是跑在pve虚拟机上的,所以决定尝试虚拟出来一个ikuai 软路由 ,然后用pve虚拟机设置一个网桥vmbr3给ikuai 并且不绑定网卡创建一个网桥vmbrx
![[Pasted image 20260725094949.png|688]] 然后在给ikuai 在这网桥下创建 5个网络设备 进入ikuai 创建5个wan口 ![[Pasted image 20260725095244.png|697]] 然后进入侧边栏脚手架里面的流控分流 选择分流设置-多线负载 创建一个规则 负载模式采用新建连接数 ![[Pasted image 20260725095349.png|697]]
然后这个时候去给openwrt的虚拟机配置 配置ikuai的 lan 虚拟网桥 ![[Pasted image 20260725095503.png|697]]
在openwrt中配置wan口和防火墙配置为wan ![[Pasted image 20260725095602.png]]
最终测速 可以看到5个wan都达到了校园网的测速 证明多线负载成功,并且网络通过openwrt做到了dns防泄漏。 ![[Pasted image 20260725100007.png]]
然后到x1pro上搭建wg通道
拿到固件后:搭建 WireGuard 异地组网(5 步走)
这是别人拿到 v36 固件后,在花生壳 X1 Pro(小路由)和家里/工作室的 OpenWrt(办公室端)之间建立 WG 隧道,让小路由不管插到学校哪个办公室的网络面板都能自动跑通的全过程。下面的 192.168.1.2 是小路由默认 LAN、192.168.1.1 是办公室端默认 LAN,按你现场实际情况改。
第 1 步 — 两端各自生成一对密钥
SSH 登入小路由和办公室 OpenWrt,分别执行:
|
|
把小路由的 public.key 和办公室端的 public.key 互相抄过来(用 cat /etc/wireguard/public.key 复制)。
![[step0-genkey.png|800]]
第 2 步 — 小路由端配置 wg0 接口
SSH 进小路由,编辑 /etc/config/network(直接 UCI 命令行,不用 vi):
|
|
![[step0-network.png|800]]
第 3 步 — 防火墙开 wg0 zone
小路由上 wg0 必须独立成 zone,不然 LAN 走不出去:
|
|
第 4 步 — 办公室端配对端(小路由公钥 + endpoint 锁 0.0.0.0)
SSH 进办公室 OpenWrt(192.168.1.1),同样的 UCI 套路:
|
|
端口映射:在小路由前面的网关(这里是 iKuai,10.200.80.93)把 UDP 51820 转到 WAN IP;端口映射不在小路由上做,由你那边的出口路由器/光猫配。
![[step0-office.png|800]]
第 5 步 — 验证
两端都 ifup wg0,然后各自跑:
|
|
握手在 30 秒内出来 + ping 双向都通 = 隧道活了。拔掉小路由换到别的办公室的网络面板,WAN IP 变了不用动任何配置,2 分钟内自动重连。
![[step0-verify.png|800]]
把前面那两个待办划掉(这两个在第 2、3、4 步里已经覆盖到了):
- 修改配置文件的地方(已补充)
- 需要配置上图片(占位
![[step0-*.png|800]]待替换为真实截图)
然后
- 配置vxlan 如何做到 三级 二级的组网
为什么要研究虚拟组网呢,因为UP经常需要去学校别的办公室去办公,我的工作室下面有大量的本地服务甚至需要高速串流的服务(主要是后面发现x1pro的性能能不足以支撑openwrt中的大量服务),创建 一个即插即用的环境,偶然发现学校就一条骨干网,而且没有任何端口限制 ,每个办公室配华为万兆xpon,网络面板端口跑满千兆。所以我需要一个便携的路由器 最好是type c 供电 可折叠WiFi ,我这个时候看到了 有人在25年买到了100+ 的cudy tr3000 ,然后我在电商平台看了一下2026/6/25 价格都在220+ 有时候会看到卷,但是我很急着用,这个时候我发现了花生壳x1pro 价格175元 是cudy tr3000的换皮版本。然后就像能不能买回来刷机,然后在往上冲浪的时候发现了大佬 “呼啦大棒” 的教程 https://www.right.com.cn/forum/thread-8472560-1-1.html 我最终成功的刷入了 大佬的固件 ,但是在使用的过程发现缺少 ios 的热点共享 android 很完美,缺少wg的底层驱动。 我不得不尝试重新编译固件,就有了下面的故事。
解决了那些问题 举例 原始素材
会议室想做到文件共享,快速demo展示,不用一次次用u盘或者软件传输文件,已经做到一切无感,当然在有限的条件下,有条件还是整体局域网或者vlan ,但学校是隔离的。
3D打印机在展厅,展厅没有wifi,可以用小路由快速组网,这样在工作室也能远程打印。
![[64E13CDF-8CC0-47FC-B983-A857B5075DC4_1_105_c.jpeg|692]] ![[A69CB70C-C2E0-4F6D-8636-19910F9C2274_1_105_c.jpeg]] 通过校园骨干网打通隧道,而且网络环境一致。在办公室实测。
![[83BCE36F-4375-492E-A731-8C07E2045F10_1_105_c.jpeg]] 正好也成功让托竹成功连上了网。 因为是虚拟lan网,所有的老师都能连接打印机,不用我一个账户去进行绑定。 小路由可以用一个充电宝进行供电,非常的方便。
![[ECA9C4FA-50A4-4243-B109-16977DA163AE_1_102_o.jpeg|691]]
一、为什么是这台机器
2026 年内存颗粒涨价潮里,路由器也未能幸免。原版 Cudy TR3000(MT7981B,128MB 内存)淘宝均价已经涨到 230 元左右。而花生壳 X1 Pro —— 贝锐(Oray)找 Cudy 代工的 TR3000 换壳版,128MB 内存 —— 淘宝上 170 元就能拿下。同样的 MT7981B Filogic 方案、同样的双频 AX3000(5G 支持 160MHz 频宽,协商速率 2401 Mbps)、USB 3.0,内存还翻倍。
性价比是有的,坑也是有的:这台机器的官方 OpenWrt/ImmortalWrt 支持用的是 mt76 开源驱动,在这块板上基本是坏的;能用的是 hanwckf/padavanonly 系的 mt_wifi 闭源驱动(Gzxhwq/ImmortalWrt-Actions 有预编译固件)。但 mt_wifi 是 MTK 私货体系 —— l1profile、dat 配置文件、DBDC 双频合一、自己的一套 netifd 脚本 —— 跟标准 OpenWrt 的 mac80211 完全不同,LuCI 无线界面一堆显示错乱。这就是后面一切故事的根源。
二、最终固件功能一览(v33)
基线:ImmortalWrt 24.10-SNAPSHOT,Gzxhwq 预编译固件为底,在其源码树上做了 33 轮增量构建。
无线(MT7981B mt_wifi 闭源驱动)
- 5G:HE160、信道 36、协商 2401 Mbps,SSID
ImmortalWrt-5G - 2.4G:HE40、自动信道,SSID
ImmortalWrt-2.4G - 物理广播永远正确(驱动按 PHY 适配内容),LuCI 无线界面完全修复:Overview、编辑弹窗标题/内容、信道下拉列表全部与物理一致(这是全网独一份的修复,详见第四节)
- UAPSD 关闭,消除 SMB 等交互应用 100-200ms 的唤醒延迟
网络
- LAN 192.168.1.2/24,不跑 DHCP(由主路由 192.168.1.1 服务),WAN 走 DHCP
- VXLAN-over-WireGuard 隧道接入办公室 OpenWrt:小路由在学校骨干网(10.200.80.x)下任意漫游换 IP,隧道 2 分钟内自动恢复,无需人工干预
- BBR 拥塞控制默认开启;MediaTek HNAT 硬件加速开启(桥接拓扑下无 NAT 流可卸载属预期,不是 bug)
- MSS clamp 持久化(隧道内 VXLAN 大包分片问题)
刷机友好
- 全部配置烤入 squashfs(network/wireless/firewall/dhcp/turboacc/dropbear/sysctl 共 7 个文件):U-Boot 刷机清空 overlay 后不再需要任何手工重配,通电即用
- U-Boot TFTP/网页刷写流程验证可靠;已知可启动恢复基线 v11 常备
固件文件:sysupgrade-v33.bin(50,473,789 字节,md5 57d43f1a56c66fafd5c62e8846641232)。
四、关键技术发现(这部分对 MT7981/mt_wifi 玩家最有价值)
1. ra0/rax0 与物理频段的绑定每次开机随机
三层模型必须分开看:
- UCI/netifd 层:section→ifname 静态映射(l1profile
ext_ifname=ra;rax,idx=1 永远报 ra0) - 驱动层:b0.dat/b1.dat 落到 ra0 还是 rax0,每次开机抛硬币
- PHY 层:硬件固定,且 UCI 内容是 idx 寻址的 —— idx=1 的内容永远写到 5G PHY,无论它通过哪个 netdev 暴露
所以物理广播永远正确,但 LuCI 读到的一切(标题、信号、信道列表)都经过那个静态 ifname 映射,绑错的开机就全反。
2. 修复:让 netifd 上报"物理"ifname
不碰 UCI、不碰 l1profile、不碰驱动。在 netifd 无线 setup 完成后起一个后台进程:读本 section 的 dat(l1util get MT7981.1.1 profile_path)里的 MacAddress,跟 /sys/class/net/ra*/rax*/address 比对 —— dat 的 MAC 就是这次开机物理承载它的那个网口的 MAC。匹配上了就重发一次 wireless_add_vif(只是一条 ubus notify,不触发 reload),把物理 ifname 上报给 netifd。45 秒超时兜底,匹配不到就保持原样。
配套:LuCI wireless.js 的 freqlist/txpowerlist 查询改传物理 ifname(rpcd-iwinfo 按 UCI section 名解析是静态的,不跟 ubus 走)。
3. U-Boot 网页刷机可能不清 overlay
刷完固件发现 LuCI 还是旧的 —— 历史 opkg install luci-mod-network 留下的 95KB 旧文件在 /overlay/upper/ 里 shadow 了新固件的 80KB 文件。overlayfs 还有 stale dentry 缓存,rm 之后必须重启才生效。刷机后第一件事:ls /overlay/upper/www/ 检查残留,或对比 /rom/<path> 与 /www/<path> 的 md5。
4. VXLAN-over-WireGuard 双路由方案
小路由挂在学校骨干(DHCP 10.200.80.x,每次换 IP),通过 iKuai 端口映射(UDP 51820 → 办公室 OpenWrt)建立 WG 隧道,VXLAN 跑在 WG 之上打通二层。15 个坑的完整记录在项目文档里,最关键的三个:
- 办公室端 peer 设
endpoint_host='0.0.0.0'(Plan C):小路由漫游换 IP 后,办公室端靠收到的 keepalive 自动学习新 endpoint,2 分钟内自愈 - WG 路由持久化必须用独立 route section,
route_allowed_ips和 uci routes 字符串都不可靠 - lan 口不配 gateway/dns,避免跟主路由抢流量
五、构建服务器开发经验
整套开发在一台 4 核 Linux 服务器(192.168.1.143)上进行,ImmortalWrt 源码树在 /opt/immortalwrt-build/immortalwrt/。沉淀下来的工作流:
1. 增量构建只要 2 分钟。 改 package/mtk/ 或 feeds/luci/ 下的文件后 make -j4,不用全部重来。敢于频繁出版本是这一切能收敛的前提。
2. 刷机前必做 squashfs 雕刻验证。 Cudy TR3000 的 sysupgrade 镜像是 FIT(ubootmod) 格式,直接 unsquashfs 会报 “no valid superblock”。正确姿势:
|
|
然后逐个 grep 补丁标记,确认改动真的进了镜像。v28 就是"补丁没烤进去还以为是显示 bug"的教训。
3. 先 overlay 活测,再烤入固件。 路由上 /lib/...、/www/... 直接 scp 覆盖(走 overlay 写时复制),wifi reload(不是 restart)或重启验证。好了再改进源码树重新构建。overlay 文件删了重启就回到固件原状,天然可回滚。
4. U-Boot TFTP 刷机,永远不用 sysupgrade。 这台机器的 platform.sh 把 cudy 路由到 fit_do_upgrade,需要 U-Boot 没设置的 chosen/rootdisk,会静默失败。U-Boot 刷写还可控可恢复。慢的话是网卡协商成了 10M 半双工 —— 强制 100M 全双工或直连。
5. 每个版本记录 md5/sha256 和变更原因。 33 个版本里有一半是废的,没有这份台账早就迷失在"哪个能刷哪个会砖"里了。
6. AI 结对开发真实有效但要立规矩。 整个项目是和 Claude Code 结对完成的,给它立的铁律(写在 CLAUDE.md 里):不许碰办公室主路由(OpenClash nftables 链顺序脆弱)、不许 ifup lan、不许改 MTU、不许 wifi restart、不许动 l1profile token、不许在 hotplug.d/net 里触发 reload。每条背后都是一次变砖或断网。
六、避坑清单(给后来者的速查)
- ❌
wifi restart—— 会 reset mt_wifi 状态机,5G 永远卡bss not ready state:0。用wifi reload - ❌ hotplug.d/net 里任何会触发 wifi reload 的逻辑 —— 死循环变砖
- ❌ l1profile 的 DBDC token 交换 —— 无限重启变砖
- ❌ “按物理直着改 UCI 标签” —— DBDC merge 会 swap,标签必须跟着内容走
- ❌
ip link set <iface> mtu <N>—— 改即坏,MTU 只走 UCI/rc.local - ❌ sed patch DBDC_card0.dat —— 那是内核生成的产物,改了没用
- ✅ 改 wifi 字段前先看 reference 固件的 DAT 文件,那是 ground truth
- ✅ 刷机后检查 /overlay/upper/ 残留
- ✅ iwinfo 调试永远按 ifname 查,别按 UCI section 名查(静态解析)
七、结语
170 元,2401 Mbps 的 5G HE160,刷完即用的全套配置,任意漫游自愈的加密隧道,和一个完全正常的管理界面 —— 这台花生壳 X1 Pro 现在的状态,大概比 230 元的原版 TR3000 刷任何公开固件都要好。
33 个版本。值得。
八、附件下载
| 文件 | 路径 | 说明 |
|---|---|---|
| 固件 | sysupgrade-v33.bin (50,473,789 字节, md5 57d43f1a56c66fafd5c62e8846641232) |
U-Boot TFTP/网页刷入,不要用 sysupgrade |
| 源码补丁 | v33-source.tar.gz (md5 27d83a77e0cd7919da6e661666156c3e) |
相对 ImmortalWrt 源码树根的全部修改文件,WG 私钥与 psk 已脱敏,使用前自行生成 |
| 源码包说明 | v33-source/README.md |
各文件作用与刷入流程 |
| Git 仓库 | v33-release/ (本地) |
已 commit,包含固件 + 源码包,待 push 到 git.zhangxiaokun.top |
固件基线:Gzxhwq/ImmortalWrt-Actions (padavanonly fork) + hanwckf mt_wifi 驱动。全部补丁源码与 15 坑实施文档在项目仓库中。
关键词 / Tags
花生壳 X1 Pro · Cudy TR3000 · MT7981B · Filogic · ImmortalWrt 24.10 · mt_wifi 闭源驱动 · 5G HE160 2401Mbps · OpenClash 透明代理 · iKuai 多线多拨 / 多网聚合 · WireGuard 异地组网 · VXLAN 二层隧道 · OpenWrt 自编译固件 · U-Boot TFTP 刷机 · 异地虚拟组网 · 校园网 VPN · 软路由 170元 · LUCI 显示错乱修复 · DBDC 5G 2.4G 频段修复 · mediatek hnat turboacc 加速 · BBR 拥塞控制