背景

随着个人设备增多,nas,个人影音库等边缘计算流行。如何低成本,高效的组织,联系各个设备变成一个问题。而zerotier可以比较完美的解决这个问题。

zerotier是一个异地组网神器,相比于传统中转组网受限制于节点带宽,zerotier会优先使用p2p模式通信,这在双方同时拥有公网IP时格外有效。

相比于中转,p2p直连可以提高速率和稳定性,不受服务器带宽限制(改为收到双方上传带宽限制)

搭建

1,下载

1
2
3
git clone https://github.com/Jonnyan404/zerotier-planet
cd zerotier-planet
vim docker-compose.yml

2,修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '2.0'
services:
ztncui:
container_name: ztncui
restart: always
environment:
# - MYADDR=公网地址(不设置该项自动获取)
- MYADDR=127.0.0.1 # 改成自己的服务器公网ip
- HTTP_PORT=3443
- HTTP_ALL_INTERFACES=yes
- ZTNCUI_PASSWD=root
ports:
- '3443:3443' # 设置网页的端口
- '9993:9993' # 作为中心节点,提供9993端口给客户端用,一般是9993
- '9993:9993/udp'
volumes:
- './zerotier-one:/var/lib/zerotier-one'
- './ztncui/etc:/opt/key-networks/ztncui/etc'
# 按实际路径挂载卷, 冒号前面是宿主机的, 支持相对路径
image: keynetworks/ztncui

3,运行

1
2
3
4
docker-compose up -d

docker images # 查看镜像
docker container ps -a # 查看容器

4,配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
docker exec -it ztncui bash # 进入容器
# 在容器内操作
cd /var/lib/zerotier-one
ls -l
# 生成moon配置文件
zerotier-idtool initmoon identity.public > moon.json
chmod 777 moon.json
# 修改stableEndpoints, 注意格式和实际公网ip
{
"id": "b72b5e9e1a",
"objtype": "world",
"roots": [
{
"identity": "b72b5e9e1a:0:a892e51d2ef94ef941e4c499af01fbc2903f7ad2fd53e9370f9ac6260c2f5d2484fd90756bec0c410675a81b7cf61d2bb885783bd6a8c28bce83bcab5f03fe14",
"stableEndpoints": ["127.0.0.1/9993"]
}
],
"signingKey": "45f0613e569a0549c74293c39b30495b594a003534290e8ade9ef82877aa7505d7a73eeabfc22c97c404e4caaf9f3c9eed2b134d696935c966e28f523364f15f",
"signingKey_SECRET": "cc6afd67e7b7f84a92e2c8d3c2e7212c71e2ad0a4f5b3c03bf60ab1cd3b99281b57d9a2958d2bd8fc2bc77fdf2a1160099c2c61d3d9acc8cb311673ee120b4a6",
"updatesMustBeSignedBy": "45f0613e569a0549c74293c39b30495b594a003534290e8ade9ef82877aa7505d7a73eeabfc22c97c404e4caaf9f3c9eed2b134d696935c966e28f523364f15f",
"worldType": "moon"
}

# 在容器内生成moon文件
zerotier-idtool genmoon moon.json
mkdir moons.d
cp *.moon moons.d/
# 在容器外生成planet文件
mv world.bin planet
# 复制到容器内
docker cp ./planet ztncui:/var/lib/zerotier-one
# 重启容器
docker restart ztncui

5,验证 & 授权

1
2
3
4
5
6
7
docker exec -it ztncui bash # 进入容器
# 在容器内操作
cd /var/lib/zerotier-one
# 查看moon
zerotier-cli listmoons
# 访问ip+端口对应的设置页面
# 替换客户端的planet文件并重启服务, 再加入网络, 在网页端授权

客户端

Windows

下载地址:Zerotier Download

点自动安装后,默认会在任务栏启动,需要在右下角找到zerotierUI点击 Quit 退出

  1. 停止Zerotier任务

任务管理器,找到zerotier服务退出

  1. 替换planet文件

打开C:\ProgramData\ZeroTier\One,用刚刚下载的planet替换掉本地的planet

  1. 重启Zerotier服务

在任务管理器点击重新启动Zerotier服务,等已停止变成正在运行

  1. 连接私有网络

在右下角任务栏找到ZerotierUI,依次 右键 - join New Network,输入网络ID

  1. 在服务端界面,给本地客户端授权

在客户端查看状态OK表示连接成功。