异地组网直连NAS,威联通部署zerotier完整流程
对于喜欢折腾NAS的朋友来说,远程访问一直是个绕不开的话题。
以威联通NAS为例,虽然自带的myQNAPcloud很方便,但有时受限于中转服务器带宽,速度可能并不一定理想,而且不想折腾反向代理的话,部分应用还是要在局域网中用起来才方便。
在异地组网方案中,zerotier凭借出色的P2P打洞能力和超低的延迟,一直是广受好评的经典工具,它能在我们的电脑、手机和NAS之间组建虚拟局域网,人在外地也能像在家里一样直接通过IP地址秒开NAS后台、挂载SMB共享或者流畅串流影音。

在早期版本中,我们可以通过手动上传套件包的形式安装zerotier,但随着官网更新,想要使用较新的版本,就只能使用Docker方式了,而且在安装过程中有一些官网文档并没有提及的细节问题。
今天咱们就以威联通Qu805为例为大家展示一遍zerotier的完整部署流程,同时针对可能遇到的虚拟网卡(TUN)丢失以及重启失效等问题,带来一劳永逸的解决方案。
一、部署流程
1.准备数据文件夹
为了保证zerotier的配置在容器更新或NAS重启后不会丢失,我们需要先做好数据持久化映射,打开威联通的文件管理器File Station,在存放Docker容器数据的目录新建一个名为zerotier的文件夹,比如我使用的路径为 /share/Container/zerotier。

2.创建Docker Compose部署
打开威联通NAS的Container Station,点击左侧的「应用程序」,然后点击右上角蓝色的「创建」按钮。

services:
zerotier:
image: zerotier/zerotier:latest
container_name: zerotier
restart: always
network_mode: host
privileged: true
cap_add:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- /share/Container/zerotier:/var/lib/zerotier-one
这里需要着重注意以下两个参数,
network_mode: host,这是核心选项。zerotier必须使用Host网络模式,才能直接将虚拟网卡绑定在宿主机上,让整台NAS共享该网络通道。
privileged: true,威联通的安全机制较严,必须开启特权模式并映射/dev/net/tun设备,否则容器无法创建虚拟网卡节点。
点击「创建」后,耐心等待NAS拉取镜像并部署完成。在Container Station中看到状态显示正在运行即可。

3.加入网络与后台授权
zerotier容器启动后,它默认是一个没有加入任何网络的空白节点,我们需要手动让它加入自己的zerotier虚拟网络。
方法也很简单,在Container Station的「容器」列表中,找到刚才建好的zerotier,点击容器名进入详情页,点击右上角的「执行」按钮:

这里可以直接选中默认的/bin/bash:

点击「执行」进入命令行界面,依次输入以下命令:
1.检查当前状态,如果显示ONLINE则代表正常:
zerotier-cli status
2.加入我们在zerotier官网创建的16位虚拟局域网的网络ID:
zerotier-cli join 你的16位zerotier网络ID
终端返回200 join OK,就代表已经成功申请加入虚拟局域网。

浏览器打开zerotier官网后,从控制台进入我们的网络。
往下拉找到Members列表,会看到一台新加入的未授权成员设备,点击编辑按钮,勾选Authorized复选框,顺便可以在名称里将其备注为Qu805。
稍等十几秒,这台NAS就会自动被分配到一个虚拟局域网IP(例如192.168.193.96)。
至此,在处于同一网络下的手机或电脑上,直接输入这个IP就能远程登录NAS了。

二、避坑小贴士
我自己在使用Docker方式部署zerotier时,遇到一些让人挠头的小问题,在这儿一并贴出来供大家参考。
1. 容器日志报错“could not open TUN/TAP device: No such file or directory”
这是因为固件可能默认并没有激活并创建/dev/net/tun,导致容器初始化网卡时直接崩溃。
解决方法也不难,在电脑终端通过SSH连接到NAS,然后依次执行以下修复命令:
# 加载底层内核驱动
/sbin/modprobe tun
# 递归创建目录
mkdir -p /dev/net
# 手动生成tun字符设备节点
mknod /dev/net/tun c 10 200
# 赋予充分读写权限(防止容器无权调用)
chmod 666 /dev/net/tun
执行完毕后,回到Container Station重启zerotier容器,报错就消失,状态变成ONLINE。
2. NAS重启后zerotier掉线失效
这是因为威联通NAS QTS系统的目录与/dev结构运行在RAMDisk中,只要NAS重启,上面手动执行mknod创建的设备文件就会被系统直接擦除清空,导致开机后zerotier又报找不到TUN设备的错误。
那么解决思路也很明确了,我们需要让威联通NAS在每次开机时,自动重新构建一次TUN节点。
在SSH终端中直接运行下面这行命令,自动在存储盘写入引导脚本:
echo -e '#!/bin/shn/sbin/modprobe tunnmkdir -p /dev/netnmknod /dev/net/tun c 10 200nchmod 666 /dev/net/tun' > /share/CACHEDEV1_DATA/.qpkg/autorun.sh && chmod +x /share/CACHEDEV1_DATA/.qpkg/autorun.sh
然后继续在SSH中执行下面的命令,开启威联通autorun运行开关:
setcfg System "Run autorun.sh" "TRUE"
为了确认以上操作后zerotier是否正常参与组网,可以找台电脑尝试ping一下。

总结
作为目前主流的异地组建虚拟局域网的解决方案,zerotier配合威联通NAS,能带来接近本地局域网无异的远程访问体验。虽然威联通系统在TUN设备加载上有个小插曲,但只要按照本文的开机脚本做好持久化,就能真正做到一次部署、长久无忧。
以上就是本期的全部内容了,如果大家在部署过程中遇到什么问题,欢迎在评论区留言交流。也欢迎给飘雷来个点赞、收藏加关注三连击,我们下期再见!

校验提示文案
校验提示文案