音符·代码·脑洞

不想当程序员的歌手不是好指挥。

0%

用自己的电脑与朋友联机:Minecraft国际版联机教程——自行搭建frp

最近尝试了一下自建frp与朋友进行Minecraft联机,过程不算很复杂,也不是很简单,中间遇到了一些大大小小的坑。所以写了这样一篇教程,希望对有类似的需求的小伙伴们能够有帮助。

用自己的电脑进行Minecraft多人联机,简单来说就是通过内网穿透,将自己电脑上的Minecraft服务端设置为可以通过一个公网ip/域名访问,这样其他人就可以通过ip/域名连接进来,一起进行多人游戏了。

frp就是其中一种可以实现内网穿透的工具。

写在前面

为什么要自建frp?可以使用网络上的免费frp服务吗?

我租了一台云服务器,平时除了维护一下自己的blog,基本等同于闲置。

如果你没有自己的服务器,还是建议直接通过Sakurafrp等第三方工具来进行联机,不建议专门为了自己建frp买一台服务器。网络上有很多相关教程,大家可以自行搜索。

如果你像我一样,已经有了自己的服务器,或者正有兴趣自己买/租一台服务器,就可以顺便在自己的服务器上搭设frp,解决联机玩游戏的问题,会比第三方服务稳定些,何乐而不为呢?

都有服务器了,直接开服不就行了,为啥非要弄frp这么麻烦?

我的服务器只是用来开blog,偶尔测试一些自己写的小玩意,性能很一般……

我不太了解Minecraft对服务器性能的要求,虽然我只是与1、2个朋友进行联机,应该不会一下子把资源全占满,但为了服务器上其他的服务能够正常使用,还是算了吧。相比之下,frp相当于只进行了数据的转发,对服务器资源的消耗比较小。

准备工作

本教程是以Linux服务器为例编写的,要按照本教程的步骤搭设frp,需要:

  1. 一定的Linux、shell知识
  2. 一台服务器(或VPS)

第一步:在本地运行Minecraft服务器/局域网游戏

这里有两种方式:在本地运行Minecraft服务端(相当于在自己电脑上开了个服务器),或者使用客户端中的“对局域网开放”。大家可以根据两个方案的优势和自己的实际需要自行选择。

1. 在本地运行Minecraft服务端

优点:

  • 客户端、服务端相互独立。比如说,我临时有事,不能玩游戏了,但是我的朋友还想继续玩,我就可以电脑上只开一个服务端,别人就可以连进来接着玩,不受影响。
  • 自由度更高,可以使用各种服务器插件,可以更灵活地分配op权限,不像局域网世界,只有游戏模式和允许作弊两个选项。
  • 端口固定、可配置。

缺点:

  • 麻烦。操作过程跟开服差不多了,只不过是在自己的电脑上。

下载及安装步骤(以Vanilla为例):

  1. 打开官方启动器,在”配置”选项卡中点击“新建”按钮。

image-20200408203947919

  1. 通过下拉菜单选择好合适的版本后,点击下拉框右上角的“服务器”即可下载对应版本的服务器jar

image-20200408204112920

  1. 将下载好的jar单独放在一个目录里方便管理,双击运行。运行后目录里会自动生成一些文件。
  2. 修改eula.txt
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
eula=true
  1. 修改server.properties,这里按照自己的需要进行设置即可。下面只列出了两个比较关键的设置。
# Minecraft服务端的端口号,可以修改为其他值,但需要记下来,之后配置frp时会用到
server-port=25565
# 是否开启正版验证,true开启,false关闭,根据需要设置即可
online-mode=false

2. 使用客户端的“对局域网开放”

优点:

  • 操作方便,不需要额外安装服务端。如果是你的单人存档,偶尔想要邀请好朋友来参观(或搬砖),非常适合选择这种方式。
  • 可以很方便的更换联机地图,只要选择不同的存档进入游戏即可。如果使用方式1服务端,需要替换相应的文件并重启服务器。

缺点:

  • 局域网游戏端口是随机的,每次开启都不一样,需要每次重新配置frp。
  • 登录了正版账号的客户端通过局域网共享的游戏,只有登录了正版账号的客户端才能进入。

操作步骤:

  1. 打开游戏,打开你想要与好友联机的存档
  2. 按esc进入游戏菜单,选择“对局域网开放”

image-20200408213534548

  1. 选择好游戏模式和是否允许作弊后,点击左下“创建一个局域网世界”

image-20200408213624722

  1. 注意提示信息,这里的端口号非常重要,之后配置frp客户端时会用到

image-20200408213720537

第二步:配置frp服务端

  1. github上下载对应版本的frp,通过ftp上传至服务器。也可以通过wget直接将文件下载到服务器。
$ wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz
  1. 解压
$ sudo tar xzvf frp_0.32.1_linux_amd64.tar.gz

其实到这一步,就算安装成功了,接下来的配置过程才是重头戏。

  1. 进入解压后的文件夹,编辑配置文件
$ cd frp_0.32.1_linux_amd64/
$ ls //列出文件目录
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE  nohup.out  systemd
$ vi frps.ini

我们要编辑的是服务端配置文件,也就是frps.ini。文件名中的s就代表了server(服务端),对应的,文件中的frpc、frpc.ini等是客户端才会用到,这里直接忽略即可,看不顺眼可以删除。

下面是一个简单的frps.ini的例子:

[common]
# 客户端通过服务器的7000端口与服务器进行通信,也可以修改为其他端口
bind_port = 7000 
# token相当于密码,不是必须要,但建议设置一个,最好记下来,之后设置客户端会用到
token = 123456     
  1. 保存修改,启动frp服务
$ ./frps -c ./frps.ini

第三步:配置frp客户端(以Windows为例)

  1. github下载与自己电脑版本对应的frp
  2. 这次我们配置的是客户端,所以要编辑客户端配置文件frpc.ini。
[common]
server_addr = 你的服务器/VPS的公网ip或域名
# server_port填写之前在服务端配置中的bind_port
server_port = 7000
# token也是跟服务端配置里写成一样的
token = 123456

[minecraft]
type = tcp
local_ip = 127.0.0.1

local_port要填写本地Minecraft服务器或局域网游戏的端口,还记得之前记下来的端口号吗?填在这里。在server.properties文件中可以查看,或者在开启局域网后屏幕上的提示中会有端口信息

local_port = 25565

远程端口,指的是服务端监听的服务器端口,建议设置为25565

remote_port = 25565

  1. 运行frpc.exe

问题排查:检查服务器/VPS安全设置

其实,经过了上面的几步,搭建部分就已经完成了。但是很有可能,在进行了所有的设置之后还是无法成功内网穿透。这往往是由于服务器对应的端口没有开放外网访问的权限

frp服务端监听着两个端口,一个用来保持与frp客户端的绑定(服务端frps.ini中的bind_port,默认为7000),另外一个用来接收外部数据,然后转发给frp客户端(客户端frpc.ini中的remote_port)。因此这两个端口必须开放外网访问,否则是无法正常连接的。

具体的设置方式由于服务器/VPS提供商的不同有所差别,可以咨询你自己的服务提供商。

完成!

把你的服务器地址告诉小伙伴,他们就可以加入多人游戏了。

TIPS:

  • 如果在第三步,frpc.ini中的remote_port没有填写Minecraft默认服务器端口25565,则在多人游戏填写服务器地址时要指明端口号。
  • 如果你选择了在本地运行Minecraft服务端,你可以在自己连接服务器时将服务器地址填写为localhost,这样你自己在游戏时的数据不会通过服务器和frp,是减少延迟和节省服务器流量的好办法。