我家云安装OpenWrt:作为旁路由/软路由+轻量化NAS

经典开篇先说两句

上一篇博客发布之后,我用了一段时间OMV系统,感觉还可以,只是想要安装软件实现其他功能不太方便。很多软件都无法安装,而且软件安装后,我也懒得改主页图标和端口的映射。最重要的一点是,我了解到在群辉系统或者OpenWrt系统中,阿里云盘是可以映射到本地作为本地磁盘的一部分,而且还有NASTools这款全自动整理、削刮影音库的软件,这无疑是戳到了我的使用痛点。然而我一直没有见过我家云的OpenWrt固件,直到我看到了一个定制OpenWrt固件的网站…



硬件配置

重温一下我家云的硬件配置(粒子云相同):

  • CPU:瑞芯微 RK3288
    • 4x ARM Cortex-A17 @ 1.5Ghz (被限制了主频,实际最高1.3Ghz)
    • 28nm 制程,GPU为Mali-T764 (但无法驱动)
  • 内存:1GB DDR3 RAM
  • 闪存:8GB EMMC ROM
  • 接口:1x SATA3 (3.5寸硬盘槽位),1x USB 3.0,1x USB 2.0,1x 1000M RJ45
    • 受限于RK3288的带宽,SATA3 和 USB 3.0 无法同时工作

我家云的CPU与友善R2S是同款RK3288平台,而且R2S的一个网口也是USB转接的,这也说明我家云其实是可以在USB口插一个USB网卡,当R2S软路由去使用



刷机方法

订制OpenWrt固件的网站:https://supes.top/

如果你懒得去订制,也可以选择下载我订制的固件:下载链接(访问码:spk4)| .gz格式压缩包,请解压后使用

supes.top提供的有两个包我没有用到,这里也分享出来吧:下载(访问码:rur6)

具体的刷机方法和之前刷OMV的方法相同,这里就不再赘述,本文将重点讲讲刷好后的使用方法。



首次使用

不同于OMV这种就是作为NAS的系统,OpenWrt这个作为路由的系统在初次配置上显然更加繁琐

设置网络

由于默认的网口地址是10.0.0.1,是路由的地址,所以需要先将我家云网口的地址改为主路由下的网段。可以参考旁路由的设置方法。

  1. 将我家云和电脑通过网线连接,在浏览器中打开后台地址;如果你用的是我订制的固件,那么后台地址就是10.0.0.1

  2. 登录后台,如果你用的是我订制的固件,那么密码就是root

  3. 选择网络 - 接口,点击LAN口的编辑按钮,将 IPv4 地址改为主路由网段下的地址。比如我的华硕主路由的地址是192.168.50.1,那么网段下的地址就为192.168.50.2~192.168.50.254。改好后点击保存并应用

  4. 将我家云与主路由通过网线连接,在浏览器中打开上一步中设置的地址,即可打开我家云的后台管理界面

  5. 选择网络 - 接口,点击LAN口的编辑按钮,在 IPv4 网关 和 DNS 服务器 处填写主路由的IP地址,然后勾选 DHCP服务器 下的 忽略此接口 选项。改好后点击保存并应用

  6. 网络 - 防火墙 - 常规设置,取消勾选 启用 SYN-flood 防御 和 Enable FullCone NAT6 选项框

  7. 网络 - 防火墙 - 区域,勾选 lan→wan 的 IP 动态伪装

安装必要的软件

由于supes.top定制OpenWrt固件时,非赞助用户只能选择10个软件包,所以有一些软件需要我们自己安装

  • 通常安装软件的方法为 系统 - 软件包,先点击更新列表,再到筛选器中寻找要安装的软件包,点击安装即可

  • 也可通过上传软件包,安装下载好的软件包

  • 还有一种方法就是安装 iStore 商店,很多软件都可以在 iStore 中安装:

安装必要软件包

如果你用的是我订制的固件,那么以下软件包已经包含了:

luci-app-aliyundrive-webdav 阿里云盘WebDav,luci-app-aria2 Aria2下载工具,luci-app-dockerman Docker管理,luci-app-filebrowser 文件管理,luci-app-netdata 性能监测,luci-app-ramfree 释放内存,luci-app-samba4 文件共享,luci-app-ttyd 终端

推荐安装:

luci-app-diskman 磁盘管理,luci-app-qbittorrent BT下载工具,luci-app-transmission BT下载,luci-app-vsftpd FTP服务器

如果你有其他特殊需求,可以自行订制固件或自行安装需要的软件

安装Docker

supes.top订制的固件居然没有Docker……所以还得手动安装

这部分参考自https://opclash.com/luyou/283.html

  1. 安装所需依赖:luci-lib-jsoncluci-lib-dockerdockerddocker;注意使用筛选器时需要删掉默认填上去的luci-app

  2. 将 EMMC 中 5.15GB 的一块分区划给Docker使用:进入 系统 - 挂载点 - 挂载点,点击 添加,UUID选择有 /dev/mmcblk0p4 的那个UUID;挂载点点击自定义,然后/opt 回车,点击保存

  3. 更换 配置OPKG 内的软件源这步可以跳过,op.supes.top 提供的软件源还是可以的

  4. 安装 luci-app-dockerman,如果之前没安装,这里必须要安装了

    1
    2
    # luci-app-dockerman的开源地址:
    https://github.com/lisaac/luci-app-dockerman
  5. 启动Docker

    1
    2
    3
    4
    5
    # 启动Docker:
    /etc/init.d/dockerd start

    # 设置Docker开机自启:
    ln -s /etc/init.d/dockerd /etc/rc.d/S99docker


整一些花活

挂载阿里云盘为WebDav服务

  • 挂载网盘为WebDav后,局域网内的手机平板等设备就可以通过WebDav服务观看网盘内的电影了
  • 原理是使用 阿里云盘WebDav

使用方法

  1. 如果你前面没有安装luci-app-aliyundrive-webdav软件包,则这里必须安装
  2. 打开 服务 - 阿里云盘WebDav,勾选启用;双击 Refresh Token,用手机端阿里云盘扫描二维码;监听主机 填写我家云的IP地址,监听端口可以自己设置,1024~49151内不与其他软件冲突即可;最后设置用户名和密码,保存并应用
  3. 此时手机端播放器就可以添加WebDav服务了。例如nPlayer:网络 - 左上角加号 - WebDav,标题随便填,主机填我家云的IP,用户名、密码和端口填刚刚填的,路径/,点击右上角存储即可

这里也可使用 Alist 软件 (从iStore中安装) 挂载其他网盘为WebDav服务,方法类似,具体每种网盘获取Token的方法请参考Alist官方文档


将阿里云盘WebDav服务挂载到本地

  • 这样就可以使我家云上的软件访问阿里云盘中的文件了
  • 原理是使用 Rclone

理论上可以通过CloudDrive (Docker版,官方地址) 挂载,但是我经过测试,发现挂载后emby、Jellyfin等家庭流媒体库软件无法搜索到挂载的网盘,无论是通过CloudDrive直接挂载阿里云盘,还是先用阿里云盘WebDav/Alist挂载为WebDav服务,再用CloudDrive挂载都不行

网上有人说使用 luci-app-cifs-mount 共享盘挂载软件包也能起到与本部分相同的作用,但我并未尝试

这部分参考自:将阿里云盘挂载为Webdav并使用rclone挂载到本地rclone 开机自动挂载目录怎样搞!![N1盒子] openwrt通过rclone挂载onedrive网盘并设置开机自动挂载教程

使用方法

  1. 安装 luci-app-rclone 软件包,但可能是软件源的问题,它必须的包 rclone-ng 和它自己都不能正常安装,所以这两个包我在网上找到的,并手动安装上。这是我下载的 rclone-ngluci-app-rclone 包:下载这两个包(访问码:nlr7)

  2. 打开 存储 - Rclone,勾选 启动 rclone 后台服务 选项框,保存并应用

  3. 配置rclone,在终端中输入:

    1
    rclone config

    然后根据提示操作即可:其中 type 选 webdav (38),url 输入 http://<我家云的IP>:<阿里云盘WebDav的监听端口 ,vendor 选 other (5),password 自己设置即可,Edit advanced config? 选 n

  4. 按q退出后,配置文档会保存在/root/.config/rclone/rclone.conf,我们需要移动它到 存储 - Rclone 中设定的 rclone 配置文件地址,即 /etc/systemd/system/rclone.conf 下:

    你也可以在 存储 - Rclone 中点击下载,查看Rclone的配置文档,使用VS Code编辑后再上传

    1
    mv /root/.config/rclone/rclone.conf /etc/systemd/system/rclone.conf
  5. 建立一个文件夹,作为挂载的目录,这里我的代码如下:

    1
    mkdir /mnt/sda1/Aliyundrive
  6. 挂载

    1
    2
    rclone mount <DriveName>:<Folder> <LocalFolder> --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty
    # 按 Ctrl+c 会卸载(Unmount)

    这里需要根据实际情况,替换代码中被<>标记的部分:<DriveName>为配置Rclone的时候设置的name;<Folder> 没有特殊要求的话填 / 即可;<LocalFolder>是你本地挂载的地址,也就是上一步中mkdir后面的地址

    输入这段命令并回车后如果没有返回,那就是正在挂载中,在 系统 - 挂载点 - 已挂载的文件系统 处可以看到,你也可以通过 存储 - 文件管理器 - 打开管理界面 (FileBrowser) 查看是否可以访问挂载的阿里云盘

  7. 开机自启

    上面这段命令直接填入本地启动脚本是无法在开机的时候挂载成功的,且上面一步中结束运行挂载命令就会卸载,因此需要写一个脚本,开机时运行脚本来挂载。

    首先在终端中执行以下命令:

    1
    vi /etc/init.d/rcloned

    然后在 vi 中粘贴以下代码(按键盘上的INS键输入,按esc再输入:wq 回车即可退出 vi)

    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
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides: rclone
    # Required-Start: $all
    # Required-Stop: $all
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start rclone at boot time
    # Description: Enable rclone by daemon.
    ### END INIT INFO
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    # 以下部分需要修改:
    REMOTE=''
    LOCAL=''
    CONFIG='/root/.config/rclone/rclone.conf'
    DEMO='rclone'

    [ -n "$REMOTE" ] || exit 1;
    [ -x "$(which fusermount)" ] || exit 1;
    [ -x "$(which $DEMO)" ] || exit 1;

    case "$1" in
    start)
    ps -ef |grep -v grep |grep -q "$REMOTE"
    [ $? -eq '0' ] && {
    DEMOPID="$(ps -C $DEMO -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
    [ -n "$DEMOPID" ] && echo "$DEMO already in running.[$DEMOPID]";
    exit 1;
    }
    fusermount -zuq $LOCAL >/dev/null 2>&1
    mkdir -p $LOCAL
    rclone mount $REMOTE $LOCAL --config $CONFIG --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &
    sleep 3;
    DEMOPID="$(ps -C $DEMO -o pid=|head -n1 |grep -o '[0-9]\{1,\}')"
    [ -n "$DEMOPID" ] && {
    echo -ne "$DEMO start running.[$DEMOPID]\n$REMOTE --> $LOCAL\n\n"
    echo 'ok' >/root/ok
    exit 0;
    } || {
    echo "$DEMO start fail! "
    exit 1;
    }
    ;;
    stop)
    DEMOPID="$(ps -C $DEMO -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
    [ -z "$DEMOPID" ] && echo "$DEMO not running."
    [ -n "$DEMOPID" ] && kill -9 $DEMOPID >/dev/null 2>&1
    [ -n "$DEMOPID" ] && echo "$DEMO is stopped.[$DEMOPID]"
    fusermount -zuq $LOCAL >/dev/null 2>&1
    ;;
    init)
    fusermount -zuq $LOCAL
    rm -rf $LOCAL;
    mkdir -p $LOCAL;
    chmod a+x $0;
    update-rc.d -f $(basename $0) remove;
    update-rc.d -f $(basename $0) defaults;
    rclone config;
    ;;
    esac

    exit 0

    这段代码也需要根据实际情况修改(需要修改的位置已经在代码中标出):

    • REMOTE 处在引号内填第6步的 <DriveName>:<Folder><空格>,也就是配置Rclone的时候设置的name加上冒号和/和空格

    • LOCAL 处在引号内填第6步的 <LocalFolder>

  1. 在系统→本地启动脚本最下面添加以下命令:

    1
    2
    sheep 10s
    bash /etc/init.d/rcloned start

    保存后重启我家云,看看挂载点是否正常

本地影音服务器

在 iStore 中安装 Emby,Jellyfin,或是 Plex 即可。配置它们的方法以前的帖子里有说,这里不再赘述。

nas-tools自动管理影视库

就在我写本文时传来噩耗,nas-tools的作者因为testv的一个视频被迫下架了。难怪之前活的好好的,我直到它下架才知道有这么一个神器,感觉以前手动整理影视库的我真傻啊……

关于 nas-tools 我还没了解太多,只知道它功能强大,可以在 Aria2 下载完成后,按照 emby / Jellyfin 或是 Plex 识别媒体库的格式重命名影视文件,并放到对应的目录,还能削刮影视的封面、nfo、演员表等。用户仅需设置一次nas-tools,未来只管向Aria2推送下载链接,然后只需要等待 emby / Jellyfin 或是 Plex 识别并生成海报墙。

此博客发布时 iStore 中仍可安装 nas-tools,应该是 iStore 有 nas-tools 的Docker镜像

如果你有使用 emby / Jellyfin 或是 Plex,非常推荐使用 nas-tools,请自行搜索 nas-tools 的使用教程



作为旁路由/软路由

作为旁路由只需按照旁路由去设置即可;作为软路由则需要放弃内部的SATA硬盘位,用USB3.0转接RJ45,再设置wan口和lan口的配置即可,具体方法不再赘述。



后记

这几天连续折腾了几天NAS,给我折磨坏了。事实证明,我家云的性能跑Docker里的阿里云盘WebDav,再跑个Jellyfin就已经卡的不成样子了(当然arm64平台的Jellyfin性能确实不如emby),但是我如果后台再跑个nas-tools和Aria2,它还能正常播放那才是神奇……所以,我感觉我要么回归硬盘挂路由上有Samba看电影,要么就得买个性能更强的,要么就现在凑合用,别想看海报墙了……