五分钟自建 ZeroTier 的 Planet/Controller - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sbilly
V2EX    宽带症候群

五分钟自建 ZeroTier 的 Planet/Controller

  •  2
     
  •   sbilly 2021-09-03 11:05:48 +08:00 26075 次点击
    这是一个创建于 1501 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官方的 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),如下图。

    zero-ui.png

    自定义 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 
    • 缺省用户名 /密码是 admin/zero-ui,可以通过环境变量 ZU_DEFAULT_USERNAMEZU_DEFAULT_PASSWORD 来设置
    • 环境变量 ZT_PRIMARY_PORT 定义了 ZeroTierOne 的 local.conf 配置文件中 primaryPort 的设置
    • 其他环境变量可以参考 zero-ui 的相关说明

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

    第 1 条附言    2021-09-04 15:38:25 +08:00

    增加客户端的相关配置

    客户端

    从控制器 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 条附言    2021-12-06 15:28:33 +08:00

    发文以后自建 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,包括:

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

    56 条回复    2024-01-15 11:54:41 +08:00
    heqirong
        1
    heqirong  
       2021-09-03 11:39:47 +08:00
    自建 Planet 比搭个 moon 的优势有哪些?
    huawuya
        2
    huawuya  
       2021-09-03 11:56:13 +08:00
    以前自建的 moon,开始挺好用的,速度很快,可惜后来国内运营商对 UDP 的 Qos 丢包太严重,导致最后几乎没法用,只好改用 tinc 了,速度终于正常了,但是没有 zerotier 使用方便。
    sbilly
        3
    sbilly  
    OP
       2021-09-03 12:49:43 +08:00
    @heqirong 很多现象都和 丢包、时延 有关。比如如果你没遇到 a -> moon 正常 b -> moon 不正常,那就都差不多。印象中,moon 只是参与 NAT 穿越,其他的和 moon 无关。

    @huawuya 嗯嗯,ZT 是一个集程度比较高的,其他类似工具各有特点。够用就好。
    Ayahuasec
        4
    Ayahuasec  
       2021-09-03 13:34:43 +08:00 via Android
    同因为 udp 的运营商 qos 改用 tinc 的
    但是现在还是很怀念 zerotier 的面板,实在太方便了,tinc 虽然自定义程度高,但是每次修改都得连上去操作
    不知道 zerotier 有没有流量默认过 moon 中转的仅 tcp 模式了
    szxczyc
        5
    szxczyc  
       2021-09-03 13:52:24 +08:00 via iPhone
    我用的腾讯云frp 速度很快
    ilay1678
        6
    ilay1678  
       2021-09-03 16:10:19 +08:00
    搭建好了如何加入呢
    wszgrcy
        7
    wszgrcy  
       2021-09-03 16:25:12 +08:00
    我昨天也写了个文章...看来是撞车了 https://segmentfault.com/a/1190000040618153
    troilus
        8
    troilus  
       2021-09-03 17:08:26 +08:00
    支持 DDNS 吗? 搭了个 Moon 结果不支持 DDNS
    itechify
        9
    itechify  
    PRO
       2021-09-03 17:50:23 +08:00
    小白一脸懵逼,有没有了解下上下文的资料?搭建了不知道要干嘛
    jousca
        10
    jousca  
       2021-09-03 21:33:16 +08:00
    @oneisall8955 你如果用 ZeroTier 的话就比较清楚。 类似 FRP 的内网穿透
    bclerdx
        11
    bclerdx  
       2021-09-03 23:20:54 +08:00 via Android
    @huawuya 怎么测试运营商 udp qos 严重?
    sbilly
        12
    sbilly  
    OP
       2021-09-03 23:41:19 +08:00
    @ifwangs 和官方一样,在 web 界面上创建了 network 以后,在客户端 `zerotier-cli join` 对应的 network 即可。
    @troilus 这个 moon 的概念和 ddns 无关,是 orbit 到一个 id 上去。如果 moon 没有公网地址,效果不好。
    @wszgrcy 哈哈,想到一起了
    @oneisall8955 可以用 zerotier 搜索下本站。是一个建立虚拟网络的软件。
    ilay1678
        13
    ilay1678  
       2021-09-03 23:47:25 +08:00 via iPhone
    @sbilly 直接 jion 的话会走自建 planet ?
    sbilly
        14
    sbilly  
    OP
       2021-09-04 15:39:53 +08:00
    @ifwangs 是的。不过对应的客户端也要做一定的配置。

    更新容器镜像,重新启动控制器。控制器启动后,从控制器 WEB 界面下载 planet 文件,并保存到节点的配置文件所在的目录,例如:/var/lib/zerotier-one/planet 。然后启动 zerotier-one 。
    Cassius
        15
    Cassius  
       2021-09-04 19:32:45 +08:00
    好家伙原来客户端不需要修改的么.
    太好了终于不用弄 moons 了
    itechify
        16
    itechify  
    PRO
       2021-09-05 14:21:50 +08:00 via Android
    @jousca
    @sbilly

    知道是内网穿透可以异地组网,zerotier 经常用,也搭建过 moon 节点

    疑惑的是,项目里面有些参数不知道怎么自定义,如

    identify,planet 使用的公钥

    -p 端口需要多少个,这几个端口都用于什么的( 9993 好理解 4000/3000 就不懂)

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

    `zerotier-idtool generate planet.secret planet.public`
    sbilly
        39
    sbilly  
    OP
       2021-10-09 10:46:50 +08:00
    @EVJohn 换言之,就是 planet 用的 identity.public
    TossPig
        40
    TossPig  
       2021-11-16 22:25:00 +08:00
    请问 planet 需要固定 ip 嘛?
    sbilly
        41
    sbilly  
    OP
       2021-11-17 09:39:47 +08:00
    @TossPig 需要
    Markxu0
        42
    Markxu0  
       2021-11-21 16:55:18 +08:00
    迫于楼主这个国内机器下载过慢,自己也写了一个 https://github.com/xubiaolin/docker-zerotier-planet
    sbilly
        43
    sbilly  
    OP
       2021-12-07 09:17:19 +08:00
    发文以后自建 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 ),这几个项目主要是提供了界面,并绕过官方在界面上对节点数量的限制,但实际上对时延这些并无改善。
    tallest
        44
    tallest  
       2021-12-09 16:17:30 +08:00
    绝了,我不论是自己编译的镜像还是直接用你的,都连不上 planet ,客户端 join 之后 members 死活是空的。
    客户端执行 zerotier-cli peers 也只有一行,在你 issues 有个一样的问题,
    luo362722353
        45
    luo362722353  
       2021-12-12 19:49:52 +08:00
    @sbilly 冒昧问一下 ,openwrt 需要改动哪几个配置,Planet 建立后,客户端无法上线到 Planet
    documentzhangx66
        46
    documentzhangx66  
       2021-12-30 14:53:56 +08:00
    最近研究了一下 moon 到 plannet ,发现很多问题。

    1.这软件就是个傻子,当连接不上时,正常的 tracert 手段根本无法跟踪。

    2.这软件的开发也是个傻子,IP 与端口这些信息居然写死在源代码里。

    而且这软件基于 UDP ,很多企业环境里,网管直接把 udp 给禁了,这软件也废了。
    humbass
        47
    humbass  
       2022-05-19 23:38:22 +08:00
    新版本可以直接搭建 Planet 服务器,客户端都不用动,直接联网。
    modrich
        48
    modrich  
       2022-06-22 13:23:06 +08:00 via Android
    @humbass 请问有教程吗,怎么搞
    gam2046
        49
    gam2046  
       2022-06-29 10:49:44 +08:00
    大佬 想咨询一下,搭建私有的 controller 与 moon ,那么在客户端需要做哪些事情呢。
    CloudyKumori
        50
    CloudyKumori  
       2022-08-03 16:32:26 +08:00 via Android
    @humbass 客户端不用动是指调用官方 api 来连接服务器吗?这个办法好像已经不行了,运营商开始干扰 zerotier 的官方服务器通讯,必须得在服务器端和客户端修改 planet 文件替换才能正常使用了
    ZeroDu
        51
    ZeroDu  
       2022-08-04 17:03:48 +08:00
    直接用你的机箱运行
    ZeroDu
        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
    jqtmviyu
        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).
    Xiaosteven
        54
    Xiaosteven  
       2023-08-16 14:38:21 +08:00
    @sbilly @Markxu0 因最近国内电信把 4 个官方节点都封了,只能走自建 planet 。请问有没有什么办法可以添加多个 planet?例如我有 3 个服务器,能把这 3 个服务器都添加进来吗?这样不管哪个服务器 ban ,都还有其他的备用。谢谢
    lxian
        55
    lxian  
       2024-01-13 16:02:09 +08:00
    @tallest 我也遇到这个问题了。你现在有解决了吗?
    tallest
        56
    tallest  
       2024-01-15 11:54:41 +08:00
    @lxian 没有,放弃了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5522 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:33 PVG 15:33 LAX 00:33 JFK 03:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86