在U-NAS下配置Zerotier进行内网穿透

背景介绍

  之前一直计划在家里放个NAS用来储存各种数据资料、同步手机数据之类的,过完年回来网上偶然得知在年前某播酷云就“矿难”了,于是赶紧入了一台。播酷云是万由代工的一款NAS,本来是计划上黑裙的系统,但是想到实际上并不需要那么多功能,只想尽量少折腾,干脆就装上了万由自家的U-NAS OS。

  我这边的使用场景是把NAS放在家里的内网,然后除了家里还会在其他地方对它进行操作,所以接下来要考虑的就是内网穿透的问题。

内网穿透方案

  目前网络上常见的内网穿透方案基本上是这两种:

  1. 采用公网设备作为中转代理,实现内外网设备连接,数据流量走中转通道。例如:FRP、ngrok、QC等等(我感觉万由家官方的U-Anywhere也是这种模式)
  2. 采用公网设备作为握手代理,内外网设备连接代理服务器完成握手后,实现设备之间直连,数据流量直接走点对点通道,不经过代理服务器。例如:ZeroTier、N2N。

  由于我自己的廉价VPS速度和流量也堪忧,所以搭建第一种方案是不可靠的,所以后续还是选定了使用ZeroTier作为内网穿透的方案。

ZeroTier的连接模式

  我理解中ZeroTier实现数据连接的模式大概是这样的:

  1. A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 C
  2. 如果 C 有直接链接到 B,它会转发数据包给 B,否则它会继续向上游发送数据包,直到达到根节点 Z
  3. 根节点 Z 知道所有节点,所以如果 B 在线,最终数据包将到达 B
  4. C 还向 A 发送一个握手的消息,包含有关它如何到达 B 的提示。同时,将握手消息发给 B,通知 B 它如何到达 A
  5. A 和 B 获取握手消息并尝试相互发送测试消息,可能会对 NAT 或防火墙进行穿透,如果这样可以建立直接链路,则不再需要中继,如果无法建立直接路径,则通信可以继续中继(速度慢)。

  这里面的根节点 Z 是由ZeroTier官方提供的,用户也可以自己搭建类根节点 Moon,来依托 Z 节点提高数据交换速度。

安装流程

注册ZeroTier账号

  如上文所说,ZeroTier 的根节点是由官方提供的,即便是自己搭建 Moon 节点也要依托官方的根节点来被发现,所以要使用 ZeroTier 还是得先注册ZeroTier的账号。免费账号可以建立一个虚拟局域网,允许同时最多100个设备连接到这个虚拟局域网中。

  注册过程比较简单,就不细说了。注册登陆后,建立完一个虚拟局域网,会得到一个网络ID(不可修改)和一个局域网段(可以自定义)。

  最重要的其中的网络ID,那是作为后续其他设备接入的唯一凭证。

在U-NAS上安装ZeroTier

  U-NAS OS 本质上是基于 Debian 的一个 NAS 系统,所以安装流程就跟在 Debian 下面差不多。

  1.开启 SSH服务
  由于 U-NAS OS 默认没有安装 openssh,所以先在“APP管理器”中找到“SSH服务”安装上,并在相关设置中配置好端口。

  2.用SSH登录U-NAS
  一般可以采用Putty、MobaXterm等工具连接NAS的SSH端口即可,我这里懒得安装,直接在命令行下登录了。

1
ssh U-NAS地址 -l admin -p SSH端口

  登录之后需要用su root来切换到 root 用户,默认密码为yutech ,如果之前那步勾上了“允许Root登录”的话可以省略admin用户登录再切换的流程。

  3.安装ZeroTier
  由于 U-NAS 本质上是 Debian 系统,所以安装过程只需要一条命令就足够了。(由于此前已经切换到 root 用户,所以此处运行 bash 不需要加 sudo 了)。

1
curl -s https://install.zerotier.com/ | bash

  正常情况下出现 Successful 就说明安装好了。
  
  3.1 补充说明
  有些运行上述安装命令会弹出 bash: curl: command not found 的错误,这是由于 U-NAS OS 没有原生自带curl工具导致的。   

  
  此时需要用APT包管理工具来手动安装一下这个工具即可。

1
apt install curl

使用ZeroTier

  安装完成后 ZeroTier 自动加入启动服务中,不需要手动启动。此时只要使用 join 命令加入之前创建的那个网络的 ID 即可将 U-NAS 加入到虚拟局域网中。

1
zerotier-cli join (NetWork ID)

  如果出现200 join OK字样就说明成功连上虚拟局域网了。但此时它还并不能被访问,需要登录 ZeroTier 的控制中心。

  看到已经发现了 U-NAS,这时候点击左边的勾勾来通过验证,就正式将 U-NAS 连接到 ZeroTier 的虚拟局域网中了。后面的 Managed IP 就是它在虚拟局域网中的IP地址。

  这样连上了之后就能被其他加入这个虚拟局域网的设备发现,并与其进行点对点的数据传输了。

  此时在 U-NAS 上输入zerotier-cli listpeers还能看到整个网络中的其他节点。

使用效果

  整体弄好之后试试效果,我这里的环境是这样:U-NAS 放在家里,在家庭内网中,办公室的电脑在公司的内网环境下。

  在办公室的终端上分别 Ping 一下它在 U-Anywhere 的地址和虚拟局域网中的内网地址,可以发现是成功打通了直连通道的。

  复制文件的速度也已经很不错了,基本上能够跑满公司内网限制的网速了,也说明与之之间是实现了 P2P 直连而非走中转通道。

后续

  后来还尝试了在 VPS 上面搭建 ZeroTier 的 Moon 节点服务器,也成功了,不过我的廉价 VPS 访问速度并不比 ZeroTier 自己的根节点快多少,所以也不知道具体效果如何。如果以后在国内的 VPS 上部署 Moon 节点的话,应该对国内的 ZeroTier 终端访问会有加快握手速度的作用。

文章目录
  1. 1. 背景介绍
  2. 2. 内网穿透方案
    1. 2.1. ZeroTier的连接模式
  3. 3. 安装流程
    1. 3.1. 注册ZeroTier账号
    2. 3.2. 在U-NAS上安装ZeroTier
    3. 3.3. 使用ZeroTier
  4. 4. 使用效果
  5. 5. 后续
|