InternetBugs's home

一个分享互联网知识的个人博客

使用zerotier优化P2P游戏联机体验

开篇废话
最近被朋友拉去玩战锤,联机体验实在是差到飞起,打场仗三秒一停的,二十分钟的攻城战愣是打了三十分钟才结束,开了加速器都无解。

于是我猜测,这游戏应该是通过P2P联机的,但是由于我们两个的运营商不同,网络不互通,又没有公网IP,数据可能经由战锤官方的服务器进行中转了,所以丢包特别严重,如果能够构建虚拟局域网,应该能优化联机体验,于是我找到了个叫zerotier的软件,可以构建虚拟局域网,让我们在没有公网IP的情况下也能P2P联机,来优化联机的体验

准备条件

  • 脑子和手
  • 一台中国大陆vps

正式流程

创建zerotier网络
进入zerotier官网(ZeroTier Central),注册账号,创建一个网络
3ce9cc8e83c0a3c2bb9a5911596fb39246628c29.jpg
创建好后保留默认设置就好
这里记一下Network ID,等会要用到
搭建MOON服务器
zerotier的服务器都在海外,因此我们国内用户使用时可能会出现无法连通P2P的情况,这样会导致所有流量都经由zerotier官方服务器中转,延迟和丢包会非常严重
因此我们可以搭建一个moon服务器,moon服务器相当于一个中转服务器,可以保证我们能够顺畅打通P2P,保证低延迟和不丢包
因为moon服务器只起到一个握手的作用,在P2P打通后就没有moon服务器啥事了,因此不用担心moon服务器的延迟和宽带会影响联机体验,但是moon服务器务必位于国内,如果服务器位于海外的话,数据经由GFW出口,可能无法顺利打通P2P
至于服务商的选购,这里就不多叙述了,推荐一下阿里云和腾讯云的学生机,9元一个月,我这里用的是腾讯云的无忧服务器,15元一月,数据中心位于广州
ssh进vps后,输入以下命令来安装zerotier

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

安装执行完成后,加入zerotier局域网

zerotier-cli join <network id>

生成配置文件

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

之后编辑moon.json(vi编辑器的用法可自行上网搜索)

vi  moon.json

修改内容如下,添加自己vps的公网IP

"stableEndpoints": [ "vps公网IP/9993" ] 

之后生成moon配置文件

sudo zerotier-idtool genmoon moon.json

新建moons.d文件夹,并将生成的moon配置文件放进去(注意,每个人的moon配置文件文件名不一样,我这里的是0000001ae3f8ae77.moon,执行命令前请修改成你自己的配置文件的文件名)

mkdir moons.d

之后重启zerotier就好了

sudo systemctl restart zerotier-one.service

重启好后,进入zerotier官网的网络配置,可以看到一个未验证设备接入,这个就是我们刚刚配置的moon服务器了,给前面的小框打勾,允许这个设备接入
cabafb32e2c79c27bc4a0e6f26420732b5335b22.jpg
至此,moon服务器配置好了,接下来来到客户端配置
客户端配置
注意,你和你一起联机的朋友都需要进行客户端配置
先在官网下载zerotier Windows端的安装包
下载安装好后,你会发现啥界面都没有,不要以为没安装上(我就是以为没安装上,重复安装了十几遍)
在Windows开始菜单搜索zerotier就能找到它了
双击启动后就会在任务栏里出现了
右键任务栏的zerotier,打开zerotier控制面板
aab0f4c4a3b8dad666b6d8b75f7ee0b26a22d203.jpg
在#######的框里输入你的Network ID来加入网络,加入成功后如图所示
然后在zerotier官网的网络配置里,允许这台设备的接入
ee62be9ac601fb6d5e13a6339c2daab6c4791ae3.jpg
之后进入C:\ProgramData\ZeroTier\One文件夹,新建moons.d文件夹,并将之前在moon服务器生成的moon配置文件丢进去
280d77a7fb4bc91406f37fb0d7394cec8f2ea375.jpg
之后打开任务管理器,转到【服务】选项卡,点击【打开服务】,重启一下zerotier
af1fb5d3c6b3178c0402393474c3d6f7943d410e.jpg
之后在命令终端里查看一下节点列表

zerotier-cli listpeers

出现moon服务器即为成功
c97c5aa66f55b64bc8072f6b8d15f0001112bccf.jpg

游戏体验

搭建了虚拟局域网,实现了P2P联机后,战锤的联机游戏体验明显好了很多,丢包变得少了很多,打仗不会出现三秒一停的情况了
理论上来说所有P2P游戏的联机都能这样优化,倘若是帝国霸业这样需要启动服务端的游戏,只要在多人游戏里连接主机端的内网IP即可

发表评论

电子邮件地址不会被公开。 必填项已用*标注