kaaass / ZerotierFix

An unofficial Zerotier Android client patched from official client
GNU General Public License v2.0
1.79k stars 210 forks source link

在连接不到官方planet时无法只从moon中获取配置 #86

Closed Tokisaki-Galaxy closed 5 months ago

Tokisaki-Galaxy commented 5 months ago

您好,您所做的软件对我帮助很大,非常感谢! 我在使用的时候碰到一个问题。我已经阅读了所有开放和关闭状态的Issues,只找到一个处于开放状态的我个人认为似乎有关联的问题

84

我的网络环境

我校园网阻止了zerotier连接到官方planet服务器,但是可以连接到自行建立的moon服务器。 我连接到校园网的时候是无法连接到官方planet服务器,但是我在电脑上可以通过设立自建的moon服务器来获取配置,正常连接到zerotier网络。 但是我在使用这个软件的时候,我首先设立了peer服务器地址,其状态为cache。其次通过移动数据网络,确认可以正常连接到zerotier上的网络。然后我想通过和电脑客户端一样的办法,断开移动数据网络,使用校园网进行连接。

碰到的问题

在连接到校园网(无法直连到官方planet服务器)的时候,点击启动。首页下面首先是ONLINE状态。 点击打开网络,status显示是Requesting Configuration,在一段时间之后变成Not Connected,并且首页变成OFFLINE。 在电脑官方客户端,这里是可以正常连接的。

客户端中peer显示

peer

我的一点点猜测(瞎猜

似乎是电脑官方客户端可以通过获取到moon服务器地址之后,通过连接到moon服务器与其他LEAF取得通信。 但是在您的软件上,似乎这里没有正常实现,无法通过连接预先缓存的moon服务器来与其他LEAF通信。 我猜测如果不是这个问题,可能是因为 #84 提到的,无法自动尝试连接的问题,因为电脑官方客户端也是有时候需要几次尝试才能连上,但是我手机上多次尝试,并没有成功连接,所以关系可能不大,只是我自己想法罢了。

Tokisaki-Galaxy commented 5 months ago

客户端中的peer显示 之前上传的图片似乎无法显示,重新上传

Tokisaki-Galaxy commented 5 months ago

您可能会感兴趣的一些信息。 我在my.zerotier.com上面看到我的手机设备在启动连接后,虽然手机上一直显示请求配置,但是网页显示为LESS THAN A MINUTE,但是随着手机上出现Not Connected和OFFLINE的提示后,my.zerotier.com也提示离线。

kaaass commented 5 months ago

感谢报告!从你的截图来看 APP 已经成功连接 Moon 了,但是没有成功获取到网络配置。

考虑到你在使用官方 Controller,可以尝试下把 Moon 节点 join 到你的网络中。如果是用 Docker 建立的 Moon 可以 docker exec 一个 Shell 去 join。

Tokisaki-Galaxy commented 5 months ago

感谢您的回复。 我两台moon服务器在此之前都是裸机安装官方的安装包,系统环境ubuntu。并且已经作为节点加入到网络之中。 另外问题的复现应该比较好复现,我两台安卓设备在连接到校园网环境下均出现这个问题。如果需要更多配置或者日志我都可以提供。

kaaass commented 5 months ago

Hmmm,关键是能否连接到你 Network ID 前 10 位的那个 Peer。你目前可以在 Peer List 里面看到这个节点吗?如果有的话用的是什么 Path 呢?此外就是你的 Moon 节点机器的 /var/lib/zerotier-one/peers.d 中有没有这个 Peer 对应的文件。

我目前倾向于认为 PC 端会持续尝试连接这个 Peer 直到成功,而 APP 失败多次后就放弃了。但具体还需要我再确认下,以及这个行为对 APP 来说是不是比较合理也值得讨论讨论。

Tokisaki-Galaxy commented 5 months ago

您所提到的Network ID前10位的节点,我在电脑上可以看到

xxd49af6c2 1.12.2 LEAF      -1 DIRECT   2854     199252   35.209.27.253/35935     #真的见鬼,为啥延时都-1连不上还显示DIRECT

然后手机上在激活链接的时候,peer里面此节点状态是Latency:-1ms,路径是relay。然后在超时后peer里面不再显示任何连接。在激活客户端连接的时候,我可以在Moon服务器里面看到您的客户端的peer文件。但是这个文件似乎好像曾经连接过就会生成,不会自动删除。

另外我发现一些好玩的事情,手机在peer里面显示的信息,无法连接到Network ID 前 10 位的那个 Peer,但是多次尝试有几次可以连接到网络中的其他一个leaf(path为真实IP地址,似乎是直连).

最后,我发现似乎您的客户端里面如果意外断开连接(网络里面是NotConnect),外面显示的依然是绿色,似乎是没有即使更新。私以为如果可以更改为意外断开连接显示灰色会更好些。

kaaass commented 5 months ago

目前看起来应该是和 Controller 的连通性问题了。我的建议是来都来了要不要试试自建 Controller(逃)

如果意外断开连接(网络里面是NotConnect),外面显示的依然是绿色,似乎是没有即使更新

NotConnect 是表示单个网络无法连接,网络列表底部的 ONLINE 是表示能否连接到 Zt 的 VL1 网络(Planet 或 Moon)。不过由于现在同一时间只能连接一个网络所以确实非常迷惑,我想想怎么改改

Tokisaki-Galaxy commented 5 months ago

非常感谢您的建议。我对这点其实有点困惑,网上关于这方面的资料较少。 我只找到这两个https://docs.zerotier.com/controller/和https://github.com/zerotier/ZeroTierOne/tree/dev/controller。 这几天进行的搜索,其他非官方的渠道只找到了planet,moon方面的,对单独controller方面的说法较少,如果您抽时间解答我几个问题我会非常感谢

另外,之前我说的那个

如果意外断开连接(网络里面是NotConnect),外面显示的依然是绿色,似乎是没有即使更新

是指每个网络在首页右侧的那个长得像滑动开关的地方,在意外断开的时候显示仍然是绿色的,即使点进去是NotConnected。不是指首页下面的ONLINE/OFFLINE。

kaaass commented 5 months ago

Planet/Moon 是 Zerotier VL1 层的设施,主要用来辅助 Peer 之间的连接建立。Controller 是 VL2 层的设施,主要用来保存虚拟网的配置。一个虚拟网中的设备首先要接入 VL1 与 Controller 沟通,最后才能接入 VL2 中的一个虚拟网。

  1. 当然可以,不做 Planet 那步就可以。自建 Planet 与官方的其实不互斥,只是目前的工具没写入官方 Planet,所以要改改代码。然而不追求全自建其实没必要建 Planet,Moon 和 Planet 没有区别,用 Moon 就可以。
  2. 和问题 1 一样。ztncui 实际也不会创建 planet,只是部分第三方 Docker 镜像包含了这个功能。
  3. 不行,网络 ID 不可能保持不变。网络配置理论上可以迁移,但是目前也没人写脚本。

是指每个网络在首页右侧的那个长得像滑动开关的地方,在意外断开的时候显示仍然是绿色的,即使点进去是NotConnected

其实没有 “意外断开”。目前开关其实和 PC 端的 Join 是一个意思,因此如果某一个 VL2 虚拟网加入失败,网络的状态虽然会变成 NotConnected,但并不会自动 Leave 网络。此外,只要有任意一个开关是打开状态,VL1 就会保持连接。

不过确实这个逻辑挺反直觉的,尤其是现在只能 Join 一个网络。不过 v1 可能不会有比较大的逻辑调整了,可能改改显示文本。v2 再重新设计下。

Tokisaki-Galaxy commented 5 months ago

非常感谢您的解答,我去试试自己建立一个Controller,这方面的信息真的挺少的,您回复帮助了我很多。真的非常感谢!!