五分钟自建 ZeroTier 的 Planet/Controller

当我们使用远程桌面时,经常有内网穿透的需求。但是大部分内网穿透工具都需要一台服务器作为隧道中转。而在国内环境下,中转服务器的价格还是比较贵的。这就导致花生壳、team viewer等工具的售价十分高昂。

而Zerotier则是一款通过P2P技术达到内网穿透、无需(或者不直接通过服务器)进行中转的内网穿透服务。从原理上说,类似于BT种子

五分钟自建 ZeroTier 的 Planet/Controller

官方的 roots 都不在大陆地区,ZT 穿越 NAT 成功率和时延、丢包率这些网络质量有关。现在 VPS 越来越便宜了,而且 ZT 的 controller 也不太要求大带宽,自建一个 ZT 的 controller 非常有利于 NAT 穿越,搞了一个容器化的 zerotier controller (github.com/sbilly/docker-zerotier-controller),五分钟内就可以让自己的 controller 上线。

目前使用的是 zero-ui 作为 controller 的 WEB 界面(缺省用户名 /密码是 admin/zero-ui),如下图。

自定义 planets 把 github.com/sbilly/docker-zerotier-controller 的内容复制到本地,按照你自己的需求修改 patch/planets.json,然后构建容器镜像。

{ “planets”: [ { “Location”: “Beijing”, // planet 所在位置,其实可以是任何注释信息 “Identity”: “a4de2130c2:0:ab5257bb05cd2fb8044fe26483f6d27b57124ca7b350fb3e0f07d405c68c4416094dbc836bf62ed483072501aa3384dff3c74ac50050c1bfbb1dc657001ef6a1”, // planet 使用的公钥 “Endpoints”: [“127.0.0.19993”] // 端点清单,使用 IP/port 格式,支持 IPv4/IPv6 } ] } 构建镜像 docker build –force-rm . -t sbilly/zerotier-controller:latest 运行 可以根据实际需求启动容器镜像,下面是几个例子:

Run with default settings

docker run –rm -ti -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest

Run with custom envirments settings

docker run –rm -ti -e ZU_SECURE_HEADERS=false -e ZU_CONTROLLER_ENDPOINT=http://127.0.0.1:9993/ -e ZU_DEFAULT_USERNAME=admin -e ZU_DEFAULT_PASSWORD=zero-ui -p 4000:4000 -p 3000:3000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest

Run with docker volumes

docker run –rm -ti -v pwd/config/identity.public:/app/config/identity.public -v pwd/config/identity.secret:/app/config/identity.secret -v pwd/config/authtoken.secret:/app/config/authtoken.secret -p 3000:3000 -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest 缺省用户名 /密码是 admin/zero-ui,可以通过环境变量 ZU_DEFAULT_USERNAME 和 ZU_DEFAULT_PASSWORD 来设置 环境变量 ZT_PRIMARY_PORT 定义了 ZeroTierOne 的 local.conf 配置文件中 primaryPort 的设置 其他环境变量可以参考 zero-ui 的相关说明 其他的也可以看看 github.com/sbilly/docker-zerotier-controller

第 1 条附言 · 175 天前 增加客户端的相关配置

客户端 从控制器 WEB 界面下载 planet 文件,并保存到节点的配置文件所在的目录,例如:/var/lib/zerotier-one/planet。然后启动 zerotier-one。

Download planet

wget http://[IP_OF_CONTROLLER]:[PORT_OF_CONTROLLER]/app/static/planet -O /var/lib/zerotier-one/planet

Start ZeroTierOne

zerotier-one -d /var/lib/zerotier-one/ 第 2 条附言 · 82 天前 发文以后自建 ZeroTier Planet/Controller 的 docker 镜像和帖子都多了不少,甚至有一些提到了能不做任何修改光一个 UI 就可以自建 planet,这其实是有误导的。大家可以看一下自己机器上 zerotier-cli listpeers 的显示,如果你自己的节点都是 peer 或者 moon,则意味着并没有成为 planet。

ZeroTier 本身有几个概念:

root/planet:就是 zerotier-cli listpeers 看到的 planet。 controller:控制器,提供内部的 API,参与到 network 的寻址等一系列流程中。实际部署中不少其实也是 root/planet,也可以不部署在一起。 controller UI:控制器的 WEB 界面,提供用户层面的界面和 API。缺省可以和 root/planet、controller 在同一台机器上,但实际上是可以 不部署在一起。 目前 github.com 上提供的和 controller 相关的开源项目基本都是 controller UI,包括:

zero-ui ztncui 这几个项目主要是提供了界面,并绕过官方在界面上对节点数量的限制,但实际上对时延这些并无改善。