官方的 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
),如下图。
把 github.com/sbilly/docker-zerotier-controller 的内容复制到本地,按照你自己的需求修改 patch/planets.json
,然后构建容器镜像。
{
"planets": [
{
"Location": "Beijing", // planet 所在位置,其实可以是任何注释信息
"Identity": "a4de2130c2:0:ab5257bb05cd2fb8044fe26483f6d27b57124ca7b350fb3e0f07d405c68c4416094dbc836bf62ed483072501aa3384dff3c74ac50050c1bfbb1dc657001ef6a1", // planet 使用的公钥
"Endpoints": ["127.0.0.1/9993"] // 端点清单,使用 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
的设置增加客户端的相关配置
从控制器 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/
发文以后自建 ZeroTier Planet/Controller 的 docker 镜像和帖子都多了不少,甚至有一些提到了能不做任何修改光一个 UI 就可以自建 planet,这其实是有误导的。大家可以看一下自己机器上 zerotier-cli listpeers
的显示,如果你自己的节点都是 peer 或者 moon,则意味着并没有成为 planet。
ZeroTier 本身有几个概念:
zerotier-cli listpeers
看到的 planet。目前 github.com 上提供的和 controller 相关的开源项目基本都是 controller UI,包括:
这几个项目主要是提供了界面,并绕过官方在界面上对节点数量的限制,但实际上对时延这些并无改善。
1
heqirong 2021-09-03 11:39:47 +08:00
自建 Planet 比搭个 moon 的优势有哪些?
|
2
huawuya 2021-09-03 11:56:13 +08:00
以前自建的 moon,开始挺好用的,速度很快,可惜后来国内运营商对 UDP 的 Qos 丢包太严重,导致最后几乎没法用,只好改用 tinc 了,速度终于正常了,但是没有 zerotier 使用方便。
|
3
sbilly OP |
4
Ayahuasec 2021-09-03 13:34:43 +08:00 via Android
同因为 udp 的运营商 qos 改用 tinc 的
但是现在还是很怀念 zerotier 的面板,实在太方便了,tinc 虽然自定义程度高,但是每次修改都得连上去操作 不知道 zerotier 有没有流量默认过 moon 中转的仅 tcp 模式了 |
5
szxczyc 2021-09-03 13:52:24 +08:00 via iPhone
我用的腾讯云➕frp 速度很快
|
6
ifwangs 2021-09-03 16:10:19 +08:00
搭建好了如何加入呢
|
7
wszgrcy 2021-09-03 16:25:12 +08:00
我昨天也写了个文章...看来是撞车了 https://segmentfault.com/a/1190000040618153
|
8
troilus 2021-09-03 17:08:26 +08:00
支持 DDNS 吗? 搭了个 Moon 结果不支持 DDNS
|
9
oneisall8955 2021-09-03 17:50:23 +08:00
小白一脸懵逼,有没有了解下上下文的资料?搭建了不知道要干嘛
|
10
jousca 2021-09-03 21:33:16 +08:00
@oneisall8955 你如果用 ZeroTier 的话就比较清楚。 类似 FRP 的内网穿透
|
12
sbilly OP @ifwangs 和官方一样,在 web 界面上创建了 network 以后,在客户端 `zerotier-cli join` 对应的 network 即可。
@troilus 这个 moon 的概念和 ddns 无关,是 orbit 到一个 id 上去。如果 moon 没有公网地址,效果不好。 @wszgrcy 哈哈,想到一起了 @oneisall8955 可以用 zerotier 搜索下本站。是一个建立虚拟网络的软件。 |
14
sbilly OP @ifwangs 是的。不过对应的客户端也要做一定的配置。
更新容器镜像,重新启动控制器。控制器启动后,从控制器 WEB 界面下载 planet 文件,并保存到节点的配置文件所在的目录,例如:/var/lib/zerotier-one/planet 。然后启动 zerotier-one 。 |
15
Cassius 2021-09-04 19:32:45 +08:00
好家伙原来客户端不需要修改的么.
太好了终于不用弄 moons 了 |
16
oneisall8955 2021-09-05 14:21:50 +08:00 via Android
|
17
oneisall8955 2021-09-05 14:23:20 +08:00 via Android
@oneisall8955 另外,这是不是私有化部署 zerotier 服务端的意思?如果是,那客户端如何加入,需要做什么变动?
|
18
sbilly OP @oneisall8955
1. identity.* 文件是 zeortier 运行时自动创建的,也可以用 zerotier-cli generate 来生成 2. “planet 使用的公钥” 就是指 zerotier planet 的 identity.public 文件中的内容。项目里面 planet.json 对应的 identity 是 patch/planet.public 和 patch/planet.secret 3. 9333 是 zerotier 的端口,3000/4000 都是 zero-ui 的端口(缺省配置的 zero-ui 只用了 4000 端口) 4. authtoken.secret 文件是 zerotier 运行时自动创建 5. 客户端加入方法可以参考一楼增加的 “客户端” 相关内容 |
19
Cassius 2021-09-05 17:57:42 +08:00
修改了 Identity 为现在的 pub key,build 好了之后,启动没问题
client 修改 plants 文件之后,连不上。。 4000 和 9333 都是通的。Endpoints 用 127.0.0.1 和公网 IP 均这个情况。 |
20
huanxianghao 2021-09-05 23:39:30 +08:00
谢谢,不过现在自建 moon 基本够用了,以后再折腾
|
21
sbilly OP @Cassius
1. 确保 mkworld.cpp 和你希望的 pub key 和 ip/port 正确,并能正常编译 2. 执行 mkworld 能输出的 world.c 和 world.bin ,把 wolrd.bin 重命名为 planet 3. 确保 Toplogy.cpp 的相关内容与 world.c 一致 4. 确保 peer 使用 正确的 planet,或者用上面的代码直接编译 peer 5. 确保 peer 可以正常访问 Endpoints 如果在同一台机器的容器环境测试 controller 和 peer,需要注意网络端口冲突、网络是否可达等问题 |
22
yicong135 2021-09-06 08:52:12 +08:00
能突破 100 台设备限制么?
|
23
hronro 2021-09-06 10:15:53 +08:00
没用过 ZeroTier,对比起 Tailscale 之类的有什么优劣?
|
24
ch8000 2021-09-06 19:54:55 +08:00
这个 docker 做的太大了, 存储个局域网信息,用 postgreSQL 大材小用,这个数据库是代替 Oracle 的。不知道有没用 sqlite 版本的
|
26
sbilly OP |
27
shanliang 2021-09-11 04:47:18 +08:00
有没有现成的镜像呀,因为考虑到 Planet 肯定放在国内,就用国内机编译过了很久去看发现失败了。。
|
29
ch8000 2021-09-11 10:01:26 +08:00
Planet 能否建两个,能否加这部分内容?
以便单点故障 或维护时容错? 这样只搭建一个,还是不如用国外的安心。只是免 moon 搭建而已。 |
30
hw2ex 2021-09-12 15:50:27 +08:00
@sbilly docker 运行起来之后,客户端连不上,而且 windows 下的 planet 放在哪个地方?另外,路由器里的 zerotier 配置文件一般都在 /tmp 下,重启之后 planet 就变为原来的了。楼主,有没有详细的步骤说明呀?没有一端能连接上的
|
31
sbilly OP @hw2ex Windows 下缺省在 `C:\ProgramData\ZeroTier\One\`; openwrt 配置文件都是持久化在 `/etc/config` 目录下。可以参考下这篇文章 https://v2ex.com/t/539919 方法差不多。
@ch8000 多点这个对大多数用户来说要求更高了,还得数据库啥的 。。。 |
32
ragnaroks 2021-09-22 19:39:40 +08:00
当创建一个没有 ipv4 自动分配的网络后,无法进入 zero-ui,控制台提示
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'ipRangeStart') 其它兼容实现的控制器均支持完全手动分配,比如 key-networks 和 zerolite |
33
ragnaroks 2021-09-22 19:40:59 +08:00
问题在于如果不支持可以提醒用户并使用默认设置,而不是报错后直接白屏无法操作,虽然这是 zero-ui 的问题不是楼主的问题
|
35
ragnaroks 2021-09-23 23:17:37 +08:00
@sbilly 是 github 上的,还是 1.5.2 的时候,只有这个版本可以在铁威马正常运行,可能现在不维护就私有了
|
36
bbsingao 2021-09-29 15:08:24 +08:00
一年前就自己编译 planet 了。不过没什么用。因为移动设备的 planet 文件替换非常麻烦。
|
37
EVJohn 2021-10-09 00:41:17 +08:00
大佬好,想问下 planets.json 里的公钥,是自己生成还是要从哪儿取的。
|
38
sbilly OP |
40
TossPig 2021-11-16 22:25:00 +08:00
请问 planet 需要固定 ip 嘛?
|
42
Markxu0 2021-11-21 16:55:18 +08:00
迫于楼主这个国内机器下载过慢,自己也写了一个 https://github.com/xubiaolin/docker-zerotier-planet
|
43
sbilly OP 发文以后自建 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 ),这几个项目主要是提供了界面,并绕过官方在界面上对节点数量的限制,但实际上对时延这些并无改善。 |
44
tallest 2021-12-09 16:17:30 +08:00
绝了,我不论是自己编译的镜像还是直接用你的,都连不上 planet ,客户端 join 之后 members 死活是空的。
客户端执行 zerotier-cli peers 也只有一行,在你 issues 有个一样的问题, |
45
luo362722353 2021-12-12 19:49:52 +08:00
@sbilly 冒昧问一下 ,openwrt 需要改动哪几个配置,Planet 建立后,客户端无法上线到 Planet
|
46
documentzhangx66 2021-12-30 14:53:56 +08:00
最近研究了一下 moon 到 plannet ,发现很多问题。
1.这软件就是个傻子,当连接不上时,正常的 tracert 手段根本无法跟踪。 2.这软件的开发也是个傻子,IP 与端口这些信息居然写死在源代码里。 而且这软件基于 UDP ,很多企业环境里,网管直接把 udp 给禁了,这软件也废了。 |
47
humbass 2022-05-19 23:38:22 +08:00
新版本可以直接搭建 Planet 服务器,客户端都不用动,直接联网。
|
49
gam2046 2022-06-29 10:49:44 +08:00
大佬 想咨询一下,搭建私有的 controller 与 moon ,那么在客户端需要做哪些事情呢。
|
50
CloudyKumori 2022-08-03 16:32:26 +08:00 via Android
@humbass 客户端不用动是指调用官方 api 来连接服务器吗?这个办法好像已经不行了,运营商开始干扰 zerotier 的官方服务器通讯,必须得在服务器端和客户端修改 planet 文件替换才能正常使用了
|
51
ZeroDu 2022-08-04 17:03:48 +08:00
直接用你的机箱运行
|
52
ZeroDu 2022-08-04 17:05:24 +08:00
直接用你的镜像运行
``` 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 ``` 客户端设置 plannet 还是显示 leaf |
53
jqtmviyu 2022-09-20 00:11:13 +08:00
@ZeroDu 构建镜像可能需要进一步处理, docker 容器里没有把官方的 planet 文件删掉, 需要自己手动替换 planet 配置文件.
楼主在[issuecomment-1061609898]( https://github.com/sbilly/docker-zerotier-controller/issues/11#issuecomment-1061609898)里回复我了. (但我当时没看到换成 ztncui 控制器的镜像了) 原作者的回复是[issuecomment-1062405242]( https://github.com/sbilly/docker-zerotier-controller/issues/11#issuecomment-1062405242) 你可以试下有没有效果, 有的话让楼主 fix 下 你也可能参考下我的一些处理方式[issuecomment-1059961262]( https://github.com/Jonnyan404/zerotier-planet/issues/11#issuecomment-1059961262). |
54
Xiaosteven 2023-08-16 14:38:21 +08:00
|