鹿友のKICO
文章35
标签18
分类7
ZeroTier One搭建MOON服务器

ZeroTier One搭建MOON服务器

完美解决Tabletop等和好友P2P联机延迟高的解决办法及相关踩坑

说明

该方法仅限P2P联机并且仅限好友之间联机

适用的游戏有tabletop桌游模拟器,雨中冒险2,枪火重生,森林,英灵神殿等需要一名好友开房的游戏,当然部分游戏可以直接搭建一个一直开启的游戏服务器,但是对服务器的性能要求较高.
而此种方法仅需非常低配的一个服务器即可,可以稳定联机不掉线,最多100人,当然所以方法都会受限于个人的网络质量。

提要和准备

本文可能可以解决大部分靠百度谷歌不能解决的问题,如有遗漏可下方留言,另外不接受过于低级的求助,感谢理解

需要的东西

一台云服务器,1核1G的即可,反正非常低配都行,windows server或者linux都可以
一个zerotier账户

STEP1

注册免费账户:

1
https://my.zerotier.com/ 

并创建NETWORK:
title.png/jpg
随后点进去:
title.png/jpg
复制下这个网络ID:
title.png/jpg

这个页面请暂时不要关掉

STEP2

[ 重要 ] 打开你的云服务器控制台,若开启了安全组,请先为安全组开启TCP和UDP的9993端口

打开你的云服务器

若是windows server去这里下载

1
https://www.zerotier.com/download/

windows安装完不会有提示,但你能在右下角看到一个他的小图标,就代表他安装好了
然后打开系统自带的防火墙,也开启TCP和UDP的9993端口

若是linux,直接使用命令安装和开端口,一行一个:

1
2
3
4
5
curl -s https://install.zerotier.com | sudo bash
/sbin/iptables -I INPUT -p tcp --dport 9993 -j ACCEPT
/sbin/iptables -I INPUT -p udp --dport 9993 -j ACCEPT
/etc/init.d/iptables save
service iptables restart

踩坑1

linux端若报错,看中间一段是否有这个

1
One of the configured repositories failed (未知), and yum doesn't have enoug...

若有请更换您的linux系统,务必保证是纯净版

STEP3

加入组网

windows:打开powershell,切记一定要管理员模式打开,输入命令,xxxxxxx是本文上方STEP1中的网络ID

1
C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe -q join xxxxxxxx

看到200 join OK即可

linux:直接使用命令,xxxxxxx是本文上方STEP1中的网络ID

1
zerotier-cli join xxxxxxx

看到200 join OK即可

STEP4

找到STEP1的网页,刷新一下,往下拉,找到这一块
title.png/jpg

并在前面打上勾,该页面就可以关闭了

然后回到云服务器

windows:用powershell输入命令重启服务,一行输完回车一下再输下一行

1
2
net stop ZeroTierOneService
net start ZeroTierOneService

linux这一步不需要操作

STEP5

windows:输入命令,一行一个命令

1
2
cd C:\ProgramData\ZeroTier\One
.\zerotier-one_x64.exe -i initmoon identity.public >>moon.json

然后打开C:\ProgramData\ZeroTier\One
找到moon.json并用notepad++或者vscode之类的打开,不建议记事本
可以看到里面的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "58df15c58d",
"objtype": "world",
"roots": [
{
"identity": "这里是一串字符,不用管",
"stableEndpoints": []
}
],
"signingKey": "这里是一串字符,不用管",
"signingKey_SECRET": "这里是一串字符,不用管",
"updatesMustBeSignedBy": "这里是一串字符,不用管",
"worldType": "moon"
}

修改其中的

1
"stableEndpoints": []

1
"stableEndpoints": ["xx.xxx.xx.xx/9993"]

此处的xx.xxx.xx.xx是你的服务器的公网IP
然后下面的客户端id即”58df15c58d”,每个人的都不一样,请复制好你自己的客户端id

1
"id": "58df15c58d"

然后看踩坑2

踩坑2

请注意windows端保存前,修改一下编码,确保是UTF-8编码
因为默认打开是UTF-16编码,会导致进行STEP6时出现:
zerotier-one_x64.exe已停止运行

linux:输入命令,一行一个命令

1
2
3
cd /var/lib/zerotier-one/
sudo zerotier-idtool initmoon identity.public >>moon.json
vi moon.json

然后会进入moon.json内,这时候按按键i左下会出现–insert–,说明可以进行编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "58df15c58d",
"objtype": "world",
"roots": [
{
"identity": "这里是一串字符,不用管",
"stableEndpoints": []
}
],
"signingKey": "这里是一串字符,不用管",
"signingKey_SECRET": "这里是一串字符,不用管",
"updatesMustBeSignedBy": "这里是一串字符,不用管",
"worldType": "moon"
}

修改其中的

1
"stableEndpoints": []

1
"stableEndpoints": ["xx.xxx.xx.xx/9993"]

此处的xx.xxx.xx.xx是你的服务器的公网IP
然后下面的客户端id即”58df15c58d”,每个人的都不一样,请记住你自己的客户端id

1
"id": "58df15c58d"

然后按按键ESC,左下角的–insert–会消失,这时候输入

1
:wq

即可退出并保存

STEP6生成签名文件

windows:接着上文的powershell继续输入命令

1
.\zerotier-one_x64.exe -i genmoon moon.json

会生成一个00000058df15c58d.moon文件,此处的58df15c58d就是STEP5中的客户端id
然后打开C:\ProgramData\ZeroTier\One
创建文件夹:moons.d
将生成的00000058df15c58d.moon复制进moons.d文件夹
然后再输入命令:一行一个

1
2
net stop ZeroTierOneService
net start ZeroTierOneService

此时你可以关闭powershell和文件夹了,服务器端就配置好了

linux:输入命令,一行一个

请将下面的第二个命令里xxxxxx改成STEP5中的客户端id后再运行

1
2
3
sudo mkdir moons.d
sudo mv 000000xxxxxx.moon moons.d/
sudo systemctl restart zerotier-one

此时你的服务器端就配置好了

STEP7客户端配置

  1. 开始配置需要联机的电脑,自己和好友都需要配置
    下载windows版
    1
    https://www.zerotier.com/download/
    并安装ZeroTier one.msi

和windows服务器端一样,安装完不会有提示,但你能在右下角看到一个他的小图标,就代表他安装好了

  1. 对windows开始菜单右键,用管理员方式,打开powershell
    输入指令,下面的xxxxxx改成STEP5中的客户端id

    1
    C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe -q orbit xxxxxx xxxxxx

    看到200 orbit ok 即可

  2. 然后再输入命令:一行一个

    1
    2
    net stop ZeroTierOneService
    net start ZeroTierOneService
  3. 运行完后请耐心等待10秒左右,再运行命令,查询IP

    1
    zerotier-cli listpeers

    看看有没有这一行:

    1
    200 listpeers xxxxxxxx xx.xxx.xx.xx/9993;2290;2290 31 1.8.4 MOON

    xxxxxxxx是STEP5中的客户端id, xx.xxx.xx.xx是服务器的公网IP, MOON不能是LEAF
    这三个都存在且对的上即可开始联机游戏了,自己和好友都要设置

若遇到不是MOON而是LEAF,请看踩坑3

若遇到:

1
200 listpeers - - 1 - MOON

请看踩坑4

踩坑3

若遇到不是MOON而是LEAF,一般是之前装过该软件的缘故,请使用GEEK软件卸载Zerotier,它自带清除文件夹和注册表功能,然后重启电脑后再重新进行STEP7

踩坑4

部分网络会遇到这样的情况,因此需要额外步骤:

  1. 对着右下角小图标右键并选择红色框中的东西
    title.png/jpg

在下方加入填入xxxxxxx并加入,xxxxxxx是本文上方STEP1中的网络ID:
(如果右边弹出是否允许发现选“是”,没有就不管)

  1. 选择上方右边的:↓
    吧下方的四个选项全打上勾即可
    这时再运行命令,查询IP
    1
    zerotier-cli listpeers
    看看有没有这一行:
    1
    200 listpeers xxxxxxxx xx.xxx.xx.xx/9993;2290;2290 31 1.8.4 MOON
    xxxxxxxx是STEP5中的客户端id, xx.xxx.xx.xx是服务器的公网IP, MOON不能是LEAF
    这三个都存在且对的上即可开始联机游戏了

额外部分

如何临时关闭和开启

Powershell管理员模式运行:

1
net stop ZeroTierOneService

若想再次开启:

1
net start ZeroTierOneService

关于开机自启

由于这个软件是以服务形式启动的,默认开机自启,不会影响正常上网,但如果你想它开机不自启。
请使用WIN键+R键打开运行,并输入:services.msc
在服务列表里找到ZeroTierOne服务,打开属性并设置为手动
需要使用时运行命令启动即可:

1
net start ZeroTierOneService

关于卸载

(垃圾软件卸载居然还有残留)
强烈建议使用GEEK软件等卸载,卸载完自动扫描残留文件夹和注册表并清理

关于效果

如若觉得使用后效果不好,可以测试ping组网IP和ping真实ip对比,若觉得不好用可以卸载换其他方案,比如usbeam,p2p party,游侠对战平台等等

本文作者:鹿友のKICO
本文链接:https://www.594594.xyz/2022/02/03/moon_for_zerotier/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×