V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KAAAsS
V2EX  ›  宽带症候群

Zerotier 非官方安卓客户端发布:支持自建 Moon 节点

  •  
  •   KAAAsS · 2021-04-07 10:56:30 +08:00 · 17786 次点击
    这是一个创建于 1086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原先一直在使用 n2n 组网,但是用了将近两年只见过同个局域网下和路由器成功建立过 p2p,绝大多数情况下都是在走 supernode 的转发。最近发现了 Zerotier,发现打洞效果真的超强,和 n2n 一起开的时候甚至会选择走 n2n 的连接( bushi )。但是用了几天也发现了几个问题,而且都和一个问题有关,就是 Zerotier 的中心化太强了。我个人最主要的痛点就是 Android 端不支持连接自建 Moon,而移动网络下官方的 Planet 节点几乎不可访问。但是研究了下 SDK,发现其实 SDK 本身是有 orbit 接口的,只是没有 GUI 。由于官方端是闭源的,所以就花了两天时间逆向了原客户端,自行加入了 orbit 功能。

    目前做的工作:

    • 增加 orbit 自建 moon
    • 中文翻译
    • 界面调整

    仍在开发的功能:

    • 查看 peer 列表
    • 将 ui 完全 Material Design 化

    项目 repo 与 apk 下载:kaaass/ZerotierFix。现在官方端的逆向结果还有待整理,欢迎各位朋友 PR 、Issue 。

    第 1 条附言  ·  2021-04-07 12:11:59 +08:00
    关于目前的 Orbit 功能:

    效果等价于 `zerotier-cli orbit` ,因此还是需要设备本身能和官方 planet 通信(获取 moon 信息),这一点之后打算持久化获取到的 moon 节点信息。需要的两个参数:Moon 地址(这个好理解)、Moon 种子。Moon 种子必须可以连接到,并且有 moon 的全部信息。建议把 moon 加入目标网络,然后 orbit 的时候 Moon 地址、Moon 种子都填写 Moon 地址。
    第 2 条附言  ·  2021-04-09 12:30:48 +08:00

    更新:

    1.0.1版已经实现了结点列表(Peers)、添加自定义Planet

    另附一个从 moon.json 生成 planet 配置的 cli 程序:mkmoonworld

    53 条回复    2023-05-12 01:52:30 +08:00
    WoodenRobot
        1
    WoodenRobot  
       2021-04-07 10:59:53 +08:00 via Android
    因为这个原因我都转战 tailscale 了
    KAAAsS
        2
    KAAAsS  
    OP
       2021-04-07 11:01:42 +08:00
    关于目前的 Orbit 功能:

    效果等价于 `zerotier-cli orbit` ,因此还是需要设备本身能和官方 planet 通信(获取 moon 信息),这一点之后打算持久化获取到的 moon 节点信息。需要的两个参数:Moon 地址(这个好理解)、Moon 种子。Moon 种子必须可以连接到,并且有 moon 的全部信息。建议把 moon 加入目标网络,然后 orbit 的时候 Moon 地址、Moon 种子都填写 Moon 地址。
    KAAAsS
        3
    KAAAsS  
    OP
       2021-04-07 11:02:07 +08:00
    @WoodenRobot 现在可以再试试了 w
    leavic
        4
    leavic  
       2021-04-07 11:21:03 +08:00
    @WoodenRobot tailscale 没好的路由器客户端啊
    WoodenRobot
        5
    WoodenRobot  
       2021-04-07 11:24:51 +08:00 via Android
    @leavic 路由器有公网 ip 我直接 ddns,tailscale 老家没有公网 IP 的群晖连接用的
    WoodenRobot
        6
    WoodenRobot  
       2021-04-07 11:27:58 +08:00 via Android
    @KAAAsS 关注 github 了,回头再试试,主要是 zerotier 自建 moon 还得自己有服务器。tailscale 穿透效果刚刚的,基本上都能直接打洞成功,没有再用 zerotier 的动力了,特别是后面 tailscale 如果出了路由器端的话,感觉没有再用 zerotier 的必要了
    gps949
        7
    gps949  
       2021-04-07 11:32:36 +08:00
    @WoodenRobot
    有路由器端解决方案啊,至少有 openwrt 上的解决方案。
    求求尽量别网上扩散 ts,否则很快就该和 zt 差不多命运需要 moon 了
    WoodenRobot
        8
    WoodenRobot  
       2021-04-07 11:53:32 +08:00 via Android
    @gps949 刚看到,前两天刚出的,闷声发大财🐸
    wszgrcy
        9
    wszgrcy  
       2021-04-07 12:03:00 +08:00 via Android
    支持自建地球节点吗?也就是不连 z ?
    KAAAsS
        10
    KAAAsS  
    OP
       2021-04-07 12:07:14 +08:00
    @wszgrcy 可以,但是需要自己重新编译
    KAAAsS
        11
    KAAAsS  
    OP
       2021-04-07 12:11:41 +08:00
    @WoodenRobot 感谢关注:)。我自己的情况是必须要中转节点,所以目前还是选择了 zerotier 。另外 zerotier 能增加多个 moon 也很不错。
    allenforrest
        12
    allenforrest  
       2021-04-07 12:58:46 +08:00   ❤️ 1
    点赞。

    我提个建议,还是建议自建 root,而不是自建 moon 。既然你已经有自建 moon 的中转服务器了,干脆就把 moon 改成自建 root server,内嵌的控制器,可以用这个 GUI 来配置和管理: https://github.com/key-networks/ztncui

    root server 自建好以后,用 ZeroTier One 源码里的小工具 mkworld 制作一个自定义 planet 文件(包含你自建 root 地址和节点信息)。

    然后将自定义 planet 加载到 Android App 里,我扫了一眼工程里的代码,原本应该是打算支持自己选 planet 文件进去的,但似乎没实现,但照着代码里的逻辑,其实就是把 planet 文件预置到 getActivity().getFilesDir() 里就行,ZT Service 初始化 Node 时候会自动去读 planet 文件,也就实现了全套自建的目标。

    自建 root 相比官方 root + 自建 moon 还是会有更好的体验的,毕竟 Node 在入网时候不用和官方 root 打交道了,relay 节点选择时也不会再考虑官方 root 了。
    oneisall8955
        13
    oneisall8955  
       2021-04-07 13:01:30 +08:00 via Android
    墙裂支持
    oneisall8955
        14
    oneisall8955  
       2021-04-07 13:14:08 +08:00 via Android
    moon 怎么填麻烦出个 Demo ? win 和 linux 复制 xxx.moon 文件到的 moons.d,安卓的怎么弄(=_=)
    KAAAsS
        15
    KAAAsS  
    OP
       2021-04-07 13:52:56 +08:00
    @allenforrest 感谢提醒~刚刚正好在研究这个。我原定的计划是下一步支持 moon 配置文件,这样就能初步做到不经过 zerotier root server 了。直接修改 root server 确实更加彻底,完全不去依赖 zerotier root 。

    不过代价就是,需要一系列自建的基础设施。我感觉还是要理清楚两个线路:

    1. 完全脱离 zerotier root:比较复杂。需要自己完成配置分发、建立 root 。大概可以搞一个 docker 解决,需要一个 root + ztncui 就行。

    2. 通信时脱离 zerotier root:相对简单,对于无法获得 moon 配置的情况,可以直接预制 moon 配置文件。可以不需要 ztncui,只通过官方 controller 分发配置(但有个前提,需要让 moon 节点连接官方网络)。

    我个人感觉解决方案 1 更适合建造国内的公共镜像?解决方案 2 又看起来有点迂回。我目前的想法还是先做到解决方案 2,然后实现一个 docker 让解决方案 1 的配置变得容易。
    KAAAsS
        16
    KAAAsS  
    OP
       2021-04-07 13:53:56 +08:00
    @oneisall8955 在右上角的设置里选择“入轨”。之后添加一个配置,两处都填写你的 moon 地址即可。
    826540272
        17
    826540272  
       2021-04-07 14:53:30 +08:00 via Android
    都打洞的啊,能联通就行
    826540272
        18
    826540272  
       2021-04-07 14:55:02 +08:00 via Android
    看了下 实际意义应该仅限于两端都是对称性 nat 的网络环境。
    oneisall8955
        19
    oneisall8955  
       2021-04-07 15:28:43 +08:00
    @KAAAsS #16 刚刚试了下,就是 moon 的 id ?,如 00000f12345.moon 那就填 f12345
    oneisall8955
        20
    oneisall8955  
       2021-04-07 15:29:54 +08:00
    @oneisall8955 #19 PSS,试了下终于 4G 移动卡,终于打洞成功流程访问内网
    KAAAsS
        21
    KAAAsS  
    OP
       2021-04-07 15:30:02 +08:00
    @oneisall8955 对的
    KAAAsS
        22
    KAAAsS  
    OP
       2021-04-07 15:38:28 +08:00
    @826540272 是这样的,自建 Moon 就是适用于打洞失败的情况。目前还在探索更完善的方法。
    Tokin
        23
    Tokin  
       2021-04-07 15:53:02 +08:00
    收藏,之前因为移动网络打洞完全不成功,直接走 frp 了,但是 frp 服务器带宽很小,所以速度很慢,如果能打洞成功久舒服了。
    efaun
        24
    efaun  
       2021-04-07 16:16:43 +08:00
    关注了
    gy6221
        25
    gy6221  
       2021-04-07 16:54:30 +08:00
    @WoodenRobot 请问下 tailscale 在多线接入的环境下表现如何?能手动指定线路优先级吗
    mgrddsj
        26
    mgrddsj  
       2021-04-07 16:58:36 +08:00
    好久之前就想做个完整功能的 Zerotier Android 客户端了,无奈技术太菜、文档不是很清晰一直无从下手。支持楼主!
    gps949
        27
    gps949  
       2021-04-07 22:50:26 +08:00
    @KAAAsS #15
    你说的方案 1 其实很简单,zt 官方开源代码中有给 make world 的脚本,可生成 earth 配置数据,以及可由其进一步生成 planet 文件。
    对于 linux/win/mac 平台直接使用官方程序+planet 文件即可。之前搞过 zt+ztncui 自建,奈何没 zt 的 ios 客户端开源代码,自己搞不定 ios,无法满足自己实际使用需求,于是就把自建 earth 扔那里荒废了。

    另外,lz 搞的国内貌似已经有商业团队搞过 zt 的自建山寨版了(零遁,没用过,非广告,利益无关)
    KAAAsS
        28
    KAAAsS  
    OP
       2021-04-07 23:34:43 +08:00
    @gps949 #27
    我今天测试了下,确实如你所说,方案 1 挺简单的。我现在的计划是给 Android 端加上 planet 配置功能,然后搞一个 docker-compose 完成 zt+ztncui 的部署与 planet 文件生成,做到一键部署。IOS 操作难度相对来说比 Android 大好多,而且我也没有开发机所以只能作罢 TAT 。

    自建 zt 的商业团队我确实不知道国内有,但是国外有我是有所了解的。不过我搞这个 repo 的主要目的还是想开源,方便有想法的朋友可以用较低的成本付诸实践 XD
    xumng123
        29
    xumng123  
       2021-04-08 08:37:50 +08:00 via iPhone
    能帮升级 chongshengB 的固件升级一下 1.6.4 版本 zerotier 吗,加入 moon 的支持?

    试了一下编译失败了。github:xumng123
    qq7790586
        30
    qq7790586  
       2021-04-08 10:32:48 +08:00
    @xumng123 #29 lean 大佬的潘多拉固件有自带了 zerotier 的,具体什么版本忘记了。
    https://www.right.com.cn/forum/thread-3135031-1-1.html
    KAAAsS
        31
    KAAAsS  
    OP
       2021-04-08 10:40:30 +08:00
    @xumng123 不需要重新编译,我刚刚看了一眼,在 [zerotier.sh]( https://github.com/chongshengB/rt-n56u/blob/master/trunk/user/zerotier/zerotier.sh#L34) 的 `add_join` 行后面增加复制 moon 文件的指令即可。比如:
    ```
    mkdir -p $config_path/moons.d
    cp 你的.moon 文件路径 $config_path/moons.d
    ```
    allenforrest
        32
    allenforrest  
       2021-04-08 12:40:58 +08:00
    @KAAAsS iOS 可以连 Android 开的热点,通过 Android 的自建 ZT 入网
    KAAAsS
        33
    KAAAsS  
    OP
       2021-04-08 13:34:55 +08:00
    @allenforrest 槽,那也太折腾了(
    xumng123
        34
    xumng123  
       2021-04-09 07:30:40 +08:00 via iPhone
    @KAAAsS 已经 ok 了,加入了 zerotier 加入 moon,支持了 vless+xtls 。github:xumng123
    feast
        35
    feast  
       2021-04-10 11:39:01 +08:00
    eell done
    fc790
        36
    fc790  
       2021-05-11 10:42:08 +08:00
    请问下如何生成 planet 文件呢,通过楼主的工具成功将 moon.json 转化为了 world.bin 并且在安卓机上用上了。我自己是建好了 zt+ztncui 的,现在要是能在官方 windows zt 客户端上把 planet 替换了,是不是就完全不用经过官方的 planet 了
    KAAAsS
        37
    KAAAsS  
    OP
       2021-05-28 22:43:42 +08:00
    @fc790 world.bin 改名成 planet 就是 planet 文件了 23333
    fc790
        38
    fc790  
       2021-05-31 16:50:10 +08:00
    @KAAAsS 哈哈,谢谢指导。一开始我也这样尝试过,不过没有连成功就以为不是这样的。现在经过肯定答复再一试,哈哈,的确是这样
    rinex20
        39
    rinex20  
       2021-07-02 15:14:27 +08:00
    @KAAAsS 请教一下几个 world.bin 如何合并到一个 planet 里面?
    KAAAsS
        40
    KAAAsS  
    OP
       2021-07-06 00:17:50 +08:00
    @rinex20 并不能直接合并(其实理论上可以,但是代码没写,我记得大概只要去掉第二个文件前两个字节就能合并),建议提取其中的设置到同一个 moon.json (可以接受数组),然后生成就行。
    wszgrcy
        41
    wszgrcy  
       2021-09-02 10:31:17 +08:00
    我在虚拟机里改了 ip 后编译的,但是为啥用命令查查不到我改的 ip...原来默认的是自带几个的...
    ```
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$ sudo ./zerotier-cli listpeers
    200 listpeers <ztaddr> <path> <latency> <version> <role>
    200 listpeers 3a46f1bf30 - -1 - PLANET
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$ sudo ./zerotier-cli peers
    200 peers
    <ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
    3a46f1bf30 - PLANET -1 RELAY
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$ ^C
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$ sudo ./zerotier-cli listnetworks
    200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
    200 listnetworks 382abc243c9a3eee abcd ee:06:b0:80:00:80 OK PRIVATE ztdqlcmgws -
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$ sudo ./zerotier-cli listnetworks
    200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
    200 listnetworks 382abc243c9a3eee abcd ee:06:b0:80:00:80 OK PRIVATE ztdqlcmgws -
    chenl@chenl-VirtualBox:~/桌面 /ZeroTierOne$

    ```
    ijklmq
        42
    ijklmq  
       2021-09-02 12:23:33 +08:00
    试用了下,tailscale 延迟 300ms,和 zerotier 差不多。zerotier+moon 延迟 20ms,快很多。
    wszgrcy
        43
    wszgrcy  
       2021-09-02 14:26:06 +08:00
    @wszgrcy 已经实现了...没改标识...
    KAAAsS
        44
    KAAAsS  
    OP
       2021-09-17 12:20:11 +08:00
    @wszgrcy 才看到(捂脸)重新编译的话记得删掉原来创建的 planet 文件
    wszgrcy
        45
    wszgrcy  
       2021-09-18 10:32:18 +08:00
    @KAAAsS 没改 id 那个 id,就是从 moon 中提取的那个
    KAAAsS
        46
    KAAAsS  
    OP
       2021-09-18 14:47:44 +08:00
    @wszgrcy 哦哦,原来是这个原因(捂脸)
    oocococo
        47
    oocococo  
       2021-09-24 11:05:17 +08:00
    @ijklmq tailscale 可以用自建的 derper,类似于 moon 节点,支持 ddns,因为 moon 节点配置需要用 ip 地址,不支持 ddns,之前就没用了,不知道现在什么情况? https://tailscale.com/kb/1118/custom-derp-servers/
    hisune
        48
    hisune  
       2021-11-01 19:11:36 +08:00
    @KAAAsS 大佬,你的项目还维护吗- -
    KAAAsS
        49
    KAAAsS  
    OP
       2021-11-25 13:39:21 +08:00
    @hisune 还维护的,就是我看 v2 不太频繁,有问题可以发 issue ~
    ixinshang
        50
    ixinshang  
       2022-11-29 22:40:29 +08:00
    转换工具好像,就是看到有人说可以自动分发 planet 。 还在找资料查
    ixinshang
        51
    ixinshang  
       2022-12-02 00:55:46 +08:00
    这个库没法发 issue,lhttps://github.com/kaaass/ZeroTierOne,就只有来 V2 问问 op 了。

    使用 mkmoonworld-x86 ,将 json 文件变成 world.bin 文件的时候,文件的以下信息没法自定义或者自动更新。
    ```
    INFO: generating and signing id==149604618 ts==1567191349589
    ```

    OP 有时间给看下不呢
    KAAAsS
        52
    KAAAsS  
    OP
       2023-01-07 12:52:55 +08:00
    @ixinshang 我不太常看 V2 ,才看到你的消息 ><

    目前这个工具确实是不可以自定义的。不过我个人有点好奇这个 use case 到底是啥,我感觉 ts 好像都没啥用来着
    fy
        53
    fy  
       321 天前
    效果很好,但是有一个问题就是,planet 服务器自己不能再部署一个 client 。也就是只有一台公网服务器情况下,不能实现把本地服务穿透到服务器上再反向代理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5503 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:03 · PVG 17:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.