前言
作为一名 Minecraft 玩家,有的时候难免会需要搭建一台 Minecraft 服务器。若是本地搭建,由于没有公网 IP,玩家们根本加入不进来(当然,随着 IPv6 的普及,也许可以试试让玩家通过 IPv6 连接)。若是在云服务器上搭建,由于性能好的机器价格贵,所以如果预算有限,服务器可能会比较卡顿。
这个时候使用 FRP 来配置内网穿透就是一个好的选择,虽然这样做会略微增加延迟。FRP 是一个使用 Go 编写的程序,在 GitHub 上发布(https://github.com/fatedier/frp)。
开始
接下来,让我们逐步开始搭建。
获取 FRP 程序
从 GitHub 下载 FRP 程序的发行版本。打开这个 URL:
选择写着绿色 Latest
字样的最新发行版,并点击 Assets
,查找适用于您操作系统的版本。找到后,点击即可让浏览器开始下载该文件。如果下载太慢,可以使用 GitHub Proxy。
安装 FRPS
假设您使用云服务器为本地服务器配置穿透,那么将 FRP 程序的压缩包上传至云服务器(或者直接在云服务器上使用 wget
)。随后,使用以下命令解压缩该压缩包:
tar -xzvf frp_0.60.0_linux_amd64.tar.gz
注意文件名不一定是一样的,使用时需要替换。解压完成后会生成一个新的文件夹,该文件夹的名称应该是不包含扩展名的原压缩包的名称。切换工作目录到该文件夹( cd frp_0.60.0_linux_amd64
),然后使用 ./frps
来尝试启动 FRP 服务器。如果一切顺利,那么看起来会是这样的:
user@host:~/frp_0.60.0_linux_amd64$ ./frps
2024-10-13 10:01:32.404 [I] [frps/root.go:107] frps uses command line arguments for config
2024-10-13 10:01:33.943 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000
2024-10-13 10:01:33.943 [I] [frps/root.go:114] frps started successfully
但如果此时断开 SSH,则服务器会停止 FRP 的运行,这可以使用 screen
或者 systemd
来解决,但更推荐后一种方法,请参见:
配置 FRPC
在本地机器上也下载 FRP 程序的压缩包并解压、切换工作目录。使用文本编辑器编辑 frpc.toml
,其中包含一些默认内容:
serverAddr = "127.0.0.1"
serverPort = 7000
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
修改 serverAddr
为远端服务器地址,修改 localPort
和 remotePort
为 25565
,在最后一行添加 transport.proxyProtocolVersion = "v2"
, name
修改成一个有辨识度的名称。完成后,配置文件看起来可能是这样的:
serverAddr = "11.45.14.19"
serverPort = 7000
[[proxies]]
name = "minecraft-frp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
transport.proxyProtocolVersion = "v2"
此时,可以使用 frpc -c frpc.toml
启动 FRPC 程序。
配置
上述步骤完成后,您已经拥有了一条 FRP 隧道。要想让 Minecraft 服务器利用它,仍需要一些额外配置。请先获取该插件:
在 Releases
中获取最新发行版,并安装到您的 Spigot、Velocity、BungeeCord 等服务器上。注意在 Velocity 和 BungeeCord 上安装时,请不要同时将它安装到后端,而是只开启 IP-Forward
功能,这样已经足够让后端服务器获取到玩家的正确 IP 了。
请注意,该插件在 Spigot 上需要与 ProtocolLib 一起工作,如果尚未安装,则需要安装它(但不需要在 BungeeCord 或 Velocity 上安装)。将插件文件放入 plugins
文件夹后,重新启动服务器。
完成
恭喜您!在完成以上步骤后,您的 Minecraft 服务器已对公共网络开放。请使用 Minecraft 客户端连接远端服务器的 IP 地址,此时服务器显示的玩家 IP 也不再是 127.0.0.1
而是正确的地址。