赞
踩
最近和两个表妹一起玩星露谷物语,但是这个游戏的 steam 联机国内超卡,所以我搭了 FRP 内网穿透服务。过程中了解到ZeroTier ,就顺手做了 ZeroTier 和 FRP 的测速对比实验。
轻量级腾讯云:公网IP,出站带宽 6Mbps,部署 FRP 服务器 和 Zerotier moon
主机1:组装台式机,windows10,中国联通宽带,100Mbps 下载 / 40Mbps 上传
主机2:Macbook Air 2014,windows10,中国联通手机流量,200Mbps下载 / 50Mbps 上传
此时 主机1 和 主机2 都没有公网IP,无法实现直连
下载速度,上传速度,延迟,抖动
psping:用于测试延迟,抖动
iperf3:用于测试下载速度,上传速度
speedTestX:docker版,用于测试所有指标
延时与抖动
上传速度
下载速度
延时与抖动
上传速度
下载速度
在测试条件下
ZeroTier 的 网络速度比 FRP 快很多
ZeroTier 的 网络延时 和 FRP 差不多
ZeroTier 的 网络抖动 高于 FRP
可以看到 FRP 这种转发服务,测试结果接近腾讯云的带宽上限 6mbps;
ZeroTier 的测试结果远高于 6mbps,可见它的原理不是全转发,应当是使用了 TCP 打孔,因为网络同属中国联通所以比较成功。推测如果 主机2 从中国联通的手机流量换成中国移动的手机流量,传输速度可能会大受影响。
本文假定以星露谷联机为目的。
FRP 的原理不难理解,就是转发。将公网 IP 服务器的一个端口接收到的所有数据,转发到内网 IP 的主机上,这样就使得内网 IP 的主机仿佛拥有了公网 IP 一样。
登录腾讯云,下载 FRP,编写配置文件,frps.ini
[common]
bind_port = 7939
token = xxxxxxxxxxxxxxxx
bind_port 是 绑定本地端口。
token 是 密钥,使用这个服务器的凭证。
到腾讯云的防火墙面板放行 TCP 7939 端口。
然后写一个小脚本 frp_start 用来启动 FRP 服务器。
#!/bin/bash
nohup ~/frp/frps -c ~/frp/frps.ini > frp.log 2>&1 &
运行脚本,FRP服务端搭建完成。
cat frp.log
查看运行日志,ps -ef|grep frps
查看进程。
来到星露谷主机的 windows 主机1,下载 FRP,编写配置文件,frpc.ini
[common] server_addr = 172.7.76.71 server_port = 7939 token = xxxxxxxxxxxxxxxx [stardew-valley] type = udp local_ip = 127.0.0.1 local_port = 24642 remote_port = 24642 [iperf3] type = tcp local_ip = 127.0.0.1 local_port = 5201 remote_port = 5201 [iperf3-u] type = udp local_ip = 127.0.0.1 local_port = 5201 remote_port = 5201
server_addr 腾讯云的公网IP
server_port, token 和 frps.ini 一样
下面是三个隧道,stardew-valley 用来联机星露谷,剩下两个用来做速度测试。
local_port 是本地端口,remote_port 是服务端端口,
stardew-valley 隧道 会把本机的 24642 udp端口,映射到腾讯云 172.7.76.71 的 24642 udp端口。
到腾讯云的防火墙面板放行 UDP 24642,TCP 5201,UDP 5201。
然后在主机1上运行 frpc,保持此程序一直运行。
frpc -c frpc.ini
主机1 正常建房,另外两个星露谷玩家在联机窗口直接输入 172.7.76.71 即可。
ZeroTier是虚拟局域网,所有用户通过 ZeroTier-one 连接到一个虚拟化的局域网中。这种方案所有用户都必须安装使用 ZeroTier-one
在 ZeroTier 网站上注册账户,创建网络,并把 network ID 记录下来。
然后参照官网在所有要参与联机的节点上都安装 zerotier-one。
加入网络(如果是windows,可以用 ZeroTier-ui 图形化操作)
sudo zerotier-cli join db64858fxxxxxxxx
注意加入后,还要等待批准,在 ZeroTier 网站上可以看到已加入的节点,把前面的 Auth? 复选框选上即可批准,服务器会自动给该节点分配虚拟局域网的 IP。
该命令可以确认自己的 IP。
sudo zerotier-cli listnetworks
ZeroTier moon 服务器需要公网IP,因此用腾讯云来搭建。
cd /var/lib/zerotier-one
sudo -s
zerotier-idtool initmoon identity.public >>moon.json
vim moon.json
vim 修改这一条"stableEndpoints": ["172.7.76.71/9993"]
,填入 公网IP 和 端口
zerotier-idtool genmoon moon.json
可以看到生成了一个类似 000000xxxxxxxxxxx.moon 的文件,新建 moons.d 文件夹并将此文件移入
mkdir moons.d
mv 000000xxxxxxxxxxx.moon moons.d
然后重启 zerotier-one 服务
service zerotier-one restart
zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]
这里注意 ID 要写两次。这条命令要在所有节点上全部运行一遍。
在非 moon 节点上执行如下语句验证 moon 节点是否添加成功
zerotier-cli listpeers
应当可以看到类似
200 listpeers xxxxxxxxxx 172.7.76.71/9993;4214;4090 124 1.10.1 MOON
则说明 moon 节点设置成功。
主机1 用 ZeroTier-ui 图形界面看一下自己的 IP,或者用 zerotier-one-cli listnetworks
获取。
然后正常建房,其他玩家输入主机 IP 即可。
最终选择 FRP 来联机星露谷。
游戏联机传输的数据通常都很少,决定联机体验的关键是延迟和抖动。因此 ZeroTier 速度快的优势无法发挥。
更关键的是,选择 FRP 的话,只有主机需要折腾 FRPc,其他玩家只需要知道一个 IP 就行,ZeroTier 要一人装一个,对于非专业人士来说比较劝退。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。