前言
作为一个重度桌游爱好者,最近和小伙伴沉迷TTS(桌游模拟器),但是TTS是基于P2P进行连接的,如果小伙伴都不在一个网络节点上就会非常卡顿,为了更好的玩游戏,最后使用了基于zerotier的内网穿透方案
用上了内网穿透之后,再也不会掉线了,桌游体验极其完美
- 原理
- 购买服务器
- zerotier虚拟节点搭建
- 服务器运维
- 客户端配置
原理
我只是前端,具体的运维技术我不是太了解,但是大致原理可以理解为:
1.P2P
P2P是用户与用户直连,某一个玩家作为主机,其他人去连接他的节点
但是我们都知道,这很取决于主机玩家的网络状况,而且因为是直连,延迟非常感人
只要主机玩家网络一波动,大家就都掉线了
2.内网穿透
内网穿透就是我们所有客户端去连接一个节点,然后通过这个节点分发数据,进行直连
这个节点就是zerotier
但是zerotier服务器在国外,直连的话网速感人,我们就需要我们的个人服务器作为一个中转站,所有客户端连我们的国内服务器,服务器加速客户端之间的互相访问(因为服务器是公网ip,直连延迟就非常低)
购买服务器
本人用的阿里云个人服务器,基于linux和node搭建的后端,带宽不需要很高即可
购买服务器的可以参考我写的
个人网站搭建保姆级教程(1)-服务器购买与环境搭建_皮宁澜的博客-CSDN博客
zerotier虚拟节点搭建
zerotier可以理解为一个简单的内网穿透管理器,方便我可爱的小伙伴们快速连接到我的服务器,实际传输其实是靠我们的服务器的
1.zerotier注册
ZeroTier Central
zerotier的官网非常简洁轻快
之后点击 Create A Network,选择private(个人服务器)
根据不同需求,zerotier支持创建很多个NETWORK
这样你就相当于有了一个内网穿透的账户,而且会生成一个NETWORK ID,将ID复制下来
2.服务器连接
之后在服务器配置zerotier,对于一般的linux系统,只需要一串命令就好
curl -s https://install.zerotier.com | sudo bash
以管理员身份在服务器上安装zerotier
其他操作系统可以访问
Download – ZeroTier
下载好后,我们就可以进行登陆了,linux输入
zerotier-cli join XXXXXXXX #刚刚在zerotier官网上创建生成的NETWORK ID
最后,我们还要去zerotier官网上将我们刚刚join的操作进行一个通过
第一个设备为我的个人电脑测试用,第二个设备为我的服务器,一直保持运行状态,实际运用只需要服务器保持连接就好
服务器运维
现在服务器已经连接到zerotier了,但是还需要配置一下客户端文件
打开服务器的zerotier目录(如果是linux系统,在/var/lib/zerotier-one)输入
zerotier-idtool initmoon identity.public >>moon.json
这样会生成一个卫星服务器(moon)的配置文件moon.json
我们通过记事本打开moon.json,将其中的
"stableEndpoints": [ ]
改为
"stableEndpoints": [ XXX.XX.XX ] //你的服务器的公网IP
改好后新JSON文件覆盖原来的JSON文件
覆盖好后执行命令
sudo zerotier-idtool genmoon moon.json
这样,zerotier会读取我们刚刚的moon.json并生成一个.moon文件,我的是00000039c1ef6855.moon(每一个机器生成的moon文件不一样)
我们需要将这个.moon文件保存一下,等一下客户端会用到
最后,我们只需要重启一下我们的崭新出厂的卫星服务器就好了
在我们刚刚的 /var/lib/zerotier-one 文件夹下面,手动创建一个新文件夹moons.d,将刚刚生成的 .moon文件放进去
其他操作系统在对应的zerotier文件夹里面
然后重新启动我们的zerotier服务即可
service zerotier-one restart
客户端配置
客户端的配置就很简单了,而且是一次配置,终身享用,开机即启,无感直连。
1.下载zerotier并安装
Windows系统:
官网下载Download – ZeroTier
linux系统:(终端执行)
curl -s https://install.zerotier.com | sudo bash
如果下载速度慢可以直接网上找下载包
2.拿到刚刚服务器上生成的.moon文件
(1)客户端是linux系统
把.moon文件放到对应zerotier文件夹下新建的moons.d文件夹里面,执行命令
service zerotier-one restart
(2)客户端是Windows系统
打开计算机中的‘服务’
找到zerotier服务,右键,点击属性,打开zerotier目录
找到这个地址,打开这个地址(默认是C:\ProgramData\ZeroTier\One)并新建一个moons.d文件夹,把我们刚刚服务器生成的.moon文件放进去
之后回到服务页面,重启zerotier服务
最后打开命令行(cmd,或者搜索命令提示符)
输入zerotier-cli listpeers并回车
出现这一行即可
这样的话,客户端的zerotier会自动识别到我们卫星服务器(moon)。而且与在同一moon服务器下的客户端通过P2P传输数据的时候,会自动使用我们的卫星服务器。
而且每次开机会自动开启服务,以后直接连就可以了
后记
正好我有个人服务器,捣鼓了半个下午终于搞定,当天就和小伙伴开TTS开到凌晨
之前我们三人直连,互相的延迟大概都是400ms,而且总是断,现在内网穿透之后,延迟稳定在20ms,再也没有掉线的情况了。小伙伴们普遍使用体验极其良好
当然了,P2P内网穿透不光可以用在玩游戏上,用我这一套,相当于所有设备都在一个局域网下面,那想干什么都可以了~(共享文件,远程连接等等)
文章来源:https://www.toymoban.com/news/detail-472392.html
有一位小伙伴被隔离了,就只能通过线上一起玩桌游了文章来源地址https://www.toymoban.com/news/detail-472392.html
到了这里,关于基于个人服务器的P2P内网穿透的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!