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

2021-04-07 10:56:30 +08:00
 KAAAsS

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

目前做的工作:

仍在开发的功能:

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

19245 次点击
所在节点    宽带症候群
54 条回复
WoodenRobot
2021-04-07 10:59:53 +08:00
因为这个原因我都转战 tailscale 了
KAAAsS
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
2021-04-07 11:02:07 +08:00
@WoodenRobot 现在可以再试试了 w
leavic
2021-04-07 11:21:03 +08:00
@WoodenRobot tailscale 没好的路由器客户端啊
WoodenRobot
2021-04-07 11:24:51 +08:00
@leavic 路由器有公网 ip 我直接 ddns,tailscale 老家没有公网 IP 的群晖连接用的
WoodenRobot
2021-04-07 11:27:58 +08:00
@KAAAsS 关注 github 了,回头再试试,主要是 zerotier 自建 moon 还得自己有服务器。tailscale 穿透效果刚刚的,基本上都能直接打洞成功,没有再用 zerotier 的动力了,特别是后面 tailscale 如果出了路由器端的话,感觉没有再用 zerotier 的必要了
gps949
2021-04-07 11:32:36 +08:00
@WoodenRobot
有路由器端解决方案啊,至少有 openwrt 上的解决方案。
求求尽量别网上扩散 ts,否则很快就该和 zt 差不多命运需要 moon 了
WoodenRobot
2021-04-07 11:53:32 +08:00
@gps949 刚看到,前两天刚出的,闷声发大财🐸
wszgrcy
2021-04-07 12:03:00 +08:00
支持自建地球节点吗?也就是不连 z ?
KAAAsS
2021-04-07 12:07:14 +08:00
@wszgrcy 可以,但是需要自己重新编译
KAAAsS
2021-04-07 12:11:41 +08:00
@WoodenRobot 感谢关注:)。我自己的情况是必须要中转节点,所以目前还是选择了 zerotier 。另外 zerotier 能增加多个 moon 也很不错。
allenforrest
2021-04-07 12:58:46 +08:00
点赞。

我提个建议,还是建议自建 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
2021-04-07 13:01:30 +08:00
墙裂支持
oneisall8955
2021-04-07 13:14:08 +08:00
moon 怎么填麻烦出个 Demo ? win 和 linux 复制 xxx.moon 文件到的 moons.d,安卓的怎么弄(=_=)
KAAAsS
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
2021-04-07 13:53:56 +08:00
@oneisall8955 在右上角的设置里选择“入轨”。之后添加一个配置,两处都填写你的 moon 地址即可。
826540272
2021-04-07 14:53:30 +08:00
都打洞的啊,能联通就行
826540272
2021-04-07 14:55:02 +08:00
看了下 实际意义应该仅限于两端都是对称性 nat 的网络环境。
oneisall8955
2021-04-07 15:28:43 +08:00
@KAAAsS #16 刚刚试了下,就是 moon 的 id ?,如 00000f12345.moon 那就填 f12345
oneisall8955
2021-04-07 15:29:54 +08:00
@oneisall8955 #19 PSS,试了下终于 4G 移动卡,终于打洞成功流程访问内网

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

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

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

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

© 2021 V2EX