打洞不成功?来试试 ZeroTier 自建 Moon 中转吧~

发布日期:2024-03-03文章字数:0.7K

什么?网络条件差劲打洞不成功?还有多的服务器?那就来自建 Zerotier 的 Moon 中转吧~

关于 Zerotier 的使用可以参见之前的一篇文章 使用 ZeroTier 进行 Minecraft 多人联机

自建 Moon 中转

有多的服务器的话,可以试试自建 Moon(中转),来解决朋友网络条件差劲死活互联不了的情况

正常情况下,如果无法打洞直接互联的话,流量会通过 ZeroTier 官方提供的 Plant 来传输(延迟会特高,还容易断流,毕竟大陆内外之间各种干扰阻断嘛……

以我服务器的 Debian 为例(其它系统也是差不多的操作)

安装 ZeroTier

curl -s https://install.zerotier.com | sudo bash

加入网络

zerotier-cli join <Network ID>

生成 Moon 配置文件

cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json

编辑 Moon 配置文件

{
  "id": "96******8c",
  "objtype": "world",
  "roots": [
    {
      "identity": "96******8c:0:******",
      "stableEndpoints": []
    }
  ],
  "signingKey": "signingKey",
  "signingKey_SECRET": "signingKey_SECRET",
  "updatesMustBeSignedBy": "updatesMustBeSigned",
  "worldType": "moon"
}

然后用编辑这个文件,把 "stableEndpoints": [ ] 改为 "stableEndpoints": [ "服务器的公网 IP/9993" ] 后保存

id 字段即为 Moon 节点 ID,后续入轨需要用到的

创建 Moon 文件

zerotier-idtool genmoon moon.json

终端会打印创建的信息,比如 wrote 00000096******8c.moon (signed world with timestamp 1709449863165)

然后再创建 Moon 自启文件夹 moons.d,把生成的 00000096******8c.moon 文件复制进去(其中,文件名除去前头的零即为 Moon 节点 ID,后续入轨需要用到的

最后用命令 systemctl restart zerotier-one 重启服务器上的 Zerotier 就可以正常使用 Moon 了

如果云服务器厂商有防火墙规则,记得去添加一下规则,0.0.0.0/0 任意 IP 流量,允许 9993 端口的所有 UDP 流量

加入 Moon

直接终端键入即可加入

zerotier-cli orbit <Moon 节点 ID> <Moon 节点 ID>

或者将生成的 00000096******8c.moon 文件复制到需要加入的那个客户端对应的 moons.d 文件夹中(没有就自己新建文件夹)

  • Linux: /var/lib/zerotier-one/moons.d/
  • macOS: /Library/Application Support/ZeroTier/One/zerotier-one/moons.d/
  • Windows: C:\ProgramData\ZeroTier\One\moons.d\

目前 Android 和 iOS 的官方客户端不支持入轨的操作

Android 可以使用第三方客户端 ZerotierFix 来入轨,其 GitHub 开源地址为 kaaass/ZerotierFix

iOS 目前的话暂无第三方客户端,但可以通过直接用代理连接到服务器来「曲线救国」(

碎碎念

(联机是没有联了,组网是玩起来了……

参考