最近尝试了一下自建frp与朋友进行Minecraft联机,过程不算很复杂,也不是很简单,中间遇到了一些大大小小的坑。所以写了这样一篇教程,希望对有类似的需求的小伙伴们能够有帮助。
用自己的电脑进行Minecraft多人联机,简单来说就是通过内网穿透,将自己电脑上的Minecraft服务端设置为可以通过一个公网ip/域名访问,这样其他人就可以通过ip/域名连接进来,一起进行多人游戏了。
frp就是其中一种可以实现内网穿透的工具。
写在前面
为什么要自建frp?可以使用网络上的免费frp服务吗?
我租了一台云服务器,平时除了维护一下自己的blog,基本等同于闲置。
如果你没有自己的服务器,还是建议直接通过Sakurafrp等第三方工具来进行联机,不建议专门为了自己建frp买一台服务器。网络上有很多相关教程,大家可以自行搜索。
如果你像我一样,已经有了自己的服务器,或者正有兴趣自己买/租一台服务器,就可以顺便在自己的服务器上搭设frp,解决联机玩游戏的问题,会比第三方服务稳定些,何乐而不为呢?
都有服务器了,直接开服不就行了,为啥非要弄frp这么麻烦?
我的服务器只是用来开blog,偶尔测试一些自己写的小玩意,性能很一般……
我不太了解Minecraft对服务器性能的要求,虽然我只是与1、2个朋友进行联机,应该不会一下子把资源全占满,但为了服务器上其他的服务能够正常使用,还是算了吧。相比之下,frp相当于只进行了数据的转发,对服务器资源的消耗比较小。
准备工作
本教程是以Linux服务器为例编写的,要按照本教程的步骤搭设frp,需要:
- 一定的Linux、shell知识
- 一台服务器(或VPS)
第一步:在本地运行Minecraft服务器/局域网游戏
这里有两种方式:在本地运行Minecraft服务端(相当于在自己电脑上开了个服务器),或者使用客户端中的“对局域网开放”。大家可以根据两个方案的优势和自己的实际需要自行选择。
1. 在本地运行Minecraft服务端
优点:
- 客户端、服务端相互独立。比如说,我临时有事,不能玩游戏了,但是我的朋友还想继续玩,我就可以电脑上只开一个服务端,别人就可以连进来接着玩,不受影响。
- 自由度更高,可以使用各种服务器插件,可以更灵活地分配op权限,不像局域网世界,只有游戏模式和允许作弊两个选项。
- 端口固定、可配置。
缺点:
- 麻烦。操作过程跟开服差不多了,只不过是在自己的电脑上。
下载及安装步骤(以Vanilla为例):
- 打开官方启动器,在”配置”选项卡中点击“新建”按钮。
- 通过下拉菜单选择好合适的版本后,点击下拉框右上角的“服务器”即可下载对应版本的服务器jar
- 将下载好的jar单独放在一个目录里方便管理,双击运行。运行后目录里会自动生成一些文件。
- 修改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
- 修改server.properties,这里按照自己的需要进行设置即可。下面只列出了两个比较关键的设置。
# Minecraft服务端的端口号,可以修改为其他值,但需要记下来,之后配置frp时会用到
server-port=25565
# 是否开启正版验证,true开启,false关闭,根据需要设置即可
online-mode=false
2. 使用客户端的“对局域网开放”
优点:
- 操作方便,不需要额外安装服务端。如果是你的单人存档,偶尔想要邀请好朋友来参观(或搬砖),非常适合选择这种方式。
- 可以很方便的更换联机地图,只要选择不同的存档进入游戏即可。如果使用方式1服务端,需要替换相应的文件并重启服务器。
缺点:
- 局域网游戏端口是随机的,每次开启都不一样,需要每次重新配置frp。
- 登录了正版账号的客户端通过局域网共享的游戏,只有登录了正版账号的客户端才能进入。
操作步骤:
- 打开游戏,打开你想要与好友联机的存档
- 按esc进入游戏菜单,选择“对局域网开放”
- 选择好游戏模式和是否允许作弊后,点击左下“创建一个局域网世界”
- 注意提示信息,这里的端口号非常重要,之后配置frp客户端时会用到
第二步:配置frp服务端
- 在github上下载对应版本的frp,通过ftp上传至服务器。也可以通过wget直接将文件下载到服务器。
$ wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz
- 解压
$ sudo tar xzvf frp_0.32.1_linux_amd64.tar.gz
其实到这一步,就算安装成功了,接下来的配置过程才是重头戏。
- 进入解压后的文件夹,编辑配置文件
$ 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
- 保存修改,启动frp服务
$ ./frps -c ./frps.ini
第三步:配置frp客户端(以Windows为例)
- 从github下载与自己电脑版本对应的frp
- 这次我们配置的是客户端,所以要编辑客户端配置文件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
- 运行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,是减少延迟和节省服务器流量的好办法。