背景
从闲鱼上淘了个二手小米路由,想直接在路由器那里翻墙
刷开发版 ROM
- 去 官网 下载好对应版本的开发版 ROM
- 路由后台管理端 -> 常用设置 -> 系统状态 -> 手动升级 -> 选择上一步下载好的 ROM
- (需要登录小米账号)去 官网 下载 ssh 工具包 & 查看 ssh 登录密码
- (需要提前准备一个 FAT/FAT32 格式的 U 盘)按说明操作后,即可通过终端 ssh 登录路由器后台
刷 Breed web 控制台
略
刷 OpenWRT
刷固件
去 官网 下载对应的固件,带 factory 后缀是第一次刷机用的,sysupgrade 后缀是升级用的
将这个固件拷贝到路由器的 /tmp 目录下,然后 ssh 登录路由器执行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15cd /tmp/
nvram set flag_try_sys1_failed=1
nvram set flag_try_sys2_failed=0
nvram set flag_boot_success=0
nvram commit
mv openwrt-19.07.2-ramips-mt7621-xiaomi_mir3p-squashfs-factory.bin factory.bin
dd if=factory.bin bs=1M count=4 mtd write - kernel1
mtd erase rootfs0
mtd erase rootfs1
mtd erase overlay
dd if=factory.bin bs=1M skip=4 mtd write - rootfs0
reboot
等待路由重启后,再 ssh 到路由器执行:
opkg update
opkg install luci zsh curl wget python3 wget git luci-base luci-compat coreutils-nohup bash iptables dnsmasq-full jsonfilter ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml
安装 clash
去 官网 下载最新版的 ipk 文件
将 luci-app-openclash_0.43.01-beta_all.ipk 拷贝到 /tmp 目录下,然后 ssh 登录路由器执行:
1
2
3
4
5
6先安装一堆依赖,其中有些组件可能上一步已经装过了
opkg install coreutils-nohup bash iptables curl jsonfilter ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml
opkg install dnsmasq-full
手动安装 clash
opkg install /tmp/luci-app-openclash_0.43.01-beta_all.ipk
安装完毕后,重新登录管理端即可在 Services 一栏看到 OpenClash 了
安装 ZeroTier
1 | opkg install zerotier |
挂载硬盘
1 | opkg update |
aria2
1 | opkg update |
samba
1 | opkg update |
问题汇总
组件安装问题
libcap libcap-bin
libcap 系统自带安装好了,但是 libcap-bin 死活没有资源,网上说可以添加 opkg 的官方源,System -> Software -> Configure opkg ,加上下面这行
但是我这照着操作不行,于是我直接去这个源所在网站,把这两个包下下来,然后 scp 到路由器,手动安装:1
2
3
4src/gz snapshots https://downloads.openwrt.org/snapshots/packages/mipsel_24kc/base
接着执行
opkg update
opkg install libcap libcap-bin1
2
3
4
5
6两个库的版本号最好一致,不然又要出幺蛾子
先卸载原来自带的(突然发现自带的版本号反而高一些)
opkg remove libcap
再手动安装
opkg install /tmp/libcap-bin_2.51-1_mipsel_24kc.ipk
opkg install /tmp/libcap_2.51-1_mipsel_24kc.ipk
程序运行问题
启动 clash 后,反复报错: 1
2[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x3bb98c]
panic: runtime error: invalid memory address or nil pointer dereference
先下载内核文件:clash 主界面 -> Global Setting -> 版本更新,将
TUN 和 Game
内核都下载到本地,然后参照界面的说明,将其(重命名后)分别搞到路由器的文件路径:
1
2/etc/openclash/core/clash_tun
/etc/openclash/core/clash_game
接着设置代理方案:clash 主界面 -> Global Setting -> 模式设置 -> 运行模式选最长那个选项(TUN-混合)-> 网络栈类型选(Gvisor)-> 代理模式选(Rule 策略代理)
最后点“应用配置”,过会儿就正常翻墙了,别问,我也不知道为什么,瞎摸索出来的。
UPDATE0
小米路由器 4A 百兆版照着 文档 攻略刷机,其中 mtd
写入那里始终报错: 1
2
3
4
5root@XiaoQiang:/tmp# mv openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bi
n rootfs0.bin
root@XiaoQiang:/tmp# mtd write kernel1.bin kernel1
Could not open mtd device: kernel1
Can't open device for writing!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15root@XiaoQiang:/tmp# cat /proc/mtd
dev: size erasesize name
mtd0: 01000000 00010000 "ALL"
mtd1: 00020000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 00010000 00010000 "crash"
mtd5: 00010000 00010000 "cfg_bak"
mtd6: 00100000 00010000 "overlay"
mtd7: 00c60000 00010000 "OS1"
mtd8: 00b00000 00010000 "rootfs"
mtd9: 00240000 00010000 "disk"
mtd write kernel1.bin Factory
mtd write kernel1.bin OS1
UPDATE1
把砖块寄给小米维修,结果那边说我的路由过了保质期,需要付费维修,一问维修价格比我从闲鱼上买的价格还贵。听着小哥电话里期待的语气,实在不忍心拒绝他,咬牙回了句:那你修吧。