五分钟自建 ZeroTier 的 Planet/Controller

2021-09-03 11:05:48 +08:00
 sbilly

官方的 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.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

其他的也可以看看 github.com/sbilly/docker-zerotier-controller

23417 次点击
所在节点    宽带症候群
56 条回复
sbilly
2021-09-06 08:39:25 +08:00
@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,需要注意网络端口冲突、网络是否可达等问题
yicong135
2021-09-06 08:52:12 +08:00
能突破 100 台设备限制么?
hronro
2021-09-06 10:15:53 +08:00
没用过 ZeroTier,对比起 Tailscale 之类的有什么优劣?
ch8000
2021-09-06 19:54:55 +08:00
这个 docker 做的太大了, 存储个局域网信息,用 postgreSQL 大材小用,这个数据库是代替 Oracle 的。不知道有没用 sqlite 版本的
ch8000
2021-09-06 20:29:20 +08:00
@yicong135 不是 100 个,后来官方改为 50 个了
sbilly
2021-09-06 21:02:48 +08:00
@yicong135 自建的没有限制
@ch8000 没有 pgsql
@hronro 和 tailscale 一样都是工具,够用就好
shanliang
2021-09-11 04:47:18 +08:00
有没有现成的镜像呀,因为考虑到 Planet 肯定放在国内,就用国内机编译过了很久去看发现失败了。。
shanliang
2021-09-11 04:57:06 +08:00
@shanliang 哦我蠢了。。。可以直接用
ch8000
2021-09-11 10:01:26 +08:00
Planet 能否建两个,能否加这部分内容?
以便单点故障 或维护时容错? 这样只搭建一个,还是不如用国外的安心。只是免 moon 搭建而已。
hw2ex
2021-09-12 15:50:27 +08:00
@sbilly docker 运行起来之后,客户端连不上,而且 windows 下的 planet 放在哪个地方?另外,路由器里的 zerotier 配置文件一般都在 /tmp 下,重启之后 planet 就变为原来的了。楼主,有没有详细的步骤说明呀?没有一端能连接上的
sbilly
2021-09-12 22:51:52 +08:00
@hw2ex Windows 下缺省在 `C:\ProgramData\ZeroTier\One\`; openwrt 配置文件都是持久化在 `/etc/config` 目录下。可以参考下这篇文章 https://v2ex.com/t/539919 方法差不多。
@ch8000 多点这个对大多数用户来说要求更高了,还得数据库啥的 。。。
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
ragnaroks
2021-09-22 19:40:59 +08:00
问题在于如果不支持可以提醒用户并使用默认设置,而不是报错后直接白屏无法操作,虽然这是 zero-ui 的问题不是楼主的问题
sbilly
2021-09-23 12:29:07 +08:00
@ragnaroks 你说的 zerolite 是开源的么?我在 github 和 google 上都没有找到对应的。
ragnaroks
2021-09-23 23:17:37 +08:00
@sbilly 是 github 上的,还是 1.5.2 的时候,只有这个版本可以在铁威马正常运行,可能现在不维护就私有了
bbsingao
2021-09-29 15:08:24 +08:00
一年前就自己编译 planet 了。不过没什么用。因为移动设备的 planet 文件替换非常麻烦。
EVJohn
2021-10-09 00:41:17 +08:00
大佬好,想问下 planets.json 里的公钥,是自己生成还是要从哪儿取的。
sbilly
2021-10-09 10:45:56 +08:00
@EVJohn 用 `zerotier-idtool` 生成,例如:

`zerotier-idtool generate planet.secret planet.public`
sbilly
2021-10-09 10:46:50 +08:00
@EVJohn 换言之,就是 planet 用的 identity.public
TossPig
2021-11-16 22:25:00 +08:00
请问 planet 需要固定 ip 嘛?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799623

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX