N1 旁路由升级报告:R24.07.07 → R26.03.25(OpenWrt 24.10.3 / k6.12.111)
完成时间:2026-10-15 10:43(设备已冷重启两次验证,全部自启)
1. 结果一览
| 项目 | 升级前 | 升级后 |
|---|---|---|
| 固件 | flippy R24.07.07(r6751-ddaa6722f) | R2026.10.01 / OpenWrt 24.10.3(r7757-c1b3c23ff) |
| 内核 | 6.6.67-flippy-92+ | 6.12.111-flippy-95+o |
| 根分区 | p2(EMMC_ROOTFS1),剩余 9 MB | p3(EMMC_ROOTFS2),剩余 62 MB |
| 防火墙 | fw3 + iptables-legacy | fw3 + iptables-legacy(新固件没有 fw4/nftables,无需重写 nft) |
| 包数量 | 1269 | 1289(旧系统 1269 个包在新固件里 0 缺失) |
| tailscale | 1.68.1 | 1.94.1 |
| docker | 27.0.2 | 29.1.1(需回退存储驱动,见 §4) |
| Samba | 4.16.x | 4.17.2 |
| WARP 实测速度 | 1.5–2 Mbps | 4.6 Mbps(575 KB/s,Cloudflare 5 MB 测速) |
设备:Phicomm N1(s905d),192.168.100.5,主路由 ASUS RT-AC3100(.1)全程未动。
2. 升级过程(可复现)
# 1) 备份(26 个文件 / 55 MB,已同步到 PC E:\ai\wsp\backup_n1\)
/mnt/mmcblk2p4/backup/pre-upgrade-20261015-082013/
# 2) 镜像放到 p4(下载后 SHA256 校验一致)
openwrt_n1_k6.12.img.gz 653800745 B sha256 9c8829df…a8f551 → 解压 1749024768 B
# 3) 就地刷 eMMC(脚本自动重启,结束后自动删除 .img)
cd /mnt/mmcblk2p4 && /usr/sbin/openwrt-update-amlogic openwrt_n1_k6.12.img no restore
踩到的坑:预检时遗留的 /dev/loop0 会让升级脚本把两个 loop 设备拼成一行而失败(在格式化 p3 之前退出,系统未受损)。清干净(losetup -D)后重跑即成功。
3. 升级后必须手动恢复的东西
升级脚本只保留 openwrt-backup -p 清单里的文件(/etc/config/、crontabs、dropbear、tailscale、firewall.user、shadow、ssh host key、smbpasswd、docker/daemon.json、/root/.ssh/)。不保留:
/etc/init.d/mihomo/etc/firewall.mihomo.sh
两者已存在 p4,刷完直接搬回(已同步更新到 /mnt/mmcblk2p4/backup/custom/)。注意 /etc/config/firewall 里的 config include 'mihomo' 会被还原,指向的脚本却不存在 → 必须补回,否则防火墙 reload 报错。
4. 两个必须记住的兼容性坑
4.1 Docker 29 换存储驱动 → 容器"消失"
新固件 Docker 29.1.1 默认用 containerd overlayfs 快照存储,旧 overlay2 里的镜像/容器全部看不见(docker ps -a 空)。回退方法(已生效):
# /etc/docker/daemon.json 增加:
"storage-driver": "overlay2",
"features": { "containerd-snapshotter": false }
# 让 init 脚本使用自定义文件:
uci set dockerd.globals.alt_config_file=/etc/docker/daemon.json && uci commit dockerd
/etc/init.d/dockerd restart
之后 5 个 cloudflared 容器全部回来,2 个按原设置自启。
4.2 TPROXY 在 k6.12 上失效(关键)
现象:xt_TPROXY 规则命中、包被打上 MARK=0x1,但目标端口没被改写(日志里 DPT=80),mihomo 一个连接都收不到 → 客户端 TCP 全断。
根因:内核 nf_tproxy_get_sock4() 只查 IPv4 监听表,而 mihomo 的监听是 IPv6 通配 :::7895(bind-address / inbound-bind-address 都改不动它)。查不到 socket → TPROXY 只打 mark → 包被 table 100 local 投递到本地后丢弃。
解法:TCP 改用 nat REDIRECT(已部署并验证):
- mihomo 配置加
redir-port: 7893 nat/MWARP_TCP:内网/组播/WARP 端点 RETURN,其余-p tcp -j REDIRECT --to-ports 7893- DNS 仍走
nat/MWARP_DNS:53 → 1053(fake-ip) - 删掉 mangle/MWARP 与 fwmark 策略路由(留着会继续误伤 TCP)
代价:UDP 无法劫持(QUIC / Telegram-UDP 走直连,应用会自动回退 TCP)。其余与 TPROXY 版等价。
5. 顺带修好的老问题
新固件把用户上次清理掉的服务又全部启用了(netdata:19999、ocserv:4443、softethervpn、xl2tpd、snmpd、kodexplorer、unblockmusic、ssr_mudb_server、passwall_server、usb_printer、lucky、transmission、zerotier、n2n、pptpd、ipsec…),已按上次清单全部 stop + disable。
PassWall2 在配置还原后 enabled=1 自动启动,它的 PSW2_DNS/PSW2 链排在最前,抢走 DNS 和 TCP(双重劫持)→ 已 stop + disable,重启后保持关闭。
6. 验证记录
- 冷启动自启:mihomo、dockerd(2 个 cloudflared 容器 Up)、samba4、nfsd、vsftpd、rpcbind、wsdd2、dnsmasq、uhttpd、sshd、ttyd、tailscale ✓
- 劫持规则自启:
nat/PREROUTING挂MWARP_DNS+MWARP_TCP,mangle 无残留,无 fwmark 规则 ✓ - fake-ip:客户端查
.5→198.18.0.24✓ - 模拟客户端(netns + veth 挂 br-lan,192.168.100.77):
[TCP] 192.168.100.77 --> www.google.com:80 match RuleSet(rule22) using 🚀 节点选择[WARP-198.2-443],HTTP 301 实响应 ✓ - 真实设备(192.168.100.215):YouTube/gvt1 → 📹 油管视频[WARP]、googleapis → 🤖/🚀[WARP]、微信 → 🎯 全球直连 ✓
- API 连接类型
Redir、inbound 7893 ✓ - LuCI 登录(原密码)✓,SSH 公钥登录 ✓
7. 回退方法(旧系统仍在盘上)
旧根分区 p2 未被触碰,UUID 7e901fa0-f3ad-47d1-b696-4e480c65a866;新系统在 p3,UUID 5d2411a9-6693-4de1-809a-c1c483ec494a。
# 方法 A:SSH 进设备改引导参数后重启
sed -i 's/^APPEND=root=UUID=[0-9a-f-]*/APPEND=root=UUID=7e901fa0-f3ad-47d1-b696-4e480c65a866 rootfstype=btrfs rootflags=compress=zstd:6/' /boot/uEnv.txt && reboot
# 方法 B:把 uEnv.txt 拷到别的机器改完再放回去(p1 是 vfat,读卡即可)
p1 引导区原始备份:E:\ai\wsp\backup_n1\pre-upgrade-20261015-082013\boot-p1.tar.gz
镜像存档(PC):E:\ai\wsp\fw_archive\openwrt_n1_k6.12.img.gz;旧镜像:/mnt/mmcblk2p4/fw/old/openwrt_n1_github.img
8. 遗留 / 待办
- tailscale 从未登录过(
/etc/tailscale/tailscaled.state只有{},2024-07-07 起就是空的)→ 不是升级造成的,需要 auth key 才能tailscale up。 - 两个 cloudflared 隧道容器已自启,本次开机后各自成功注册 4 条连接(lax01/05/07/10/13);日志里那些
failed to dial to edge with quic: timeout只是注册前的重试。但回源目标http://192.168.100.4:8008这台机器现在不在网上(ping 不通、8008 无响应),所以公网访问vps.mumi.eu.org返回 502、mix.goode.gq超时。隧道本身没问题,问题在那台 192.168.100.4 的源站——升级前就是这个状态。 - cloudflared 版本 2024.8.2(Cloudflare 提示已过期,建议 2026.10.0);升级镜像需要能拉到
cloudflare/cloudflared:latest,国内网络下要临时走镜像站。 - UDP 直连(REDIRECT 方案的固有限制)。若以后要恢复 UDP 劫持:换支持 IPv4 tproxy 监听的 mihomo 版本,或改用 sing-box。
- 根分区仍 93% 满(剩 62 MB),p4 剩 2.7 GB。
请登录后发表回复