在某位朋友的推荐(忽悠)下从闲鱼上淘了小米ax3600,性价比之王。

早些时间装了宽带,一直用红米AX5,并没有在上面做代理,现在想着将订阅的机场利用起来,实现同一个内网的所有设备连接互联网。

简要的踩坑过程

到手后开始刷机,按照教程进行无分区扩容

过程:

  1. 无分区扩容刷机
  2. 变砖
  3. ttl工具救砖
  4. ttl刷机的几个失败
    1. 使用tftp传输固件包失败
    2. 使用tftp加载到内存后,写入固件到指定分区失败
    3. 由于分区大小不够,尝试刷入小固件重启失败
  5. ttl刷官方固件
    1. 重启后降级连ssh
    2. 扩容教程
    3. 分区扩大后ttl工具刷入准备好的固件包
    4. 重启后依然黄灯
    5. 两个分区都刷同一个固件包成功

不扩容刷入openwrt

与参考链接小米AX3600不扩容刷机OpenWrt教程一致,本部分仅作为个人的笔记与备份

  1. 开启SSH

    1. 路由器控制台降级:刷入旧版固件miwifi_r3600_firmware_5da25_1.0.17.bin

    2. 获取SSH并修改默认密码为admin

      1. 复制路由器后台网址中STOK=
      1
      http://192.168.31.1/cgi-bin/luci/;stok=/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B
      1. 将上面URL中的stok=后面补全为自己路由器网址的

        1. {"code":0}表示成功
      2. 修改默认密码为admin

        1
        http://192.168.31.1/cgi-bin/luci/;stok=/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B

        同样补全stok= 后面内容,{"code":0}表示成功

      至此可以ssh登陆路由器控制台了

  2. 刷机

    1. MacOS直接使用Terminal,Windows可以使用WinSCP/Putty

      1. 将小于29M的ubi格式固件传至tmp根目录下

      2. 运行下面命令:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        nvram set flag_last_success=0
        nvram set flag_boot_rootfs=0
        nvram set flag_boot_success=1
        nvram set flag_try_sys1_failed=0
        nvram set flag_try_sys2_failed=0
        nvram set boot_wait=on
        nvram set uart_en=1
        nvram set telnet_en=1
        nvram set ssh_en=1
        nvram commit
        # 使用ubiformat工具,不经确认地格式化第十二个MTD设备,并使用位于/tmp/目录下的指定UBI格式固件文件
        ubiformat /dev/mtd12 -y -f /tmp/请替换固件包名.ubi
        nvram set flag_last_success=0
        nvram set flag_boot_rootfs=0
        nvram commit
        # 重启
        reboot

    2. 等待一分钟左右蓝灯亮可以登入OpenWrt系统,注意这里的地址变为192.168.10.1 用户名root密码passwd

到这里刷机是成功的,这个固件也很不错了,如果不需要其他扩展,这个双系统还是不错的,

博客作者也给出了切回官方的命令:

1
2
3
fw_setenv flag_last_success 1
fw_setenv flag_boot_rootfs 1
reboot

变砖

我想着刷入朋友编译的固件,

然后就通过路由器控制台的「刷写新的固件」上传.bin文件通过升级,结果,重启后一直黄灯,变砖了。

于是使用官方救砖工具救砖,还是不行,重启循环显示黄灯。

其实这里我应该意识到一件事,切换回官方系统就可以了。

TTL救砖

回忆是珍珠

据上一次通过TTL工具刷路由器还是在上一次,呃,是2016年,那时候还是传说中的土豪金编程器,记得应该是买了个小米路由器mini青春版

工具准备

淘宝上购买TTL工具+杜邦线三种类型的(公对公,母对母,公对母),我的USB转TTL是FT232RL,支持5V/3.3V/1.8V

拆机

小米ax3600非常难拆,4个螺丝分布在底部防滑垫上,第5个在中间贴纸下面。上壳是塑料的卯榫结构,需要用翘片慢慢拆。如果拆坏了也不要紧,使用胶带粘起来就好了。

刷机

这里刷机靠着Benny的教程和他的帮助

连接准备

TTL调到1.8v,将黄色盖帽压到1.8v的位置,然后接线,使用杜邦线将FT232RL的TX 要接路由器的RX,RX接TX,GND接 GND,VCC不接。

VCC,GND,RX,TX

进入screen

电脑端:MacOS直接使用screen,通过系统信息-USB查看信息看到设备名称

路由器通电

1
screen -L /dev/cu.usbserial-A50285BI 115200 –L

然后按回车中断引导,进入screen

正常来说路由器启动后会进入uboot,这里按回车中断了引导,可以进行刷机了。至此,说明电脑通过TTL连接路由器是没有问题了。

准备tftp(照抄Benny)

macOS 自带一个 tftp,使用如下命令启动

1
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist

把后缀是 ubi 的 nand factory 复制到/private/tftpboot中(需要 sudo)

停止tftp可以用这个命令

1
sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist

uboot刷分区(继续抄Benny)

配置环境变量

网线连接电脑和路由器 LAN,电脑设置 IP 192.168.31.100,然后在 uboot 中执行如下命令

1
2
setenv serverip 192.168.31.100
setenv ipaddr 192.168.31.1

加载固件

然后加载固件到内存中

1
tftpboot 1.ubi

此时能看到屏幕上在走进度条,如果你没走,提示 tftp server died 或者卡住了,那多半是 tftp 服务器没配置好。

这里我遇到了两个奇怪的问题,第一个是加载固件的时候,另外一个是出现了这样的 TTTTTT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IPQ807x# tftpboot openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi
ipq807x_eth_halt: done
eth0 PHY0 Down Speed :10 Half duplex
eth0 PHY1 Down Speed :10 Half duplex
eth0 PHY2 up Speed :1000 Full duplex
eth0 PHY3 Down Speed :10 Half duplex
eth0 PHY4 Down Speed :10 Half duplex
eth0 PHY5 Down Speed :10 Half duplex
ipq807x_eth_init: done
Using eth0 device
TFTP from server 192.168.31.100; our IP address is 192.168.31.1
Filename 'openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi'.
Load address: 0x1

Error specified load address not allowed
ipq807x_eth_halt: done

TTTTTT

T应该就是表示timeout了,我的解决办法就是关了Wi-Fi,重新加载。问题出在我家里连接的也是小米家的红米路由器,连接Wi-Fi是地址和设置的服务端重了。

正常的情况是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
IPQ807x# tftpboot 1.ubi
ipq807x_eth_halt: done
eth0 PHY0 Down Speed :10 Half duplex
eth0 PHY1 Down Speed :10 Half duplex
eth0 PHY2 Down Speed :10 Half duplex
eth0 PHY3 up Speed :1000 Full duplex
eth0 PHY4 Down Speed :10 Half duplex
eth0 PHY5 Down Speed :10 Half duplex
ipq807x_eth_init: done
Using eth0 device
TFTP from server 192.168.31.100; our IP address is 192.168.31.1
Filename '1.ubi'.
Load address: 0x44000000
Loading: *
Got TFTP_OACK: TFTP remote port: changes from 69 to 58219
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################################################
2.8 MiB/s
done
Bytes transferred = 41811968 (27e0000 hex)
ipq807x_eth_halt: done

进度条走完之后,会留下一个数字,Bytes transferred = 41811968 (27e0000 hex)也就是固件的大小,同时最开始 Load address: 0x44000000 还会告诉你固件的起始地址,这两个数值很重要,要记下来。

获取分区信息

smeminfo可以获取分区信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
IPQ807x# smeminfo
flash_type: 0x2
flash_index: 0x0
flash_chip_select: 0x0
flash_block_size: 0x20000
flash_density: 0x100000
partition table offset 0x0
No.: Name Attributes Start Size
0: 0:SBL1 0x0000ffff 0x0 0x100000
1: 0:MIBIB 0x0000ffff 0x100000 0x100000
2: 0:QSEE 0x0000ffff 0x200000 0x300000
3: 0:DEVCFG 0x0000ffff 0x500000 0x80000
4: 0:RPM 0x0000ffff 0x580000 0x80000
5: 0:CDT 0x0000ffff 0x600000 0x80000
6: 0:APPSBLENV 0x0000ffff 0x680000 0x80000
7: 0:APPSBL 0x0000ffff 0x700000 0x100000
8: 0:ART 0x0000ffff 0x800000 0x80000
9: bdata 0x0000ffff 0x880000 0x80000
10: crash 0x0000ffff 0x900000 0x80000
11: crash_syslog 0x0000ffff 0x980000 0x80000
12: rootfs 0x0000ffff 0xa00000 0x23c0000
13: rootfs_1 0x0000ffff 0x2dc0000 0x23c0000
14: overlay 0x0000ffff 0x5180000 0x1ec0000
15: rsvd0 0x0000ffff 0x7040000 0x80000

其实这里问题就浮现了,第13分区的大小是35.75M,小于我的固件大小40M,所以下面的步骤无法操作。

那我只能刷一个小的固件,这里我准备重新开始,选择刷入小米官方固件miwifi_r3600_firmware_5da25_1.0.17.bin,然后再回到上面的过程。

清除分区内容

保险起见,先给 rootfs 抹掉,自己对应起始结束地址,我的和Benny不同

1
2
3
4
nand erase 0xa00000 0x23c0000
nand erase 0x2dc0000 0x23c0000
# 对于已经扩容的第13分区, 完全擦除使用下面的
nand erase 0x2dc0000 0x8000000

第一个数是起始地址,第二个数是擦除的大小

写入固件

rootfs_1 中,使用nand write命令,这个命令接受三个参数,分别是固件内存地址,分区起始地址,固件大小。对我来说,写到 rootfs_1 也就是

1
nand write 0x44000000 0x2dc0000 0x1c00000

写到 rootfs 就是

1
nand write 0x44000000 0xa00000 0x1c00000

我这里两个分区都刷入了小米官方固件,然后按照教程刷qsdk扩容

重来

按照上述教程刷成功后,再次使用TTL工具进入screen 通过smeminfo发现第13分区已经扩大到128M了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
IPQ807x# smeminfo
flash_type: 0x2
flash_index: 0x0
flash_chip_select: 0x0
flash_block_size: 0x20000
flash_density: 0x100000
partition table offset 0x0
No.: Name Attributes Start Size
0: 0:SBL1 0x0000ffff 0x0 0x100000
1: 0:MIBIB 0x0000ffff 0x100000 0x100000
2: 0:QSEE 0x0000ffff 0x200000 0x300000
3: 0:DEVCFG 0x0000ffff 0x500000 0x80000
4: 0:RPM 0x0000ffff 0x580000 0x80000
5: 0:CDT 0x0000ffff 0x600000 0x80000
6: 0:APPSBLENV 0x0000ffff 0x680000 0x80000
7: 0:APPSBL 0x0000ffff 0x700000 0x100000
8: 0:ART 0x0000ffff 0x800000 0x80000
9: bdata 0x0000ffff 0x880000 0x80000
10: crash 0x0000ffff 0x900000 0x80000
11: crash_syslog 0x0000ffff 0x980000 0x80000
12: rootfs 0x0000ffff 0xa00000 0x23c0000
13: rootfs_1 0x0000ffff 0x2dc0000 0x8000000
14: overlay 0x0000ffff 0xadc0000 0x1ec0000
15: rsvd0 0x0000ffff 0xcc80000 0x80000
16: 0:WIFIFW 0x0000ffff 0xcd00000 0x900000

这样可以直接按照刷机的步骤再次刷入大的固件,这里我还是将固件都写入了第12、13分区,因为只写一个的话还是黄灯进不去。

然后重启路由,蓝灯进入路由器控制台,救回来了!

并且刷入了目标的固件!

救砖成功

固件体验

这个编译了ShadowSocksR Plus+,支持 SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN 等协议,可以进行订阅,定时刷新以及自动切换节点,这样我就实现了我刷机的目标,同一内网下的所有设备的全部互联网连接。

缺点是访问控制只支持LAN ip级别的筛选,对于特定的硬件设备不能管理,不过问题不大,我使用这个路由器做中继,然后另外一个直连光猫,有互联网需求的连ax3600,没有的连红米。OpenWrt的中继设置参考的这篇:进阶教程之 OpenWrt 无线中继配置指南

总结

其实按照我踩过的坑,比较顺利的路线为首先刷入过渡包进行扩容,然后通过控制台升级;如果控制台变砖了,由于扩容成功,还可以进行ttl直接刷入准备好的固件包。

后续

1

后续就是ssrp的问题,我订阅的节点是解锁了openai的,但是通过电脑直连路由器openai返回我的公网ip,

具体解决看我连不上openai了这篇博文。

另外还有Adblock的问题,ssrp完全不能分流我的广告啊,这下不得不重新刷机了。

2

刷了https://github.com/vonl1/Openwrt_xiaomi_ax3600 0609的包,通过无线连接路由器时需要 输入密码

1234567890 另外登录的地址是10.10.10.1 用户名root 密码boos

他参考的https://github.com/Boos4721/openwrt进行的编译。

上面那个太坑了,比如ssh路由器的管理器密码都不是页面定义的,dropbear重启了也不管用,魔改了不少后门。

找不到表情包来形容我的窘迫了,只能说愿你刷机归来,还是恩山无线

https://www.right.com.cn/forum/thread-8294637-1-1.html 然后在根据群里老哥的帮助终于用上了openclash

3

openclash启用,我的机场使用的是TUN内核,比较简单的图形化操作是在「配置文件管理」中上传内核,内核是从OpenClash的core分支中,master/premium目录下载相应架构的文件,这里不需要解压。

另外一种方法是下载解压、改名之后传到/etc/openclash/core中,记得给权限,改名为clash_tun

另外dev不需要上传,openclash的配置检查是:如果有dev的话会用dev,但是我的机场需要tun。所以可以不传dev,只传tun。

4

openclash的推荐配置:

运行模式:fakeip+增强

代理模式:rule

开完fakeip不要频繁重启路由器,重启了客户端要记得清理dns缓存,这里也可以设置fakeip持久化,禁dns缓存。

5

刷入uboot,具体看这篇文章小米AX3600刷入uboot

参考

  1. 无分区扩容刷机:https://www.ceer.cc/122
  2. 刷入qsdk并扩容rootfs_1分区到128M:https://www.right.com.cn/forum/thread-4631481-1-1.html
  3. Benny的教程:https://dmesg.app/fix-ax3600.html
  4. 进阶教程之OpenWrt 无线中继配置指南
  5. 恩山无线的ImmortalWrt固件