方案架构

  • NAS使用frp做内网穿透,使得用户可以公网访问到NAS;由于公网服务器带宽成本昂贵,所以可以选用成本低的服务器配置(例如阿里云学生机),使用其仅作管理,把文件传输交由其他服务完成。
  • 文件传输可由Resilio Sync进行,其使用P2P技术,无需使用公网服务器即可传输文件。 Resilio Sync(曾经名为BitTorrent Sync)是由BitTorrent公司开发的专有的对等网络数据同步工具,支持多平台(Windows、OS X、Linux、Android、iOS和FreeBSD),其可在局域网、互联网上通过安全的、分布式的P2P技术在不同设备之间同步文件。参考自维基百科

通过Frp实现管理

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。使用Frp做反向代理需要实现以下功能,保证便捷、安全和稳定。

  • 公网服务器IP绑定域名实现域名访问
  • 访问需要开启HTTPS以保证安全性
  • Frp服务需要在NAS和公网服务器上实现持久化

申请SSL证书

证书申请前需要准备好相应的域名,确保域名正确的解析到相应的公网服务器,相应教程查看阿里云官方文档。阿里云云盾证书服务提供期限一年的免费DV证书(到期后可以免费续),但是免费的证书仅仅支持单域名。申请教程查看阿里云官方文档

Frp配置

准备好域名和证书后可以进行Frp配置,Frp配置文档可查看其官方文档的示例教程。由于需要使用HTTPS服务,需要用到Frp的https2http插件(于v0.36.0开始支持)。配置过程需要在客户端下载证书文件,在证书下载页面选择Apache类型的下载,下载的证书需要上传到NAS。

sever端配置文件frps.ini内容如下:

[common]
# frp服务端监听端口
bind_port = aaaa
# 公网访问NAS web服务的端口
vhost_https_port = bbbb

token = xxxx

client端配置文件frpc.ini内容如下:

[common]
# frp 公网服务器ip
server_addr = xx.xx.xx.xx
# frp 公网服务器端口,和服务端frp监听端口对应
server_port = aaaa

token = xxxx


[nas-https]
type = https
custom_domains = your.domain.xxx

plugin = https2http
# 本地NAS web服务的地址
plugin_local_addr = 127.0.0.1:cccc

# ssl cert
# 填入对应的证书路径,需要设置为NAS中存储磁盘的位置,原因客户端持久化
plugin_crt_path = xxxx.crt
plugin_key_path = xxxx.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

Frp持久化

服务端持久化

frp发行版中自带了systemd服务的配置文件,将配置文件frps.service修改后,放到/etc/systemd/system/下,使用命令systemctl start frps即可执行。

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
# 修改为对应的执行路径
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini

[Install]
WantedBy=multi-user.target

客户端持久化

对于威联通NAS由于其系统QTS是定制化的Linux系统,并不支持systemd,但是在QTS中提供了用户自定义启动脚本(autorun.sh)的功能,所以可以将Frp的客户端执行指令写道脚本中执行,以实现服务持久化。此外由于QTS系统每次重启后都会将系统文件还原,所以将Frp客户端程序以及SSL证书文件放到存储磁盘里,并在配置文件中修改为相应位置。

首先编写autorun.sh脚本,其中pre_path需要设置为存储磁盘的位置(例如/share/CACHEDEV1_DATA/

#! /bin/sh

pre_path/frp/frpc -c pre_path/frp/frpc.ini >/dev/null 2>&1 &

然后需要将autorun.sh脚本放到指定位置,参考qnap wiki

# 获取启动磁盘分区,例如为sdb
/sbin/hal_app --get_boot_pd port_id=0

# 挂载磁盘到/tmp/config
mount sdb6 /tmp/config

# 将autorun.sh复制到/tmp/config/下
cp autorun.sh /tmp/config/

# 将autorun.sh加上可执行权限
chmod +x /tmp/config/autorun.sh

# 操作完成,取消挂载
umount /tmp/config

将frp客户端程序以及SSL证书文件复制到存储磁盘中,需要给frpc加上可执行权限,重启NAS即可启动服务。

通过ResilioSync实现文件传输

Resilio Sync方案较为成熟,平台支持广泛。在威联通的NAS上通过AppCenter安装相应应用即可,其它平台用户使用相应平台服务即可。