MENU

浅尝 Zerotier

April 26, 2022 • Read: 312 • 日常,学习

前言

在上一篇文章中说到我已经做了frp和反向代理把内网部分端口映射到公网,也都添加了ssl证书。但是始终有一个很让人头疼的事情——我的小水管只有5M,这个限制有时候就比较头疼(应证了那句:我可以不用,但不能没有)
很早之前就了解到 Zerotier

需求:公网环境中访问内网服务
解决方案:

  • 申请公网IP+DDNS+端口映射直接访问

    • 优点:啥都好
    • 缺点:基本申请不到
  • frp等类似工具通过一台有公网ip的VPS转发所有的流量

    • 优点:基于自己的水管稳不稳
    • 缺点:小水管不是速度受限就是流量限制,把内网服务映射到公网,还得添加ssl证书,不过也可以给添加泛域名证书
  • Zerotier可以将不同设备添加到一个同一个虚拟局域网里

    • 优点:速度基本不受限,服务也没有映射到公网,不用每次开一个服务都需要去解析,做反向代理
    • 缺点:每台设备都要装Zerotier软件

安装

记录一下,相关教程网上也很多,更多相关的资料,请登陆官方网站

官网注册

首先去官网注册登录创建一个NetWork就会得到一个Network ID,保持Access ControlPrivate

群晖端安装Zerotier

由于Synology 的 DSM 7 不允许第三方应用程序以 root 用户身份运行。所以DSM7以上的版本将只能使用docker的方式来安装zerotier

首先可以使用下面lsmod命令查看tun模块是否已载入系统,若没有则进行后面的步骤

# 检查tun.ko是否存在
lsmod | grep tun
ssh username@nas-ip

sudo -i

# 创建一个 /usr/local/etc/rc.d/tun.sh 脚本 到 /dev/net/tun 目录下:
echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh

# 给tun脚本可执行权限
chmod +x /usr/local/etc/rc.d/tun.sh

# 执行
/usr/local/etc/rc.d/tun.sh

# 检查一下 TUN
ls /dev/net/tun
/dev/net/tun

系统加载TUN模块以后

安装镜像创建容器,就直接在终端进行了

# 创建宿主机目录
mkdir /volume1/docker/zerotier-one

# 下载 zerotier/zerotier-synology 最新镜像
docker pull zerotier/zerotier-synology:latest

# 创建 zerotier/zerotier-synology 容器
docker run -d           \
  --name zt             \
  --restart=always      \
  --device=/dev/net/tun \
  --net=host            \
  --cap-add=NET_ADMIN   \
  --cap-add=SYS_ADMIN   \
  -v /volume1/docker/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest
  • 查看节点状态
docker exec -it zt zerotier-cli status
  • 加入您的网络
docker exec -it zt zerotier-cli join `你的NetworkID`
  • 授权网络上的 NAS 然后查看网络状态
docker exec -it zt zerotier-cli listnetworks
  • 查看节点信息
docker exec -it zt zerotier-cli listpeers

添加成功以后则要登录Zerotier控制台,即可看到网络列表多了一条未授权加入的网络,给个名字区分设备,勾选允许其加入即可

上面安装方法来自 —— 官方群晖安装Zerotier文档

windows端安装

  • 先去官网下载对应设备的Zerotier客户端
  • 不知道是不是最新版的问题,UI没有加入虚局域网的选项(2022-04-25),直接使用CMD执行命令即可,更多可查看官方文档
#查看
zerotier-cli status

#加入虚拟局域网
zerotier-cli jion `你的NetworkID`

#查看网络状态
zerotier-cli listnetworks

完成以上步骤后,需登录Zerotier控制台,允许设备加入

至此,windows就可以通过Zerotier控制台中群晖设备的虚拟局域网IP访问群晖设备。

其他设备安装

  • 其他设备可去官网下载 Zerotier下载
  • 添加虚拟局域网ID
  • 控制台允许

搭建Moon节点

Zerotier Moon的目的是加速Zerotier的连接,让虚拟网络更稳定的运行,主要是为了加速连接,SMZDM有介绍: 如果设备间桥接网络延迟超过30ms且时断时续就表示设备间之间的P2P隧道没有打通,一般移动网络与电信或者联通之间使用UDP穿透会失败。这时候就需要自建Moon节点进行中专加速。

先看下有无moon节点的前后延迟对比

moon_compare

  • 我是选择我的国内小水管,同样是选择docker安装
#下载镜像
docker pull jonnyan404/zerotier-moon

#创建宿主机目录
mkdir -p /opt/docker/zerotier-moon

#创建容器(最后为云主机的公网IP,同时开放9993端口)
docker run --name zerotier-moon -d --restart always -p 9993:9993 -p 9993:9993/udp -v /opt/docker/zerotier-moon:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 47.98.103.241
  • 随后在/opt/docker/zerotier-moon目录下将moons.d下载下来保存
  • 最后在群晖和Windows上分别添加moon节点
  1. 群晖上比较简单:将保存的moons.d目录放到群晖Zerotier宿主机的目录下后重启容器即可

moons.d

  1. windows添加moon节点,首先在moon服务器服务器获取moon_id,其实就是保存的moons.d目录下的文件名去除前6个0的字符串
    也可以通过下面的命令查看moon_id
docker logs zerotier-moon

Cmd或者Terminal中输入

#添加moon节点
zerotier-cli orbit moon_id moon_id

#查看
zerotier-cli listnetpeers

win-zerotier

总结

简单测试了一下,基本能跑满带宽,不过目前实际使用的不多,问就是隔离居家办公,后续有啥心得体会再来掰扯掰扯。

  • 4G

4G

  • 有线连接

有线连接

参考

本文作者:ZGGSONG
本文链接:https://assets.zggsong.cn/archives/zerotier.html
版权声明:本站所有未注明转载的文章均为原创,并采用CC BY-NV-SA 4.0授权协议,转载请注明来源

Last Modified: April 29, 2022
Archives QR Code Tip
QR Code for this page
Tipping QR Code