Linux 下玩转小米路由器文件访问

家里有一台小米路由器,而最近个人的主力电脑是 Linux 系统(Ubuntu)。若想在 Linux 下访问小米路由器上的文件,有三种方法可以实现,本文记录这三种方法的具体步骤。

准备工作

在开始介绍三种访问方法之前,有一些相同的准备工作需要做,即不管使用哪种方法,都需要先完成这些准备工作。

同一个局域网

Linux 系统需要和小米路由器在同一个局域网中。现今主流的 Linux 系统都支持无线局域网了,所以只要将 Linux 系统连接小米路由器对应的 Wi-Fi ,即可实现同处一个局域网的要求。

开启 Samba 服务

想要让 Linux 设备能够访问小米路由器上的文件,需要开启小米路由器上的 Samba 服务。在手机的「小米路由器」 app 的「工具箱」页面,找到 Samba 插件:

进入 Samba 并允许后,确认 Samba 协议已开启:

从上图可见,小米电视和小米盒子的正常工作也是依赖于 Samba 服务的。

开启全盘访问

除了 Samba 服务之外,还需要打开 Linux 对应设备的「路由全盘访问」权限。

首先,在 app 的「路由」页面,找到 Linux 系统对应的设备名称,如 Yubuntu:

点击此设备进入设置页面,开启「路由全盘访问」权限:

这样,app 上的设置就完成了。另外提前说明一点,全盘访问权限并不是必须的,但有了这个权限会方便很多,下文会详细说明。

方法一:通过 smbclient 访问

由前面的准备工作可知,小米路由器上的文件是通过 Samba 服务对外提供访问的,小米路由器就是一台 Samba 服务器,而 Linux 设备是 Samba 客户端,因此可以使用 smbclient 命令来访问。

smbclient 命令提供了一种类似 ftp 命令的方式访问 Samba 服务器。一台 Samba 服务器可以提供诸如磁盘、打印机等不同的共享服务,先使用 smbclient 命令的 -L 选项看看小米路由器提供了哪些共享服务(其中 192.168.31.1 是小米路由器的默认 IP 地址):

$ smbclient -L 192.168.31.1
WARNING: The "syslog" option is deprecated
Enter yestyle's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]

Sharename       Type      Comment
---------       ----      -------
XiaoMi          Disk
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]

Server               Comment
---------            -------
WECHANGER            Share from router
YE-PC

Workgroup            Master
---------            -------
WORKGROUP            WECHANGER

其中可以看到小米路由器的域名称(WORKGROUP)、操作系统类型(Unix)及 Samba 服务器的版本(4.0.21)等信息,重点关注 SharenameType 两列,可以看到小米路由器提供了一个叫做 XiaoMiDisk 共享服务即磁盘共享服务,我们要访问的就是这个磁盘服务。

在准备工作部分,提到「全盘访问权限」不是必须的,这里看看假如没有全盘访问权限,可以访问的服务有何不同。

$ smbclient -L 192.168.31.1
WARNING: The "syslog" option is deprecated
Enter yestyle's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]

Sharename       Type      Comment
---------       ----      -------
torrent         Disk
下载             Disk
共享             Disk
图片             Disk
文档             Disk
视频             Disk
音乐             Disk
IPC$            IPC       IPC Service (Share from router)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]

Server               Comment
---------            -------
WECHANGER            Share from router
YE-PC

Workgroup            Master
---------            -------
WORKGROUP            WECHANGER

可以看到,在没有全盘访问权限时,小米路由器将各个子目录分别作为一个磁盘服务,将访问权限做了更细粒度的划分。但这将对我们访问整个路由器的文件造成不便,因此为方便起见,建议开启全盘访问权限。

前面只列出了小米路由器提供的共享服务名称,接下来看看具体如何访问小米路由器上的文件。

$ smbclient //192.168.31.1/XiaoMi
WARNING: The "syslog" option is deprecated
Enter yestyle's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
smb: \> ?
?              allinfo        altname        archive        backup  
blocksize      cancel         case_sensitive cd             chmod  
chown          close          del            dir            du  
echo           exit           get            getfacl        geteas  
hardlink       help           history        iosize         lcd  
link           lock           lowercase      ls             l  
mask           md             mget           mkdir          more  
mput           newer          notify         open           posix  
posix_encrypt  posix_open     posix_mkdir    posix_rmdir    posix_unlink  
print          prompt         put            pwd            q  
queue          quit           readlink       rd             recurse  
reget          rename         reput          rm             rmdir  
showacls       setea          setmode        scopy          stat  
symlink        tar            tarmode        timeout        translate  
unlock         volume         vuid           wdel           logon  
listconnect    showconnect    tcon           tdis           tid  
logoff         ..             !

输入 smbclient //192.168.31.1/XiaoMi 命令之后进入 smb:\> 提示符,其中的 \ 代表当前所在目录,输入 help? 查看可用命令,基本的访问命令与 ftp 的命令相同,如 get XXX 从小米路由器下载文件 XXX 到本地,put YYY 将本地文件 YYY 上传到小米路由器等等。

方法二:通过文件浏览器访问

在 Ubuntu 的文件浏览器(Files)的左侧,有一个「Connect to Server」按钮,点击后在出现的对话框中,输入 smb://192.168.31.1/ 再点击 Connect 即可查看小米路由器提供的共享服务,效果等同于方法一的 smbclient -L 命令,如下图所示:

双击 XiaoMi 后弹出的对话框中,选择 Anonymous (匿名访问)再点击 Connect 即可。此时可以在左侧看到 xiaomi on 192.168.31.1 的目录,表示连接成功。

方法三:通过挂载方式访问

安装

Samba 其实是对 CIFS 协议做逆向工程后的开源产物,而 Linux 上的 CIFS 的工具已经从 Samba 软件包中分离出来,需要单独安装:

$ sudo apt-get install cifs-utils

挂载

首先创建挂载点的目录:

$ sudo mkdir -p /media/xiaomi

然后使用 mount 命令将 //192.168.31.1/XiaoMi 挂载到刚创建的目录,注意其中的 -t cifs 选项:

$ sudo mount -t cifs //192.168.31.1/XiaoMi /media/xiaomi -o guest

由于 CIFS 对于路径名称是大小写不敏感的,因此挂载时可以使用 XiaoMi 的任意大小写组合,但挂载点 /media/xiaomi 当然是大小写敏感的。

要验证是否挂载成功,可直接输入 mount 命令查看目前所有已挂载的文件系统,找到其中这样的一行(刚刚挂载的文件系统在最后一行):

//192.168.31.1/XiaoMi on /media/xiaomi type cifs (rw,relatime,vers=1.0,sec=none,cache=strict,domain=WECHANGER,uid=0,noforceuid,gid=0,noforcegid,\
addr=192.168.31.1,file_mode=0755,dir_mode=0755,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)

成功挂载之后,就可以像使用本地磁盘一样使用小米路由器的共享磁盘了,比如在文件浏览器中双击打开文档,使用 cp 命令与小米路由器互传文件等,非常方便。

小结

通过对三种方法的描述可以发现,这三种访问方法的本质是相同的,都是通过 Samba 服务访问小米路由器上的文件,小米路由器作为 Samba 服务器,Linux 设备作为 Samba 客户端。三种方法的差异体现在所使用的工具和操作界面不同。其中方法一使用 smbclient 操作不方便,方法二使用图形化的操作界面无法实现自动化,而方法三使用挂载的方式,操作方便且可使用脚本实现自动挂载和文件操作,推荐使用方法三。

附本文操作环境:

  • Linux 版本: Ubuntu 16.04
  • 小米路由器型号: R1D
  • 小米路由器 ROM 版本: MiWiFi 稳定版 2.16.3

以上。

comments powered by Disqus