饥荒联机版内网穿透方法

饥荒联机版内网穿透方法及常见问题解答

最近在用内网穿透搞局域网联机,记录一下过程和踩的坑。

饥荒本身是支持局域网联机的,所以只要映射好端口,就可以使用很低的服务器代价来实现一个很流畅的联机体验。

内网穿透方案

内网穿透的方法有很多,比如可以使用现有的软件或者自己租一台云服务器部署一下frp

现有软件

使用现有软件相比之下比较简单,这里就不多说了,可以自己随便搜一款软件,付费或者免费都行,只要能实现内网穿透。

比如 SAKURA FRP (之前用过目前不知道怎么样了)

创建一个 主世界 一个地穴 的udp隧道,默认端口应该是 10999 和 10998。

租云服务器

  • 这里只要是一台云服务器就行,预计能有1C1G 带宽3M 基本上就可以轻松跑好内网穿透。
  • 也可以考虑不同运营商的试用,就可以免费白嫖了,不过租一个阿里云的ECS低配服务器一年也才99元,还是挺划算的。

租好自己的服务器之后,在服务器上从frp的github网站上下载一下release包比如

wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz

这样就能拿到0.62.1版本包了,或者在windows电脑上把这个包下下来,然后通过scp把这个包上传到服务器上,scp命令格式是:

scp [源文件] [目标路径]

比如在下载路径下面使用

scp frp_0.62.1_linux_amd64.tar.gz root@host:/root/

把host换成自己的云服务器公网ip,就可以把文件上传到root用户的root根目录下面了。

然后输入

tar -zvxf frp_0.62.1_linux_amd64.tar.gz

解压这个包 就可以在服务器上面看到frp_0.62.1_linux_amd64这个文件夹,

cd frp_0.62.1_linux_amd64

到这个文件目录,接下来就是服务器frp这边的配置了,下面会详细讲解。

接着是,这里还需要下载一个windows版本的安装包在你玩饥荒的那台电脑上运行,比如 frp_0.62.1_windows_amd64.zip 这个安装包,下载解压出来。

注:压缩包要下载和自己 系统_处理器 对应的的版本

服务器frp配置

服务器主要运行的是frps这个frp的服务端程序,默认带有的配置文件是 frps.toml,可以使用 vim frps.toml 打开这个文件,或者使用其他的方法(比如vscode ssh连上服务器直接修改都行),

推荐将配置改为如下样子,即添加一个token认证,密码自己填(不改也可以,只是为了安全考虑)

# frps.toml # 服务端监听的端口 bindPort = 7000 # token认证 [auth] method = "token" token = "123456"

然后使用

nohup ./frps -c frps.toml > frps.log 2>&1 &

命令后台执行frps并将日志文件写到frps.log中。

使用 tail -f frps.log 查看出现日志 [I] [frps/root.go:114] frps started successfully就代表着启动成功了。

服务器防火墙配置

服务器这边需要开启对应端口的权限,如果是阿里云服务器则是在 网络与安全 中添加入方向规则。 需要添加的规则是

开启 udp 10888/11000 的端口 用于饥荒联机版的内网穿透使用。

另外推荐也直接开放 tcp/udp 6000/7000 之间的端口给其他游戏用。

至此,服务器这边配置全部结束。

客户端配置

从pc上解压那个压缩包,然后将frpc.toml配置文件

serverAddr = "xxx" # 你的frp服务器ip serverPort = 7000 # frp服务器的端口号 # 之前推荐的token ,不加就省略这两行 # 写法和之前保持一样也可以 都可以识别正确 auth.method = "token" auth.token = "123456" # 地表世界的节点配置 [[proxies]] name = "DST-MASTER" type = "udp" # 一定要是udp localIP = "127.0.0.1" localPort = 10999 # 填地表世界的端口号 默认10999 remotePort = 10999 # localPort 和 remotePort 请务必保持一致且和饥荒存档中提供的端口一致! # 详细原因见后 # 地穴的节点配置 [[proxies]] name = "DST-CAVES" type = "udp" localIP = "127.0.0.1" localPort = 10998 # 填地穴的端口号 默认10998 remotePort = 10998

在命令行中运行,frpc.exe -c frpc.toml 即可。

运行游戏

一切普通创建存档就可以了。

加入服务器则使用 c_connect("ip", port) 来加入

常见问题

主要处理思路是,查看 server_log.txt 看看报错是为什么。

加不进服务器,服务器无应答

  • 看下自己端口是否正确开启,防火墙是否开了,frp启动是否正确。

授权失败

  • 主机开启加速器
  • 原因是,加入房间之后,服务器会拿他的steam_id去验证用户是否合法,授权失败大概率是验证超时了,查验log显示443超时

能正常进入主世界,但是进入地穴被踢出去,显示服务器无应答,使用c_connet链接地穴端口显示需要密码

  • 主要问题是,地穴服务端口和内网穿透端口不一致,将端口统一一下就可以了。

  • 原因猜测是这样的,当使用c_connect进入到正确的主世界之后,一切正常,在进入地穴时,饥荒内部逻辑会将这边下线并尝试链接地穴的服务器,假设也是按照c_connect逻辑链接,那它的端口号就是饥荒游戏配置中地穴的端口号,即10998。这时由于没有配置10998的端口映射,就会发现找不到这个端口而连接失败。

  • 至于为什么显示需要密码,而且输入任何密码都无效,就不是很清楚了。但是猜测是没有识别到正确的服务器然后报错信息给的不对……

  • 同样的,如果主世界服务器端口也不太一样,也会导致从地穴出来的时候,连接失败或者需要密码。