Openwrt 路由设置(六):文件中心
将openwrt作为对内、对外的文件中心

Openwrt 路由设置(六):文件中心


一、文件中心的基础架构

Openwrt文件中心的基础架构

存储:

  • 存储中心:Openwrt连接USB盘(读写消耗大)
  • Openwrt本地备份:Openwrt内置硬盘
  • 局域网内实时同步:Windows内置硬盘
  • Windows本地备份:Windows连接USB盘

内部备份与同步:

  • Rsync + Crontab :定时备份(Openwrt连接U盘 -> Openwrt内置硬盘)
  • Syncthing : 实时同步(需开机)(Openwrt连接U盘 <–> Windows硬盘)
  • 文件历史 :每日备份(Windows硬盘 -> Windows连接U盘)
  • WebDAV :挂载盘

对外访问服务:

  • WebDAV :挂载盘;网页下载
  • FileBrowser :网页访问;在线文本编辑

二、内部备份和同步

(一)Rsync + Crontab

Openwrt 本地增量备份,平均间隔3小时定时备份。

Rsync官网:https://rsync.samba.org/

$ opkg install rsync

本地使用时:

$ rsync [OPTION] SRC DEST`  

注意: 源路径:结尾不带杠表示拷贝该目录及其里面的内容;带杆表示拷贝目录里面的内容。目标路径带不带杆都一样。

  • -a 多参数集合:包括:-r 递归处理子目录;-l 软连接按软连接拷贝;-p -t -g -o -D 保留所有属性。

  • -a --no-l 等同于 -a 但不包括 -l

  • -L 软连接当成常规文件一样拷贝。

  • --delete 删除 DEST 中 SRC 没有的文件。实现单向同步。

  • -u 不处理 DEST 中比 SRC 还新的文件,不会覆盖。

  • --exclude=PATTERN 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。 注意:被排除文件或目录的路径是对于源路径的相对路径。另:./ 属于绝对路径。

  • -z 传输过程中压缩。

  • -v 打印一些信息,比如文件列表、文件数量等。

  • --progress 显示同步过程状态,比如统计要同步的文件数量、同步的文件传输速度等。

  • -x 限定同一个filesystem,不跨文件系统拷贝。

  1. 新建 /root/rsync.sh 脚本并 +x 赋执行权。
#!/bin/bash
# 单向增量备份,如果mm1中删除,backup中还在;如果mm1中更新,backup中也更新。
/usr/bin/rsync -a --no-l -Lx --exclude={'.git','.stfolder','desktop.ini','.ss*'} /mnt/mm1/ /mnt/backup/
# 单向同步备份,如果mm1中删除,backup中也删除!
/usr/bin/rsync -a --no-l -Lx --delete /mnt/mm1/ /mnt/backup/
  1. 使用crontab定时运行
$ crontab -e    # 编辑任务计划
$ crontab -l    # 查看任务计划

使用 crontab -e 命令打开,然后键入下面的命令:

9 10,12,15,18,20,23 * * * /root/rsync.sh >> /var/log/rsync.log 2>&1 &

即:每天10,12,15,18,20,23点9分运行一次。
注意: 5位开头,用 * 表示不定,不能用 ?

(二)Windows文件历史

Windows 每日备份一次,历史记录保存一个月。

控制面板 – 文件历史记录

  • 排除文件夹:排除掉音乐 视频等大文件存储和不需要备份的文件夹。
  • 增加文件夹:资源管理器,右键文件夹,选择“包含到库中”。

(三)Syncthing

实现局域网内实时同步,前提是两端都开机(废话)。
Syncthing也可支持广域网同步,通过官方或自建服务器。(本文场景不需要)

  1. 安装依赖软件包:ca-bundle ca-certificates wget openssl-util
  2. 官网 syncthing.net 下载 syncthing(注意框架);拷贝到 /usr/sbin ;并 chmod +x 赋权。
  3. 开机启动脚本。新建 /etc/init.d/syncthing
#!/bin/sh /etc/rc.common
START=99
STOP=5
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1

start() {
  sysctl -w net.core.rmem_max=2500000 >/dev/null 2>&1    # 官方建议
  service_start /usr/sbin/syncthing -gui-address="0.0.0.0:8384" -home="/usr/share/syncthing/" -logfile="/var/log/syncthing.log" -no-browser
  # -gui-address后台登陆地址:0.0.0.0可以任何人访问;127.0.0.1只能路由本机访问。
  # -home配置文件和数据文件的存放地址;-no-browser不自动打开浏览器。
}
stop() {
  service_stop /usr/sbin/syncthing
}

注意手动新建相关目录;赋权 chmod +x ;启动 $ service syncthing enable

  1. 如需外部访问后台,可配置后台界面的nginx反向代理:
# nginx:在 server{} 中。部分
location /syncthing/ {
    proxy_pass       http://localhost:8384/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
  1. localhost:8384 登录到配置后台界面,配置:
  • 设置管理员和密码!勾选使用加密连接到图形管理页面。
  • 局域网内部使用,不需连接全球发现服务器。关闭“启用NAT穿透”、“全局发现”、“启用中继”此三项。
  • 添加设备。两个设备通过互相设置对方的“device ID”才能建立连接。
  • 局域网内使用,设备间可关闭压缩。
  • 添加同步文件夹(以系统根/目录为root)。
  • 因为Openwrt和Windows都已设有备份,不启用同步文件夹的版本控制。
  • 忽视 ~$*.git.DS_Store._*等文件;忽略文件权限。

三、对外公网访问服务

(一)WebDAV

通过nginx提供webDAV服务,巨多坑;使用Lighttpd或者caddy则更简单。但Lighttpd不支持https的反向代理;caddy运行效率低。在此用 Simple Go WebDAV server 。

  1. 官网 Simple Go WebDAV server 下载 webdav(注意框架);拷贝到 /usr/sbin ;并 chmod +x 赋权。

  2. 新建配置文件 webdav.yaml (扩展名必须yaml) :

# Server related settings
address: 0.0.0.0
port: 10090
auth: true
tls: true
cert: /etc/ssl/aaa.cer
key: /etc/ssl/aaa.key
prefix: /    #前缀,"/" 即代表访问地址为 https://监听地址:建听端口/
debug: false

# Default user settings (will be merged)
scope: .    #监听目录,"." 即代表当前目录、根目录
modify: true
rules: []

#跨域资源共享
cors:    
  enabled: true
  credentials: false

users:
  - username: abc    # 默认根目录、全部
    password: ppp
  - username: def
    password: qqq
    scope: /mnt/sda1
  - username: ghi
    password: ggg
    scope: /mnt/sda1/nnn
  1. 开机启动脚本。新建 /etc/init.d/webdav
#!/bin/sh /etc/rc.common
START=99
STOP=5
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1

start() {
  service_start /usr/sbin/webdav -c /root/webdav.yaml
}
stop() {
  service_stop /usr/sbin/webdav
}

注意赋权 chmod +x ;启动 $ service webdav enable
4. 设置防火墙通信规则和端口转发,TCP和UDP到路由10090端口。
5. Windows映射网络驱动器:地址 https://abc.com:10090/
6. Windows注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

  • FileSizeLimitInBytes 原最大文件大小被限制为50MB,超过弹出错误提示框。可调至最大。
  • BasicAuthLevel 原值1,仅https。(2为https和http均可,有安全隐患)。

(二)FileBrowser

  1. 官网 下载 filebrower(注意架构);拷贝到 /usr/sbinchmod +x 赋权。
  2. 配置:
# 创建配置数据库
$ filebrowser -d /etc/filebrowser.db config init

$ filebrowser -d /etc/filebrowser.db config cat                # 查看配置

$ filebrowser -d /etc/filebrowser.db config set --address 0.0.0.0  # 设置监听地址
$ filebrowser -d /etc/filebrowser.db config set --port 8088        # 设置监听端口
$ filebrowser -d /etc/filebrowser.db config set --log /var/log/filebrowser.log  # 设置日记位置

$ filebrowser -d /etc/filebrowser.db config set --root /mnt/m1    # 设置bash的根目录
$ filebrowser -d /etc/filebrowser.db config set --scope ./        # 相对于root的相对路径,为默认分配的目录。
$ filebrowser -d /etc/filebrowser.db config set --locale zh-cn    # 设置语言环境
$ filebrowser -d /etc/filebrowser.db config set --branding.name "NEN's Files"   # 设置主页标题
$ filebrowser -d /etc/filebrowser.db config set --sorting.by modified           # 设置文件排序

# 添加账号和密码(admin权限)
# 注意:admin权限,可以访问整个硬盘全部内容,密码一定强密码,日常用不建议用admin。
$ filebrowser -d /etc/filebrowser.db users add admin password1 --perm.admin
$ filebrowser -d /etc/filebrowser.db users ls    # 查找所有用户

# 启动 File Browser
$ filebrowser -d /etc/filebrowser.db    # 不指定证书,外网访问不安全,慎重

可参考官方Documentation https://filebrowser.org/
启动成功后,192.168.1.1:8088 访问。

  1. 开机启动脚本: 新建 /etc/init.d/filebrowser
#!/bin/sh /etc/rc.common
START=99
STOP=5
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1

start() {
  service_start /usr/sbin/filebrowser -d /etc/filebrowser.db -t /etc/ssl/aaa.cer -k /etc/ssl/aaa.key
  # 指定证书,外网访问安全,但内网无法访问了!
}
stop() {
  service_stop /usr/sbin/filebrowser
}

赋权 chmod +x ;启动 $ service filebrowser enable

  1. 设置防火墙通信规则和端口转发,TCP和UDP到路由8080端口。

  2. 另:可以不指定证书而通过nginx反向代理,实现外部安全访问,同时内网也可访问:

  • 配置 filebrowser
$ filebrowser -d /etc/filebrowser.db config set --baseurl "/files" # 设置访问的路径,一定要设。
  • 配置 nginx
# nginx:在 server{} 中。部分
# location 后面的匹配项,一定要同上述 baseurl 配置项保持一致,否则无法代理成功。
location /files/ {
    proxy_pass       http://127.0.0.1:8088/;
    proxy_set_header Origin http://127.0.0.1:8088;  # 注意添加,否则登录后无法使用shell命令。
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
}
  1. 登录后的设置。
  • 设置用户名和密码!
  • 因为管理员可以访问整个硬盘,建议新建账户日常使用,不使用管理员。
  • “在Shell中执行”不填写。

最后修改于 2024-02-24