frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp、udp、http、https 等协议。利用这个工具,在服务器上设置一个端口 x 用于服务器和本地电脑通讯,将本地电脑上运行的、开放在局域网的端口 a 的服务,映射到服务器的端口 A 上,这样不在局域网的用户就可以通过服务器的端口 A 访问本地电脑对局域网开放的端口 a 上的 Minecraft。

在本文介绍的方法中,需要花钱购置服务器。虽然也有免费方案,例如使用樱花 frp 内网穿透,但此类方法通常连接很不稳定,因此还是推荐自建服务器部署 frp。

配置服务器

购买服务器

由于游戏是在其中一个玩家的电脑上运行,服务器仅起到转发网络数据包的作用,因此不需要很高的配置,一般选最低配即可,例如 1 核 2G。

设置端口映射

可在服务器的控制台开放两个端口, 一个用于客户端和服务端的通信(可以设为 25564,备注“MC内网穿透”),一个用于其他玩家加入游戏所需填写的地址端口(可以设为 Minecraft 联机默认端口 25565,备注“MC公网地址”)。协议均选择 tcp。

配置 frp

下载 frp

frp 的 GitHub 下载地址为:https://github.com/fatedier/frp/releases。需要下载 Linux 和 Windows 两个版本(每个压缩包其实都包含了 Server 端和 Client 端,但我们只需要 Linux Server 和 Windows Client)。使用 uname -m 命令查看 Linux 服务器架构以确定下载什么版本。

服务端 frp 配置

Linux 包中名字含 frpc 的文件(Client)用不上,可以删除。进入解压后的文件夹,VS Code 打开 frps.ini,修改为以下样子:

[common]
bind_port = 25564

这个端口应该与用于客户端和服务端的通信端口一致,即 25564。设置完成后,可以使用 FileZilla 将这个文件夹内所有文件上传到服务器,推荐传到 ssh 刚连上默认进入那个目录里面名为 frp 的文件夹(需要自己创建),比如 /home/ubuntu/frp

然后 ssh 连接服务器,依次使用以下命令创建一个 screen 进程:

screen -S frp
cd /home/ubuntu/frp
chmod -R 777 .
./frps -c ./frps.ini

这几条命令的含义分别是新建 screen 进程、进入 frp 目录、修改文件权限、启动 frp。frp 若已成功启动会显示以下信息:

2023/09/27 21:43:38 [I] [root.go:204] frps uses config file: ./frps.ini
2023/09/27 21:43:38 [I] [service.go:206] frps tcp listen on 0.0.0.0:25564
2023/09/27 21:43:38 [I] [root.go:213] frps started successfully

按 Ctrl A + D 即可退出 screen 当前界面(进程仍在后台运行,screen -r frp 可重新进入)。

客户端 frp 配置

相似地,Windows 包中名字含 frps 的文件(Server)用不上,可以删除。进入解压后的文件夹,VS Code 打开 frpc.ini,修改为以下样子:

[common]
server_addr = <服务器的公网 ip>
server_port = 25564

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = <填写 MC 对局域网开放后显示的那个端口>
remote_port = 25565

common 中,server_addr 需填写服务器的公网 ip;server_port 是用于客户端和服务端通信的端口(25564);ssh 中,local_port 即 MC 对局域网开放的端口,remote_port 则是玩家从公网加入游戏所需的端口(25565)。

此外还需要一个脚本使得客户端启动时自动调用配置文件,在客户端文件夹下创建 start.bat 文件,VS Code 打开,修改内容如下:

frpc -c frpc.ini

之后要启动 frp 客户端,只需双击执行这个文件。

配置 Minecraft

安装 Lan Server Properties 模组

可在 Lan Server Properties – Mods – Minecraft – CurseForge 获取,注意需下载对应自己 MC 版本的版本;下载后将 .jar 文件放到 MC 安装目录的 mods 文件夹中(例如 .minecraft\versions\1.19.2\mods)即可。

在局域网开放游戏

创建并进入世界,按 Esc 键选择“对局域网开放”;若要加入的玩家不是正版账号,还需将“在线模式”改为“离线模式+UUID修复”;其他选项按需配置即可。

记住随后出现的提示是在哪个端口开放的,这个端口就是 frp 客户端要填的 local_port。若与前面配置 frp 客户端时填的不同,修改后重启 frp 客户端。

其他玩家加入世界

按如下格式填写多人游戏中的地址加入:

<服务器 ip 地址>:<客户端填的 remote_port>

注意冒号前后不要有空格。