问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

P2P联机游戏加速之ZeroTier方案

创作时间:
作者:
@小白创作中心

P2P联机游戏加速之ZeroTier方案

引用
1
来源
1.
https://crowya.com/3977

本文将详细介绍如何使用ZeroTier实现P2P游戏加速。文章首先解释了P2P和C/S的区别、内网穿透的概念和原理,并对比了几种主流的内网穿透工具。最后,提供了详细的ZeroTier使用教程,包括服务器端和客户端的配置步骤。

概念解释与思路说明

P2P和C/S的区别?

  • P2P:Peer-to-Peer,点对点,也叫端到端。简言之不需要游戏服务器。
  • C/S:Client-Server,客户端-服务器。简言之,除了玩家之外,有Server这个重磅角色参与调度。
  • B/S:Browser-Server,浏览器-服务器。简言之,还是有Server这个角色参与,只不过客户端是浏览器,感觉和C/S的概念区别不是很大。

内网穿透是什么意思?

这个名字确实搞得挺高深莫测的,但其实就是把局域网里的设备挂载上网,大概就这么个意思吧,这样就可以通过网络远程访问家里的电脑或者存储空间啦。P2P联机的话,大概也是需要把主机玩家内网穿透的,这样另一个玩家才能访问到主机玩家的电脑。我的理解哈,可能有不对的地方。所以,核心思路就变成内网穿透啦。

内网穿透为什么能降低P2P游戏的延迟?

原生的Steam P2P或者游戏厂商官方的P2P可能是绕了太多弯路,然后借助咱自己搭的中转服务,玩家之间能找到一条更直的捷径。


内网穿透并不是一定可以优化延迟。两个节点之间的速度,最优的情况一般是P2P直连。 除非两个节点之间直连速度很差,这种情况需要一个对两端线路都友好的中转服务器,只有此时通过中转服务器建立的连接会比直连速度好。

组建虚拟局域网降低延迟的情况是游戏不能自己建立P2P连接,所以需要借助第三方工具完成。在国内网络情况下,组建虚拟局域网的内网穿透工具,都会优先尝试直连,包括UDP打洞、NAT转发、IPV6等办法,也就是帮游戏完成了P2P的工作,此时速度自然是好的。[3]

内网穿透工具有哪些?为什么选ZeroTier?

内网穿透工具超级多的啦,我找到了三款最主流的开源软件对比:[4]

frp

FRP使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。frp内网穿透无需多复杂的配置就可以达到比较好的穿透效果,具有较强的扩展性,支持tcp, udp, http, https 协议,并且 web 服务支持根据域名进行路由转发。此外,FRP 提供了一种新的代理类型 XTCP ,可以在传输大量数据时让流量不经过服务器中转,用于实现点对点穿透,当然,此功能并不能保证在你的网络环境 100% 可用,成功率较低,而且还要求访问端也得运行 FRP 客户端 (目前手机端ios没有frp客户端软件)。由于实现条件较多,所以有文件传输需求的朋友但必须用frp的朋友还是建议买带宽稍大一点的 VPS 会比较省心。frp适合有linux基础的个人,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

ngrok

ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。主要用途是给网站或者安装开发提供部署环境,但是也同样可以用来进行端口转发。ngrok适合有linux基础的个人,和frp类似,但比frp配置稍复杂,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

zerotier

ZeroTier官方解释为将整个世界转变为单个数据中心或云区域,将所有设备,虚拟机和应用程序联接起来,就像在同一个交换机接入所有设备一样。zerotier类似VPN,为内网服务器所在NAT网络和客户机所在NAT网络各虚拟出一个VLAN,这样俩个VLAN就可以通过ZeroTier建立连接,在通过UDP打洞技术就可以实现内网服务器和内网客户机直接交互数据。目前ZeroTier提供的点对点穿透技术成功率还是比较高的,可以应付大多数网络,国内长城宽带无法点对点穿透。而zerotier因为是国外的项目,官方提供的中转服务器在国外,国内连接延迟高甚至连不上,所以官方给出了moons概念,可以自己搭建中转服务器。另外ZeroTier 支持 Windows、macOS、Linux 三大主流平台,iOS、Android 两大移动平台,以及 QNAP(威连通)、Synology(群晖)、Western Digital MyCloud NAS(西部数据)三个 NAS 平台,还支持 LEDE 开源路由器项目,支持客户端真的很多。zerotier适合有linux基础的个人,一般用于NAS,为了稳定性需要自购一个云主机做中转,服务器和客户机都需要安装zerotier,企业追求稳定可以考虑其他方式。

结论就是ZeroTier地表最强,P2P成功率高且支持的客户端最多。而且看了一个V2EX的帖子[5],更加坚定了我的信心。于是我就闭着眼睛选了ZeroTier,但是万万没想到,朋友的网络还真是长城宽带。。。虽然他组网失败了,但是这不影响我们教程的继续。

内网穿透等于P2P吗?

不等于,因为ngrok这款内网穿透软件就不支持P2P,所以肯定是两个概念。

ZeroTier使用教程

先说一下ZeroTier的一些名词概念:

ZeroTier整的还挺有浪漫主义气质,官方的服务器叫PLANET,用户自己建立的中转服务器叫MOON。

MOON服务器只起到一个握手的作用,在P2P打通后就没有MOON服务器啥事了,因此不用担心MOON服务器的延迟和宽带会影响联机体验,但是MOON服务器务必位于国内,如果服务器位于海外的话,数据经由GFW出口,可能无法顺利打通P2P。[6]

1. 官网注册并创建一个网络

官网地址:ZeroTier Central

创建完后如图。

我的

NETWORK ID

272f5eae16764cfa

2. 服务器端操作(非必须)

如果你的服务器是CentOS系统,作为Linux发行版的一种,可以直接通过SSH运行Linux命令安装ZeroTier的Linux客户端:


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

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


zerotier-cli join 272f5eae16764cfa

这里的

272f5eae16764cfa

换成你自己的

NETWORK ID

生成卫星服务器的配置文件

moon.json


sudo chmod 777 /var/lib/zerotier-one

cd /var/lib/zerotier-one

sudo zerotier-idtool initmoon identity.public > moon.json

修改

moon.json

,我是直接用宝塔面板文件管理修改的(建议新开一个标签页,不要关闭SSH)。

文件地址就在

/var/lib/zerotier-one

修改内容如下,写上自己服务器的公网IP:


"stableEndpoints": [ "139.224.16.2/9993" ]

其中

139.224.16.2

换成你自己服务器的公网IP,注意引号

"

不要漏掉。

注意:此处需要在阿里云防火墙放行

9993

端口,至于端口类型,有人说

UDP

有人说

TCP

,反正都放了吧。

之后生成

.moon

配置文件:


sudo zerotier-idtool genmoon moon.json

新建

moons.d

文件夹,并将生成的moon配置文件放进去:(也可以通过宝塔面板文件管理操作)


mkdir moons.d

mv 00000050cc09d260.moon moons.d/

其中

00000050cc09d260.moon

换成你自己生成的文件名,每个人生成的文件名不一样。这个文件需要下载保存,后面还会用到。

之后重启zerotier就好了:


sudo systemctl restart zerotier-one.service

重启好后,进入zerotier官网的网络配置,可以看到一个未验证设备接入,这个就是我们刚刚配置的moon服务器了,给前面的小框打勾,允许这个设备接入。

允许接入后可能要稍微等一段时间才会刷新出物理地址。

3. 客户端操作

凡是进行联机的玩家都需要进行客户端配置,包括你自己和你朋友。

先在官网下载ZeroTier Windows端的安装包。下载安装好后,在Windows开始菜单搜索zerotier启动。

然后输入

Network ID

来加入网络,并且在zerotier官网的网络配置里,允许这台设备的接入。

之后进入

C:\ProgramData\ZeroTier\One

文件夹,新建

moons.d

文件夹,并将之前生成的

00000050cc09d260.moon

配置文件丢进去。

之后打开任务管理器,转到【服务】选项卡,点击【打开服务】,重启一下zerotier。

之后打开命令终端(管理员)查看一下节点列表:


zerotier-cli listpeers

出现MOON服务器的IP地址,且不显示

-1

,即为连接成功。

除此之外可以看到还有四个官方的PLANET服务器也连接成功了。所以MOON服务器并不是必须项,饱和式救援而已。

LEAF是叶子节点,别的玩家会标记为LEAF。

ping一下MOON服务器的延迟(虚拟局域网IP在官网可以找到):


ping 10.147.17.244

最短延时是15ms,再次验证了连接成功。如果是三四百毫秒以上且丢包严重,那应该是有问题。

如果ping不通的话,可以关闭Windows的防火墙试试。开始菜单搜索防火墙打开控制面板。

如果不想完全关闭防火墙,可以在防火墙的

高级设置-入站规则

里启用这几个规则。

其他方法

如果ZeroTier失败了,也可以试试其他软件。但我还没有测试过。

  • frp教程:暑假将至,零基础自建内网穿透服务和朋友联机! – 哔哩哔哩 (bilibili.com)
  • 在NAT环境较好的情况下点对点打洞,也就是所谓的p2p,在NAT环境较复杂或者根本无法打洞的情况下通过服务器中转数据包:N2N-Client | Nya-WSL
  • 蒲公英游戏版,3人以下免费:游戏加速器|游戏联机平台|远程游戏 – 贝锐蒲公英官网 (oray.com)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号