【05】小米路由器mini 自制NAS

提要

正好手头有一个闲置的小米路由器mini。打算把这个路由器刷成PandoraBox系统,然后买一个机械硬盘,配套一个Orico的透明硬盘盒,接在上面作为文件备份的私有云。

目前最麻烦的问题是小米路由器mini只有一个USB2.0的接口,速度慢供电不足,但是勉强还算能用,也不像USB3.0一样干扰2.4G频段。

希望实现的功能有:Syncthing实现24×7的云端文件同步;Samba/sftp实现的局域网文件访问;远程访问文件。

过程

1. 小米路由器mini刷机

刷机很简单,首先在路由器管理界面刷上小米官方的开发版固件,下载地址如下:

http://www1.miwifi.com/miwifi_download.html

然后申请SSH权限:

https://d.miwifi.com/rom/ssh

登录以后就可以看到自己账户绑定的路由器。选择对应的下载工具包并记住root密码,根据网页上的指示完成操作。完成后就可以使用路由器的SSH了。


接下来就可以开始刷入PandoraBox了。先下载好小米路由器mini对应的固件:

http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/stable/

里面一个是r1024,一个是r512版本。按照网上博客的说法,r512集成了更多的包,r1024更加纯净。为了省事起见,我们选择刷入r512版本。

首先把固件用scp传入路由器的存储空间中。由于没有sftp,所以只能用scp。指令中的文件名、IP、路径均应按照实际情况进行调整。

scp D:\pandorabox.bin [email protected]:/tmp

然后刷入这个固件。

mtd -r write /tmp/pandorabox.bin OS1

命令行会有一个方括号里有w和e不断跳动。等待一段时间后固件会自动完成刷入。

刷机完成后,路由器的指示灯会变成很骚的基佬紫,这时候就可以连上一个开放的名字里有PandoraBox的WiFi了。连上路由器以后,管理页面IP在192.168.1.1,登录账户名为root,密码是admin。

2. 在PandoraBox中设置无线中继

无线中继的目的在于,使得这个路由器也变成一个无线客户端,毕竟学校里接网线并不方便。直接连接已有的WiFi获得网络再发射WiFi,让这个迷你NAS的便携性又上了一层楼。

设置方法可以直接参考这篇博客,写的非常全面:

https://blog.csdn.net/lvshaorong/article/details/53230545

由于小米路由器是双频WiFi,所以可以采用混合方案三和方案五。

在设置的时候也碰到了一个很神奇的Bug(Feature),2.4G和5G频段不管哪个关掉,都会导致整个路由器直接发不出信号。我本来打算是使用方案五,用2.4G的网卡接收信号,然后5G的发射。结果死活发射不了,必须也设置一个2.4G的信号发射才行。虽然强迫症有些不爽,不过也无大碍。

3. 各种骚操作

  1. 路由器关机

    小米路由器mini并没有提供直接关机的方法,需要登入SSH,然后使用 poweroff 指令。

    但是经过实际测试,该指令在小米路由器mini上不起作用。poweroffhaltreboot 三个指令均为重启。在PandoraBox (OpenWrt) 上不存在 shutdown 指令。

  2. 更新源

    PandoraBox提供了一个类似apt的包管理,叫做opkg。opkg的默认源都连不上,需要进行替换。以下的源测试可用,可以通过更新opkg.conf或者去路由器管理界面的软件包选项里进行更改。

    dest root /
    dest ram /tmp
    lists_dir ext /var/opkg-lists
    option overlay_root /overlay
    src/gz r2_base http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/base
    src/gz r2_management http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/management
    src/gz r2_oldpackages http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/oldpackages
    src/gz r2_packages http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/packages
    src/gz r2_routing http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/routing
    src/gz r2_telephony http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/telephony
    

    来自 https://www.jianshu.com/p/e6be1279ddfe

  3. 开启sftp

    opkg update
    opkg install openssh-sftp-server
    

    来自 https://openwrt.org/docs/guide-user/services/nas/sftp.server

  4. win10上使用Samba

    要在win10上跳桑巴(误),只需要在文件资源管理器里 右键 -> 添加一个网络位置 就可以添加设置好的Samba服务器了。

  5. 安装Syncthing

    首先自然是下载合适的安装包。小米路由器mini使用的是来自联发科的MT7620A处理器,应当下载mipsle的安装包,即文件名为syncthing-linux-mipsle-v版本号.tar.gz的安装包。下载地址如下:

    https://github.com/syncthing/syncthing/releases

    下载好,就可以把文件夹解压,把解压后的文件夹放入路由器的外置存储(U盘,移动硬盘之类)。例如我的硬盘挂载在/mnt/sda2,解压出来的文件夹命名为syncthing,那么现在Syncthing的可执行文件位置应当是 /mnt/sda2/syncthing/syncthing

    进入syncthing文件夹,输入以下指令就可以运行Syncthing了:

    ./syncthing -gui-address="0.0.0.0:8384" -home="/mnt/sda2/syncthing"

    gui-address是网页管理界面的地址。不设置的话默认是127.0.0.1,无法从外部访问。改成0.0.0.0就可以访问了。

    home是软件设置的放置位置。如果不设置,将会占用不多路由器存储,所以最好设置成外部硬盘。

    当看到 Access the GUI via the following URL: http://127.0.0.1:8384/ 的时候,就说明已经可以通过网页访问管理页面了。如果需要后台运行,只要在命令结尾加上 >/dev/null & 即可,意思是重定向输出到无,并且后台运行。

    到PandoraBox的网页管理界面 系统 -> 启动项 中添加以上指令,即可实现开机启动。

    # Update:用这种方式自启动是利用rc.d中的自启动脚本来实现的。但是Pandorabox执行自启动脚本的时候,仿佛并没有把命令最后的&符号认为是后台挂起,于是自启动脚本会一直在后台常驻不结束,造成下面的脚本无法正常运行。尝试了很久都没有找到两全的解决办法,也许是Pandorabox的bug吧,只能放弃自启动了。

  6. 安装frp做内网穿透

    安装配置方法和正常Linux相同,只需要到Github的Release里下载对应的文件解压,按照文档配置即可。

改进

上述方案的设想非常好,然而出现了一个问题。小米路由器mini采用了联发科的MT7620A处理器,性能弱的一匹,只能完成基本的路由功能。Syncthing比我想象中的要吃性能,特别是需要同步的文件多了以后,进行初始扫描的代价非常高。我挂在Syncthing上大概有15G的文件,做一个全部扫描需要长达两个小时,而且和我的电脑保持显示未同步,估计路由器这头判定文件不同。虽然显示正在同步这15G的文件,但是也没有任何网络上的动静,不知道问题何在,大约是Syncthing的bug。运行Syncthing的时候整个路由器都被拖的非常卡顿,毕竟非常吃CPU和内存。

上述实践证明小米路由器mini的性能差,Syncthing稳定性差Bug多(毕竟是还在开发的开源软件)。于是原本的方案需要改变。目前准备改成以下方案:

  1. Syncthing只用于同步小文件。比如笔记等。
  2. 用frp转发LUCI管理界面,Syncthing管理界面,以及Samba服务。

这样子的话,小米路由器mini就转变为了一个偏存储型轻同步型的文件服务器。之后再利用PandoraBox里现成的包配置下远程BT下载等服务,就可以美滋滋了。

# Update:使用frp转发Samba服务的尝试初步失败。大约是不太行的吧…


本文阅读量
本站访客量