Mac下给磊科N60Pro(2G RAM版)刷入ImmortalWrt系统
前言
最近入手了一台磊科 N60 Pro,硬件是 MT7986A、128MB NAND、2GB DDR4 的版本。原厂系统基础路由功能没有问题,但扩展能力有限,所以准备刷入 ImmortalWrt,再安装 iStore,用来按需补充插件。
这次刷机是在 Mac 下完成的,没有使用 Windows,也没有拆机接串口。完整流程包括:
- 确认硬件和 MTD 分区;
- 备份全部原厂 MTD 数据;
- 校验 ImmortalWrt 官方镜像;
- 在 macOS 上搭建临时 TFTP 服务;
- 替换 FIP,也就是 BL31 + U-Boot;
- 通过 TFTP 启动 initramfs 恢复系统;
- 使用 sysupgrade 安装正式系统;
- 验证 2GB 内存、overlay 和网络;
- 安装 iStore;
- 安装并启用 Argon 主题;
- 安装 OpenClash 和 Mihomo 核心;
- 在没有 IPv6-PD 的二级路由环境中配置 IPv6 Relay;
- 清理 Mac 上的临时刷机环境。
最终结果是:ImmortalWrt 25.12.1 可以正确识别这台 2GB 版 N60 Pro 的全部内存,LuCI、WAN、NAND overlay 均正常。
最终运行状态如下:
本文是我在自己这台 N60 Pro 2GB 版上的实际操作记录。刷机始终存在变砖风险,不同批次硬件、分区布局和固件版本可能不同。不要跳过备份、哈希校验和 TFTP 自测,也不要直接套用别人机器的 Factory 分区。
硬件与软件环境
本次使用的环境:
| 项目 | 信息 |
|---|---|
| 路由器 | 磊科 Netcore N60 Pro |
| SoC | MediaTek MT7986A,4 核 ARM Cortex-A53 |
| 内存 | 2GB DDR4 |
| 闪存 | 128MB SPI NAND |
| 网口 | 2 个 2.5G + 3 个千兆口 |
| USB | USB 3.0 |
| 原厂内核 | Linux 5.4.246 |
| 目标系统 | ImmortalWrt 25.12.1 |
| 目标内核 | Linux 6.12.94 |
| 操作电脑 | macOS 27.0 |
| 有线接口 | en7,不同 Mac 可能是 en5、en6 等 |
刷机前原厂系统的 SSH 和 Telnet 都是开放的。原厂 SSH 用户名为 useradmin,密码与设备管理密码一致。本文不会记录真实密码,后面的命令都以交互输入密码为准。
先说结论和关键风险
这次刷机最重要的几个结论:
- ImmortalWrt 25.12.1 官方镜像可以在这台 2GB 版上识别约 1.94GiB 内存,不需要额外编译 2GB 专用固件。
- 首刷只替换
FIP,保留原厂BL2和Factory。 - 不要刷下载目录中的
preloader.bin。它对应 BL2,写错后通常需要串口或编程器恢复。 - 新 U-Boot 没有 Web 恢复页面,恢复流程是由路由器主动从
192.168.1.254的 TFTP 服务器下载 initramfs。 - 擦除
ubi前必须先把 TFTP 环境准备好并在 Mac 本机完成下载测试。 - 原厂
Factory通常包含无线校准、设备 MAC 等唯一数据,不能使用别人的备份替换。
建议全程使用有线连接,关闭 Mac 自动休眠。执行 mtd write、mtd erase、sysupgrade 时不要断电。
下载 ImmortalWrt 固件
使用 ImmortalWrt Firmware Selector:
ImmortalWrt Firmware Selector - Netcore N60 Pro 25.12.1
页面会提供四个文件:
immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-bl31-uboot.fip
immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-preloader.bin
immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-squashfs-sysupgrade.itb
本次只会使用:
bl31-uboot.fip:替换原厂 FIP;initramfs-recovery.itb:通过 TFTP 临时启动;squashfs-sysupgrade.itb:安装正式系统。
preloader.bin 不使用。
我的下载目录是:
/Users/VanJay/Downloads/ImmortalWrt-25.12.1
校验下载文件
先在 Mac 上计算 SHA-256:
shasum -a 256 /Users/VanJay/Downloads/ImmortalWrt-25.12.1/*
ImmortalWrt 25.12.1 对应的官方哈希为:
64c1a2def2ca957e17a1fca31c350eb6fa45f48328ead9ce86f8e5a13787654e immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-bl31-uboot.fip
6b70a063e5699c73a891a759c04b1454be154cb716d599d51510af066134d504 immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
33bc88b3f9fe8f7f5d6ce6ff167cde3c686c35ac23dea81fba837cfd896ceb6d immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-preloader.bin
c8628275e344ec7a3482f13c8316187d3ba0eea05fa71192b9ef5577bafac0d1 immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-squashfs-sysupgrade.itb
哈希不一致时不要继续。重新下载,直到与官方发布页完全一致。
确认原厂系统和分区布局
先登录原厂系统:
ssh useradmin@路由器IP
检查系统和 MTD:
uname -a
cat /proc/mtd
free -h
我这台 2GB 版的原厂分区如下:
dev: size erasesize name
mtd0: 08000000 00020000 "spi0.1"
mtd1: 00100000 00020000 "BL2"
mtd2: 00080000 00020000 "u-boot-env"
mtd3: 00200000 00020000 "Factory"
mtd4: 00200000 00020000 "FIP"
mtd5: 07280000 00020000 "ubi"
对应关系:
| 分区 | 大小 | 用途 | 是否允许在本流程写入 |
|---|---|---|---|
spi0.1 |
128MiB | 整片 NAND 的 MTD 数据区 | 否 |
BL2 |
1MiB | Preloader/早期引导 | 否 |
u-boot-env |
512KiB | 原厂 U-Boot 环境 | 否 |
Factory |
2MiB | MAC、无线校准等设备数据 | 绝对不要写 |
FIP |
2MiB | BL31 + U-Boot | 是,仅写官方 FIP |
ubi |
114.5MiB | 原厂系统和数据卷 | 会擦除 |
如果自己的 /proc/mtd 与此处不一致,应停止操作,重新确认硬件批次和适配情况。
备份原厂系统
收集系统信息
所有临时文件都写进 /tmp,不会向 NAND 增加额外写入:
mkdir -p /tmp/n60pro-backup
cd /tmp/n60pro-backup
cat /proc/mtd > proc-mtd.txt
uname -a > uname.txt
cat /proc/meminfo > meminfo.txt
cat /proc/cmdline > cmdline.txt
dmesg > dmesg.txt
备份全部 MTD 数据
使用只读设备节点备份:
dd if=/dev/mtd0ro of=mtd0_spi0.1.bin bs=128k
dd if=/dev/mtd1ro of=mtd1_BL2.bin bs=128k
dd if=/dev/mtd2ro of=mtd2_u-boot-env.bin bs=128k
dd if=/dev/mtd3ro of=mtd3_Factory.bin bs=128k
dd if=/dev/mtd4ro of=mtd4_FIP.bin bs=128k
dd if=/dev/mtd5ro of=mtd5_ubi.bin bs=128k
sync
sha256sum *.bin > SHA256SUMS
ls -lh
cat SHA256SUMS
预期文件大小:
mtd0_spi0.1.bin 128 MiB
mtd1_BL2.bin 1 MiB
mtd2_u-boot-env.bin 512 KiB
mtd3_Factory.bin 2 MiB
mtd4_FIP.bin 2 MiB
mtd5_ubi.bin 114.5 MiB
这里的 dd 备份是 MTD 数据区备份,不包含 NAND OOB/ECC 的取证级原始信息。对于本流程中的逻辑分区恢复已经很有价值;若系统额外提供 nanddump,也可以再做一份包含 OOB 的底层备份,但不要用不熟悉的参数直接恢复。
打包备份
cd /tmp
tar -czf n60pro-2g-original-backup.tar.gz n60pro-backup
sha256sum n60pro-2g-original-backup.tar.gz
ls -lh n60pro-2g-original-backup.tar.gz
注意:/tmp 是内存文件系统,重启就会丢失,必须立刻复制到 Mac。
从 Mac 拉回备份
新版本 macOS 的 scp 默认使用 SFTP,而原厂系统没有 /usr/libexec/sftp-server,直接执行可能报错:
ash: /usr/libexec/sftp-server: not found
scp: Connection closed
可以强制使用旧版 SCP 协议:
mkdir -p ~/Downloads/N60Pro-2G-Backup
scp -O useradmin@路由器IP:/tmp/n60pro-2g-original-backup.tar.gz \
~/Downloads/N60Pro-2G-Backup/
如果路由器连旧版 scp 服务端命令也没有,可以直接通过 SSH 标准输出传输二进制文件:
ssh -T useradmin@路由器IP \
'cat /tmp/n60pro-2g-original-backup.tar.gz' \
> ~/Downloads/N60Pro-2G-Backup/n60pro-2g-original-backup.tar.gz
在 Mac 上校验备份
cd ~/Downloads/N60Pro-2G-Backup
ls -lh n60pro-2g-original-backup.tar.gz
shasum -a 256 n60pro-2g-original-backup.tar.gz
tar -tzf n60pro-2g-original-backup.tar.gz
Mac 算出的归档哈希必须与路由器输出一致,tar -tzf 也必须能列出所有分区文件且不报错。
建议至少保存两份备份,分别放在不同磁盘或 NAS 上。尤其要保护好:
mtd1_BL2.bin
mtd2_u-boot-env.bin
mtd3_Factory.bin
mtd4_FIP.bin
mtd5_ubi.bin
理解 TFTP 恢复流程
替换 FIP 并擦除 ubi 后,路由器暂时没有可启动的正式系统。新 U-Boot 会主动执行 tftpboot,从另一台电脑下载 initramfs。
N60 Pro 的官方 U-Boot 默认网络参数是:
路由器/U-Boot IP:192.168.1.1
TFTP 服务器 IP:192.168.1.254
恢复文件名:immortalwrt-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
因此 Mac 需要临时承担两个角色:
- 有线网卡增加
192.168.1.254/24地址; - 通过 macOS 自带的
tftpd提供恢复镜像。
这不是把系统安装到 Mac,只是让路由器在没有系统时能取到一个临时启动镜像。
在 macOS 上准备 TFTP
确认有线接口名称
route -n get default
ifconfig
我的有线接口是 en7。后文的 en7 必须替换为自己实际使用的接口。
复制并重命名恢复镜像
U-Boot 要求的文件名没有版本号,所以不能直接保留下载文件原名:
FW=/Users/VanJay/Downloads/ImmortalWrt-25.12.1
sudo cp \
"$FW/immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb" \
/private/tftpboot/immortalwrt-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
sudo chmod 644 \
/private/tftpboot/immortalwrt-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
为 Mac 增加临时地址
sudo ifconfig en7 alias 192.168.1.254 netmask 255.255.255.0
这是增加地址别名,不会删除 Mac 当前的地址。检查路由:
ifconfig en7 | grep '192.168.1.254'
route -n get 192.168.1.1 | grep interface
第二条应该显示:
interface: en7
启动 macOS 自带 TFTP 服务
sudo launchctl enable system/com.apple.tftpd
sudo launchctl bootstrap system /System/Library/LaunchDaemons/tftp.plist
如果第二条提示服务已经加载,可以忽略。
如果 macOS 防火墙已经开启,放行 tftpd:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/tftpd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/tftpd
必须先做本机 TFTP 测试
rm -f /tmp/n60pro-tftp-test.itb
tftp 127.0.0.1 <<'EOF'
binary
get immortalwrt-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb /tmp/n60pro-tftp-test.itb
quit
EOF
shasum -a 256 /tmp/n60pro-tftp-test.itb
必须能够完整接收 14680064 字节,并得到:
6b70a063e5699c73a891a759c04b1454be154cb716d599d51510af066134d504
如果本机测试不通过,绝对不要擦除路由器的 ubi。
上传并刷入 FIP
上传 FIP 到原厂系统
仍然在 Mac 上执行:
FW=/Users/VanJay/Downloads/ImmortalWrt-25.12.1
ssh -T useradmin@路由器IP \
'cat > /tmp/immortalwrt-bl31-uboot.fip' \
< "$FW/immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-bl31-uboot.fip"
SSH 可能提示未使用 post-quantum key exchange,这只是原厂旧 SSH 服务的能力警告,不影响当前局域网传输。
在路由器上检查:
ls -l /tmp/immortalwrt-bl31-uboot.fip
sha256sum /tmp/immortalwrt-bl31-uboot.fip
预期:
大小:1105236 bytes
SHA-256:64c1a2def2ca957e17a1fca31c350eb6fa45f48328ead9ce86f8e5a13787654e
写入 FIP
再次确认原厂 FIP 备份还在:
ls -l /tmp/n60pro-backup/mtd4_FIP.bin
然后执行真正的写入:
mtd write /tmp/immortalwrt-bl31-uboot.fip FIP
sync
写完不要急着擦除 ubi,先从 MTD 回读相同长度并计算哈希:
dd if=/dev/mtd4ro of=/tmp/fip-readback.bin bs=1105236 count=1
sha256sum /tmp/fip-readback.bin
必须仍然得到:
64c1a2def2ca957e17a1fca31c350eb6fa45f48328ead9ce86f8e5a13787654e
如果哈希不一致,不要擦除 ubi,也不要重启。应立即停止并检查写入过程,必要时从当前仍在运行的原厂系统恢复原厂 FIP。
擦除原厂 ubi
只有 FIP 回读哈希一致才执行:
mtd erase ubi
sync
执行到这里,原厂系统已经被擦除。不要再随意断开 Mac 的 TFTP 服务。
通过 TFTP 启动 initramfs
可以在 Mac 的另一个终端监视 TFTP 请求:
sudo tcpdump -ni en7 'udp port 69'
然后:
- 拔掉路由器电源;
- 按住
RESET; - 重新插电,继续按住约 10 秒后松开;
- 保持网线连接原来的 LAN 口;
- 等待路由器从
192.168.1.254下载约 14MB 的 initramfs; - 再等待约 1 至 2 分钟启动临时系统。
如果 U-Boot 启动正常,tcpdump 会看到来自 192.168.1.1 的 TFTP 请求。
测试连接:
ping 192.168.1.1
能通后登录:
ssh-keygen -R 192.168.1.1
ssh root@192.168.1.1
initramfs 通常还没有 root 密码。
验证临时系统和 2GB 内存
先不要立即 sysupgrade,验证识别情况:
free -h
cat /proc/mtd
ubus call system board
本机实测结果:
Mem: 2030408 KB
model: Netcore N60 Pro
board_name: netcore,n60-pro
rootfs_type: initramfs
version: 25.12.1
kernel: 6.12.94
也就是全部 2GB 内存已经识别,无需自行修改设备树或重新编译固件。
刷入新 U-Boot 后,MTD 名称和 ubi 大小会变成:
mtd0: 00100000 00020000 "bl2"
mtd1: 00080000 00020000 "u-boot-env"
mtd2: 00200000 00020000 "factory"
mtd3: 00200000 00020000 "fip"
mtd4: 07a80000 00020000 "ubi"
新的 U-Boot 将 NAND 尾部空间也纳入 ubi,所以这里的 ubi 比原厂系统显示得更大,这是适配设计的一部分。
安装正式 ImmortalWrt
上传 sysupgrade 镜像
Mac 执行:
FW=/Users/VanJay/Downloads/ImmortalWrt-25.12.1
ssh -T root@192.168.1.1 \
'cat > /tmp/immortalwrt-sysupgrade.itb' \
< "$FW/immortalwrt-25.12.1-mediatek-filogic-netcore_n60-pro-squashfs-sysupgrade.itb"
路由器中验证:
ls -l /tmp/immortalwrt-sysupgrade.itb
sha256sum /tmp/immortalwrt-sysupgrade.itb
必须是:
大小:18047252 bytes
SHA-256:c8628275e344ec7a3482f13c8316187d3ba0eea05fa71192b9ef5577bafac0d1
先做兼容性检查
sysupgrade -T /tmp/immortalwrt-sysupgrade.itb
如果出现镜像不兼容、校验失败或平台检查失败,停止操作。不要通过 -F 强制刷入。
正式写入
检查通过后执行:
sysupgrade -n /tmp/immortalwrt-sysupgrade.itb
-n 表示不保留 initramfs 临时配置。命令执行后 SSH 会断开,这是正常现象。
此时:
- 不要断电;
- 不要按 RESET;
- 至少等待 5 分钟;
- 暂时不要关闭 Mac 的 TFTP 服务,以便正式系统启动失败时仍可恢复。
验证正式系统
路由器默认地址仍是:
http://192.168.1.1/
重新登录前清理旧 SSH Host Key:
ping 192.168.1.1
ssh-keygen -R 192.168.1.1
ssh root@192.168.1.1
执行:
ubus call system board
free -h
df -h
mount | grep ' / '
本机正式系统的关键结果:
rootfs_type: squashfs
MemTotal: 2030412 KB
/overlay: 86.8M,总可用约 82.3M
根目录: overlayfs:/overlay
df -h 中 /dev/root 或 /rom 显示 100% 是正常现象。它是只读 squashfs,不是磁盘写满;真正可写的数据位于 /overlay。
立即设置管理密码:
passwd
检查 WAN 和 DNS
默认 WAN 使用 DHCP。将上级网络接入标有 WAN 的接口后检查:
ubus call network.interface.wan status
ping -c 3 1.1.1.1
nslookup github.com
正常状态应满足:
- WAN
up: true; - 能获得 IPv4 地址和默认路由;
- 能 Ping 通公网 IP;
- DNS 能解析
github.com。
如果公网 IP 能通但域名不能解析,应先检查 WAN 下发的 DNS,或在 LuCI 中为 WAN 手动指定可靠 DNS。
安装 iStore
ImmortalWrt 25.12.1 使用 apk 包管理器。当前 iStore 官方安装脚本已经兼容 ARM64 和 apk。
在路由器执行:
apk update
cd /tmp
wget -O istore-reinstall.run \
https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run
chmod 755 istore-reinstall.run
./istore-reinstall.run
安装完成后检查:
apk info | grep -E 'luci-app-store|luci-lib-taskd|taskd'
/etc/init.d/taskd enable
/etc/init.d/taskd restart
rm -f /tmp/luci-indexcache
rm -rf /tmp/luci-modulecache
/etc/init.d/uhttpd restart
强制刷新浏览器,LuCI 菜单中应出现 iStore。
如果路由器直接下载 GitHub 文件很慢,可以在 Mac 上下载,再通过 SSH 传入:
curl -L \
https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run \
-o /tmp/istore-reinstall.run
ssh -T root@192.168.1.1 \
'cat > /tmp/istore-reinstall.run' \
< /tmp/istore-reinstall.run
然后在路由器执行:
chmod 755 /tmp/istore-reinstall.run
/tmp/istore-reinstall.run
需要注意:2GB 是运行内存,不是闪存。内部 overlay 只有约 82MB 可用,iStore 本身可以安装,但 Docker、下载、影音等大型应用应使用 USB 3.0 外置存储。不要把大型容器和数据目录直接放进 NAND。
安装 Argon 主题
ImmortalWrt 默认的 Bootstrap 主题比较朴素。官方 25.12.1 软件源已经提供 Argon,不需要从第三方网盘下载,也不要安装为旧版 OpenWrt 打包的 IPK。
在 LuCI 中打开:
系统 -> 软件包
先点击“更新列表”,搜索并安装:
luci-theme-argon
本机安装到的版本为:
2.4.3-r20250722
也可以在 SSH 中执行等价命令:
apk update
apk add luci-theme-argon
安装完成后强制刷新 LuCI。页面底部出现 ArgonTheme v2.4.3,并且页面加载 /luci-static/argon/css/cascade.css,说明主题已经启用。
我保留了原来的 Bootstrap 主题作为回退,不建议为了省几百 KB 将其删除。如果 Argon 显示异常,可进入:
系统 -> 系统 -> 语言和界面 -> 主题
临时切回 Bootstrap。若只是浏览器缓存旧样式,在 Mac 上使用 Command + Shift + R 强制刷新即可。
安装 OpenClash
使用 ImmortalWrt 官方软件源安装
25.12.1 的官方软件源中已经有 luci-app-openclash,本机无需手动下载 GitHub Release,也避免了 IPK 与当前 apk 包管理器或内核版本不兼容的问题。
进入:
系统 -> 软件包
在“可用”列表中搜索:
luci-app-openclash
本机安装的版本是:
luci-app-openclash 0.47.075
点击“安装”后,LuCI 会同时解析并安装 Bash、Ruby YAML、ip-full、TUN、TPROXY 等依赖。本次提示共安装 23 个软件包,预计占用约 9.93MiB。不要勾选“允许覆盖冲突的包文件”。
对应的 SSH 命令为:
apk update
apk add luci-app-openclash
本次 LuCI 在等待 apk install 时曾显示前端请求超时,但后台安装其实已经完成。遇到相同情况不要立即重复点击,先刷新页面,再到“已安装”中搜索 openclash。看到操作按钮变成“移除”,并且 overlay 使用量增加,才能确认安装成功。
让 LuCI 加载新菜单
安装后如果“服务”菜单中没有 OpenClash,可先清理 LuCI 缓存并重启 Web 服务:
rm -f /tmp/luci-indexcache
rm -rf /tmp/luci-modulecache
/etc/init.d/uhttpd restart
如果菜单仍未出现,再正常重启一次路由器。重启后路径应为:
服务 -> OpenClash
本机重启后成功加载菜单,OpenClash 显示 Meta 运行中,内核为 Mihomo,Fake-IP 增强模式、控制面板和连通性检测均正常。
首次配置注意事项
OpenClash 只是客户端,安装软件包不等于已经配置代理。还需要在以下任一位置添加自己的配置:
服务 -> OpenClash -> 配置订阅
服务 -> OpenClash -> 配置管理
订阅地址相当于账号凭据,不要写入博客、截图、Git 仓库或发给他人。添加配置后先检查:
- “运行状态”显示
Meta 运行中; - 配置文件选择正确;
- GitHub、YouTube 等连通性测试正常;
- 不使用 OpenClash 时可以关闭总开关,避免代理规则影响故障排查;
- 升级 OpenClash 插件、Mihomo 核心和配置文件是三件不同的事,不要混淆。
本机安装后 overlay 从约 11.74MiB 增加到约 24.18MiB,仍剩余约 62.62MiB。规则集和日志会继续占用空间,应定期清理,不要把大量订阅备份长期留在 NAND。
开启并验证 IPv6
先判断上游是否提供 IPv6-PD
不要看到 WAN6 有 IPv6 地址就直接认为 LAN 客户端也能使用 IPv6。先在 SSH 中检查:
ubus call network.interface.wan6 status
本机的 WAN6 已通过 DHCPv6 获得公网地址和 IPv6 默认网关,但返回结果中的 ipv6-prefix 为空。接口页面也只显示一个 /128 地址和 WAN 链路上的 /64 地址,没有可分配给 LAN 的委派前缀。
这是典型的二级路由场景:上级路由器提供 IPv6,但没有向 N60 Pro 下发 Prefix Delegation。此时继续使用默认的 RA Server 模式,LAN 通常只能拿到 fdxx: ULA 地址,无法获得公网 IPv6。正确做法是将上级 /64 通过 RA、DHCPv6 和 NDP 中继到下游。
如果自己的 ipv6-prefix 中已经出现 /56、/60 或可用的 /64 委派前缀,则应优先使用正常的前缀委派和 RA Server,不要照抄下面的 Relay 配置。
配置 LAN 为中继下游
打开:
网络 -> 接口 -> lan -> 编辑 -> DHCP 服务器 -> IPv6 设置
设置:
| 选项 | 值 |
|---|---|
| 指定的主接口 | 不勾选 |
| RA 服务 | 中继模式 |
| DHCPv6 服务 | 中继模式 |
| NDP 代理 | 中继模式 |
| 学习路由 | 保持勾选 |
点击弹窗中的“保存”,暂时不要单独应用,继续配置 WAN6。
配置 WAN6 为中继主接口
打开:
网络 -> 接口 -> wan6 -> 编辑 -> DHCP 服务器
如果页面提示“本接口未配置 DHCP 服务器”,先点击“配置 DHCP 服务器”。这里的“忽略此接口”只针对 dnsmasq 的普通 DHCP 服务,不妨碍 odhcpd 执行 IPv6 中继。
进入“IPv6 设置”后设置:
| 选项 | 值 |
|---|---|
| 指定的主接口 | 勾选 |
| RA 服务 | 中继模式 |
| DHCPv6 服务 | 中继模式 |
| NDP 代理 | 中继模式 |
| 学习路由 | 保持勾选 |
保存后点击页面底部“保存并应用”。应用期间 LAN 和 WAN6 会短暂重启,IPv4 管理地址仍保持 192.168.1.1。
以上 LuCI 操作对应的 UCI 配置如下。全新安装时也可以通过 SSH 执行:
uci set dhcp.lan.ra='relay'
uci set dhcp.lan.dhcpv6='relay'
uci set dhcp.lan.ndp='relay'
uci set dhcp.wan6='dhcp'
uci set dhcp.wan6.interface='wan6'
uci set dhcp.wan6.ignore='1'
uci set dhcp.wan6.master='1'
uci set dhcp.wan6.ra='relay'
uci set dhcp.wan6.dhcpv6='relay'
uci set dhcp.wan6.ndp='relay'
uci commit dhcp
/etc/init.d/odhcpd restart
ifup wan6
在 Mac 上验证 IPv6
配置应用后,重新插拔网线不是必须的;如果地址没有立即刷新,可以关闭再开启一次 Mac 的有线网络接口。
检查 en7,实际接口名按自己的 Mac 修改:
ifconfig en7
route -n get -inet6 default
ping6 -c 3 2001:4860:4860::8888
本机验证结果满足:
en7除fe80::链路本地地址和fdxx:ULA 外,还获得了240e:开头的公网/64地址;- IPv6 默认网关指向 N60 Pro 的 LAN 链路本地地址;
- 向 Google IPv6 DNS 发送 3 个 ICMPv6 数据包全部收到响应,丢包率为 0%。
公网 IPv6 地址和前缀可能随运营商重拨变化,文章和截图中应只保留脱敏前缀。Relay 模式依赖上级路由的 RA;如果将来上级开始下发 PD,建议改回标准前缀委派模式。
清理 Mac 的临时 TFTP 环境
确认正式系统已经多次正常启动后,再清理:
sudo launchctl bootout system/com.apple.tftpd
sudo launchctl disable system/com.apple.tftpd
sudo ifconfig en7 -alias 192.168.1.254
sudo rm -f \
/private/tftpboot/immortalwrt-mediatek-filogic-netcore_n60-pro-initramfs-recovery.itb
rm -f /tmp/n60pro-tftp-test.itb
如果之前将 tftpd 加入 macOS 防火墙,可以按需保留或删除对应规则。
常见问题
scp 报 sftp-server 不存在
原因是新版 macOS scp 默认使用 SFTP,而原厂路由器没有 SFTP Server。
解决方式:
scp -O useradmin@路由器IP:/远端文件 /本地目录/
或者使用:
ssh -T useradmin@路由器IP 'cat /远端文件' > /本地文件
按 RESET 后能 Ping 通,但没有 Web 恢复页
这是正常现象。N60 Pro 的 ImmortalWrt/OpenWrt U-Boot 没有 Web Failsafe 页面,它使用 TFTP Client 主动下载恢复镜像。
重点检查:
- Mac 是否真正在
192.168.1.254; - TFTP 是否已启动;
- 文件名是否精确为无版本号的名称;
- macOS 防火墙是否阻止
tftpd; - 网线是否接在 LAN 口;
tcpdump是否看到 UDP 69 请求。
TFTP 本机测试成功,路由器还是下载不到
本机访问 127.0.0.1 只证明 tftpd 能读文件,不代表防火墙允许外部请求。应确认接口路由并放行服务:
route -n get 192.168.1.1
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/tftpd
sudo tcpdump -ni en7 'udp port 69'
/rom 显示 100%
正常。/rom 是只读 squashfs 镜像,设计上就是固定大小。查看可写空间应关注:
df -h /overlay
2GB 版会不会只能识别 512MB
本机实际测试 ImmortalWrt 25.12.1 可以识别:
MemTotal: 2030412 KB
LuCI 显示约 1.94 GiB,所以不需要额外构建 2GB 固件。其它版本或第三方编译版仍应以 free -h 的实际结果为准。
刷机后 SSH 提示 Host Key 改变
系统已经更换,SSH Host Key 改变是正常的。确认当前连接的确是自己的路由器后执行:
ssh-keygen -R 192.168.1.1
iStore 安装后菜单没有出现
清理 LuCI 缓存并重启 Web 服务:
rm -f /tmp/luci-indexcache
rm -rf /tmp/luci-modulecache
/etc/init.d/uhttpd restart
关于恢复原厂
这次已经备份了原厂 BL2、U-Boot Env、Factory、FIP 和 UBI,但我没有在本机执行完整的原厂回刷验证,因此这里不把未经验证的恢复命令写成“一键操作”。
恢复原厂的大体原则是:
- 使用当前 U-Boot 通过 TFTP 启动 initramfs,避免在正在使用 NAND rootfs 时写系统分区;
- 先恢复自己的原厂
mtd5_ubi.bin; - 再恢复自己的原厂
mtd4_FIP.bin; - 保留本机 Factory 和 BL2,不使用网上他人的备份;
- 写入后重新校验,再断电重启;
- 若 U-Boot、BL2 或 NAND 坏块处理出现异常,应改用串口确认启动日志,而不是连续盲刷。
特别注意:原厂和新 U-Boot 展示的 MTD 编号不同,恢复时必须按分区名称、大小和当前 /proc/mtd 判断,不能只照抄 mtd4、mtd5 编号。
总结
这次刷机最花时间的不是执行 mtd write,而是把恢复路径在写入前验证完整:
- 固件来源和 SHA-256 正确;
- 原厂所有关键分区有本机备份;
- 备份已经复制到 Mac 且归档哈希一致;
- TFTP 文件名、地址和服务均已自测;
- FIP 写入后完成了 MTD 回读校验;
- 先用 initramfs 验证硬件,再执行 sysupgrade;
- 正式系统启动后确认 2GB 内存、overlay、WAN 和 DNS。
- 使用官方软件源安装 Argon 与 OpenClash,保留原主题作为回退;
- 根据上游没有 IPv6-PD 的实际情况配置 Relay,并从 LAN 客户端验证公网 IPv6。
只要不省略这些检查点,N60 Pro 的刷机路径是比较清晰的。最终 ImmortalWrt 25.12.1 正确识别全部 2GB 内存,iStore、Argon、OpenClash 和双栈网络均可正常工作,也为后续挂载 USB 存储和扩展家庭网络服务留下了空间。