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,不跨文件系统拷贝。
- 新建
/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/
- 使用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也可支持广域网同步,通过官方或自建服务器。(本文场景不需要)
- 安装依赖软件包:
ca-bundle ca-certificates wget openssl-util
。 - 官网 syncthing.net 下载 syncthing(注意框架);拷贝到
/usr/sbin
;并chmod +x
赋权。 - 开机启动脚本。新建
/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
- 如需外部访问后台,可配置后台界面的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;
}
localhost:8384
登录到配置后台界面,配置:
- 设置管理员和密码!勾选使用加密连接到图形管理页面。
- 局域网内部使用,不需连接全球发现服务器。关闭“启用NAT穿透”、“全局发现”、“启用中继”此三项。
- 添加设备。两个设备通过互相设置对方的“device ID”才能建立连接。
- 局域网内使用,设备间可关闭压缩。
- 添加同步文件夹(以系统根
/
目录为root)。 - 因为Openwrt和Windows都已设有备份,不启用同步文件夹的版本控制。
- 忽视
~$*
、.git
、.DS_Store
、._*
等文件;忽略文件权限。
三、对外公网访问服务
(一)WebDAV
通过nginx提供webDAV服务,巨多坑;使用Lighttpd或者caddy则更简单。但Lighttpd不支持https的反向代理;caddy运行效率低。在此用 Simple Go WebDAV server 。
-
官网 Simple Go WebDAV server 下载 webdav(注意框架);拷贝到
/usr/sbin
;并chmod +x
赋权。 -
新建配置文件
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
- 开机启动脚本。新建
/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
- 官网 下载 filebrower(注意架构);拷贝到
/usr/sbin
;chmod +x
赋权。 - 配置:
# 创建配置数据库
$ 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
访问。
- 开机启动脚本:
新建
/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
-
设置防火墙通信规则和端口转发,TCP和UDP到路由8080端口。
-
另:可以不指定证书而通过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;
}
- 登录后的设置。
- 设置用户名和密码!
- 因为管理员可以访问整个硬盘,建议新建账户日常使用,不使用管理员。
- “在Shell中执行”不填写。
最后修改于 2024-02-24