饥荒联机优化方案:使用FRP实现内网穿透

背景

  • 我很喜欢玩饥荒。
  • Steam饥荒拥有最全、最新的mod。
  • WeGame中的模组都是搬运过来的,而且WeGame的饥荒游戏内容还遭到了一定的和谐。
  • Steam好玩,但是卡。
  • 众所周知,大多数的家用宽带都是运营商内网NAT模式,运营商默认的NAT模式都是带防火墙的,只允许出站然后响应回来,不允许入站主动请求。
    • 通俗点说就是一个请求出去,一段时间内这个请求回来允许回来。外面主动请求连接搭建的本地主机的话,就禁止访问了。
  • 这时候Steam就会动用其在海外的服务器对玩家的游戏流量进行转发,国内玩家联机的流量就会先出国,再回来所以ping动不动就300ms以上了。

解决方案

既然都是内网穿透,花生壳可以,我自己找一台云服务器也可以完成内网穿透。理论可行,开始实践。

准备

  1. 理你最近最快的拥有公网IP的云服务器一台。(配置2核2G3Mb已经够6到12人进行联机了)
  2. 本地主机一台。
  3. FRP安装包一个。

步骤

云服务器端

  1. 在云服务器上面上传适用版本的FRP安装包。
  2. 设置配置文件。
  3. 使用安装包中的frps启动服务端。

本地主机端

  1. 在本地主机上面下载适用版本的FRP安装包。
  2. 设置配置文件。
  3. 使用安装包中的frpc启动客户端。

游戏连接

  1. 启动游戏创建房间。
  2. 根据不同游戏采用直连的方式。
    • 例如饥荒使用控制台c_reconnect()命令进行联机;
    • 我的世界直接在连接地址输入云服务器IP进行连接。

注意

  • FRP会被Windows报病毒,需要手动添加到Windows Defender排除目录,以免被杀。
  • FRP需要到Git上面原项目下载更安全。

FAQ

我该如何设置我的映射端口?

根据不同的游戏需要设置不同的端口。

  • 举个例子,饥荒游戏开放在本地的10999端口,就需要设置本地的10999端口,映射到云服务器的10999端口,使用UDP协议。
  • 再举个例子,我的世界Java版本开放在本地的25565端口。

具体的游戏端口可以去搜索,亦或者使用某些命令进行查询。

更多推荐