一、背景与效果
在小黄鱼买了个二手的DS220+使用快两年了,为了能随时随地使用家里的NAS,折腾了很多的内网穿透方案,最终选定Zerotier作为我的最终方案。使用Zerotier免费注册的账号,能够免费挂25个设备,已经足够我使用;如果有更严格的安全要求和设备数量要求,Zerotier还能自建服务器,非常实用。速度方面,由于采用了UDP的P2P直连,访问NAS速度只受限于自己的宽带上行和NAS的处理器速度,目前家里的宽带能够支持我上传下载接近10M/S的速度,十分够用。
1、常用功能Synology Photos和Synology Drive
NAS上我最常用的是Synology Photos、Synology Drive,用于同步照片和文件自动同步。有了Photos,我和老婆的苹果设备就不需要更多的空间来存储照片,自动同步到家里的NAS,安全性和私密性都有了保障。此外Synology Drive是我最重要的应用,由于自己的工作性质,有许多的资料文件都可以使用它实现多态设备自动同步,包括办公室的PC、笔记本电脑、家里的台式、手机等。
2、常用功能Docker 部署Gitea
除了上面的功能,作为程序员,为了管理自己的私人项目代码,部署了Gitea用于随时随地提交管理代码库。补充说明一下,由于国内你懂的原因,在NAS上使用Docker拉去镜像需要使用魔法或者费力找镜像站。
二、Zerotier部署的坑与解决办法
由于 DSM 7 不允许第三方应用直接使用root权限运行,群晖套件中心的Zerotier就不能用了,网友有使用Docker折腾成功的方案,但是我还是选择了计划任务的方案。
计划任务的方案简单来说就是在群晖控制面板->计划任务中创建一个开机触发任务,执行一个开启Zerotier的脚本,这样每次开机或重启都能自动开启Zerotier进行内网穿透。听起来还是蛮简单的,但实际执行起来就会遇到很多的坑,不过经过一段时间的摸索,还是解决了这些问题,每次断电和计划重启后都能顺利开启zerotier。
1、tun
zerotier的使用需要依赖TUN模块,tun模块是LinLinux内核中的一个虚拟网络设备;一般linux系统内核都支持该模块。关于TUN模块的资料参考
Linux下安装tun模块的详细步骤及注意事项
确保本机已经安装好TUN模块后,在文件路径/usr/local/etc/rc.d/创建脚本tun.sh,用于随时可以启动tun;因为重启主机后tun模块不一定能顺利启动。
#!/bin/sh
insmod /lib/modules/tun.ko
2、重启后的问题及解决方案
断电后重启,有可能tun模块没有启动,或者还没启动成功,这个时候就需要通过脚本检测是否重启成功,等待tun模块启动成功后再启动zerotier。下面的脚本配合上面的脚本就可以完美解决nas重启后zerotier不能正常启动的问题。
#!/bin/bash
scriptdir="$(dirname "$0")"
tun_script="/usr/local/etc/rc.d/tun.sh" # 开启 TUN 的脚本路径
device="/dev/net/tun" # TUN 设备路径
# 检查并加载 TUN 模块
function check_and_load_tun() {
if [ -e "$device" ]; then
echo "TUN device is already available."
else
echo "TUN device not available. Attempting to load TUN module..."
if [ -x "$tun_script" ]; then
"$tun_script"
sleep 2 # 等待设备加载
if [ -e "$device" ]; then
echo "TUN module loaded successfully."
else
echo "ERROR: Failed to load TUN module. Exiting."
exit 1
fi
else
echo "ERROR: TUN script ($tun_script) not found or not executable. Exiting."
exit 1
fi
fi
}
# 执行检查和加载 TUN
check_and_load_tun
# 启动 ZeroTier
$scriptdir/zerotier-one -d
if [ $? -ne 0 ]; then
echo "ERROR: Failed to start zerotier-one."
exit 1
fi
echo "zerotier-one started successfully."