zerotier实现异地设备统一管理(搭建篇)
需求背景
异地多设备管理时,如果有公网IP就要做端口映射,进行一个一个映射(如下图)。如果没有公网IP就还得类似NPS、FRP之类的进行映射管理,统一管理起来很麻烦。
为什么选择zerotier
跨平台性很好,基本常见的Linux、安卓、Mac、IOS都覆盖了
可以选择自建节点(推荐)或者使用官方节点
与NPS或FRP对比
从上图可以看出,请求均经过服务器NPS或FRP,所以整体结构的短板就是服务器的
带宽
和性能
上。
从上图可以看出如果zerotier尝试P2P打洞成功后,基本属于直连,所以整体架构的短板就是客户端的
上行带宽
上,但是一般家庭都是30Mbps,怎么都比服务器那小水管强。
为什么要自建
官方的 Zerotier 服务提供的 planet 行星根服务器大多在海外,国内网络大多数连接不稳定,且容易出现断连情况。
安全性
如果想要入侵,得同时拿到根planet文件以及控制台账号密码才可以
配置完全部后,把服务器下载planet文件端口、控制台端口删除防火墙规则,使用Ngnix反代控制台端口,不用控制台的时候直接关闭站点
安装(以自建服务端为例)
操作系统为Linux Ubuntu
拉取项目代码
git clone https://github.com/xubiaolin/docker-zerotier-planet.git #官方地址
git clone https://ghproxy.markxu.online/https://github.com/xubiaolin/docker-zerotier-planet.git #加速地址
执行安装脚本
cd docker-zerotier-planet
./deploy.sh
#安装日志
欢迎使用zerotier-planet脚本,请选择需要执行的操作:
1. 安装
2. 卸载
3. 更新
4. 查看信息
5. 退出
请输入数字:1
开始安装,如果你已经安装了,将会删除旧的数据,10s后开始安装...
myztplanet
请输入zerotier-planet要使用的端口号,例如9994: 9993
请输入zerotier-planet的API端口号,例如3443: 3443
请输入zerotier-planet的FILE端口号,例如3000: 3000
是否自动获取公网IP地址?(y/n)y
获取到的IPv4地址为: 000.000.000.000
获取到的IPv6地址为:
是否使用上面获取到的IP地址?(y/n)y
---------------------------
使用的端口号为:9993
API端口号为:3443
FILE端口号为:3000
IPv4地址为:000.000.000.000
IPv6地址为:
---------------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
安装完成
---------------------------
请访问 http://000.000.000.000:3443 进行配置
默认用户名:admin
默认密码:password
请及时修改密码
---------------------------
moon配置和planet配置在 /home/ubuntu/docker-zerotier-planet/data/zerotier/dist 目录下
moons 文件下载: http://000.000.000.000:3000/00000093caa675b0.moon?key=xxxxxxxxxxxxxxxx
planet文件下载: http://000.000.000.000:3000/planet?key=xxxxxxxxxxxxxxxx
---------------------------
请放行以下端口请:9993/tcp,9993/udp,3443/tcp,3000/tcp
---------------------------
防火墙放行端口
保存planet文件
通过安装时提示的地址将planet文件下载,为了安全起见,下载完就可以将防火墙的3000端口进行关闭了。
服务端配置虚拟网络
访问 http://00.00.00.00:3443 自己输入对应的 ip 和端口号,修改默认密码。
在控制台中
创建虚拟网络
创建完成
创建IP地址池
配置完成
客户端配置
由于我们是自建的,所以客户端下载后,要替换掉原来的planet
文件才能加入到网络,客户端除了群晖,均从官网https://www.zerotier.com/download/,下载。
Windows系统
Planet 文件路径:C:\ProgramData\ZeroTier\One\Planet
(可能是隐藏路径)
替换后重新启动 Zerotier One 服务
Linux系统
Planet 文件路径:/var/lib/zerotier-one/Planet
重启服务:sudo systemctl restart zerotier-one
DSM(群晖)
个人建议使用套件安装,docker安装版本相对较老,以套件为例,配置完旷神的套件源后,直接搜索下载,下载完直接停用
并按照使用教程https://imnks.com/3175.html ,进行配置。记得修复完启动,唯一不一样的就是启动后要去该目录/var/packages/zerotier/var
下替换planet文件,如果找不到该目录就启动一下套件就有了。
安卓
安装第三方客户端:ZerotierFix
MacOS系统
安装后,planet的路径在/Library/Application Support/ZeroTier/One
,替换后执行以下命令。
sudo launchctl -w unload /Library/LaunchDaemons/com.zerotier.one.plist # 关闭服务
sudo launchctl -w load /Library/LaunchDaemons/com.zerotier.one.plist # 启动服务
OpenWrt设备
在控制台网页中找到相关软件包,并下载安装
连接SSH,上传planet文件到路由器,记住上传的路径,进入/etc/config
,编辑zerotier文件
如下图,进行配置
执行service zerotier restart
重启服务即可。
客户端加入自建 Planet 中的虚拟网络
xxxx为控制台创建的网络ID
zerotier-cli -q join xxxxxxxxxxxxxxxx
在控制台勾选授权
最终效果
客户端使用命令,查看所有客户端连接情况,发现都是直连,也就是P2P打洞成功
控制台查看所有主机
尝试访问其中一个客户端
测试损耗
基本吃满了家宽的30Mbps上行,很满意
总结
比起市面上常见内网穿透方案,zerotier更加简便,损耗更少,缺点就是配置会相对麻烦一些。
- 感谢你赐予我前进的力量