木须柄的时光工坊

探索技术与游戏乐趣的奇妙之旅

目录
使用本地机器 + FRP 构建 Minecraft 服务器
/        

使用本地机器 + FRP 构建 Minecraft 服务器

Minecraft-12-Maneras-para-divertirse-Portada.jpg

构建理想的 Minecraft 服务器总是不太方便:云主机 VPS 虽然使用方便,但是高配置的机器部署成本通常不低;而本地机器的配置通常足够,但是没有公网 IP,而利用一些现成的内网穿透服务,或者公网 IPv6 等手段,又有各种麻烦的限制。所以我打算利用现有的 VPS 配合一台闲置旧机器,构建一个新的 Minecraft 服务器。

构建 FRP 反向代理

云主机端

下载配置 frp工具,这里使用 0.33 版本;

注:frp 最新版本目前是 0.53.2 版,配置文件格式略有不同,而且 release 包中没有现成的 service 文件,不太方便构建 systemctl 自启动服务;

 1# 安装路径 /opt/
 2cd /opt/
 3
 4# 下载 frp 工具
 5wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz 
 6
 7# 解压 frp
 8tar -zxvf frp_0.33.0_linux_amd64.tar.gz
 9
10# 打开配置文件 frps.ini
11vim frps.ini

修改配置文件 frps.ini 为如下内容:

 1[common]
 2# frp监听的端口,默认是7000,可以改成其他的
 3bind_port = 7000
 4# 授权码,这个token之后在客户端会用到
 5token = 123456
 6
 7# frp管理后台端口,请按自己需求更改
 8dashboard_port = 7500
 9# frp管理后台用户名和密码,请改成自己的
10dashboard_user = admin
11dashboard_pwd = admin
12enable_prometheus = true
13
14# frp日志配置
15log_file = /var/log/frps.log
16log_level = info
17log_max_days = 3

可以先执行一次 frps 服务,若执行成功说明配置无误;

1./frps -c ./frps.ini

设置 frps 服务自启动

1sudo mkdir -p /etc/frp
2sudo cp frps.ini /etc/frp
3sudo cp frps /usr/bin
4sudo cp systemd/frps.service /usr/lib/systemd/system/
5sudo systemctl enable frps
6sudo systemctl start frps

开放防火墙端口,我这里使用 ufw 管理本地防火墙,另外 VPS 端的安全组管理也要打开相应的端口;

1# 开启 frps 等端口
2# 7000 为通信端口,7500 为控制台端口
3ufw allow 7000/tcp
4ufw allow 7500/tcp

在浏览器端输入 http://your_ip:7500可以查看 frp 服务端的连接状态,如果一切正常,说明服务端已经正常开启。

image-20240102162437054.png

本地机器端

同样的,在本地机器端下载相同的 frp工具;

 1# 安装路径 /opt/
 2cd /opt/
 3
 4# 下载 frp 工具
 5wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz 
 6
 7# 解压 frp
 8tar -zxvf frp_0.33.0_linux_amd64.tar.gz
 9cd frp_0.33.0_linux_amd64
10
11# 打开配置文件 frps.ini
12vim frps.ini

修改配置文件 frpc.ini 为如下内容:

 1# 客户端配置,其中 
 2# server_addr 修改为你的云主机端IP
 3# token 修改为与你的云主机端 token 相同
 4[common]
 5server_addr = <your_ip>
 6server_port = 7000
 7token = 123456
 8
 9# 配置ssh服务,方便远程登陆
10# remote_port 为自定义的 ssh 端口,避免与云主机本身的 ssh 服务端口冲突
11[ssh]
12type = tcp
13local_ip = 127.0.0.1
14local_port = 22
15remote_port = 6022
16
17# 配置 Minecraft 服务
18# 端口 25565 为默认 MC 端口服务号
19[minecraft]
20type = tcp
21local_ip = 127.0.0.1
22local_port = 25565
23remote_port = 25565

可以先执行一次 frpc 服务,若执行成功说明配置无误;

1./frpc -c ./frpc.ini

设置 frpc 服务自启动

1sudo mkdir -p /etc/frp
2sudo cp frpc.ini /etc/frp
3sudo cp frpc /usr/bin
4sudo cp systemd/frpc.service /usr/lib/systemd/system/
5sudo systemctl enable frpc
6sudo systemctl start frpc

开放ufw防火墙端口;

1# 开启 ssh, frpc, mc 等端口
2ufw allow 21/tcp
3ufw allow 22/tcp
4ufw allow 7000/tcp
5ufw allow 6022/tcp
6ufw allow 25565/tcp

此时查看 frp 服务端,可以看到Client CountsCurrent Connections增加了两个连接,一个是 ssh 服务,一个是 mc 服务,都已经准备就绪了。

构建 Minecraft 服务端

1Minecraft 服务端有很多版本,除了官方服务端之外,还有很多适配不同插件和模组的版本,这里我选择 Mohist 服务端最新的 1.20.2 版本,既可以兼容原版生存,也能在未来方便的扩充各种模组;

官方服务端:https://mcversions.net/

Mohist 服务端:https://new.mohistmc.com/downloadSoftware?project=mohist&projectVersion=1.20.2

服务端配置主要在本地机器进行,VPS 端只需要做一些简单设置即可。

配置 Java17 环境

Minecraft 服务端依赖 Java 环境运行,所以如果本地机器没有,则需要安装 Java 环境,安装方法比较简单,不多赘述;

1# 安装 Java
2sudo apt update
3sudo apt install openjdk-17-jdk

下载启动 MC 服务端

 1# 安装路径 /opt/minecraft/mohist-1.20.2
 2mkdir -p /opt/minecraft/mohist-1.20.2
 3cd /opt/minecraft/mohist-1.20.2
 4
 5# 下载 mohist 1.20.2 服务端
 6# 如果下载失败,请进入官网下载后,通过 sftp 传输
 7wget https://mohistmc.com/api/v2/projects/mohist/1.20.2/builds/128/mohist-1.20.2-128-server.jar
 8
 9# 下载完成后,可以直接启动服务端
10java -jar -Xmx4G mohist-1.20.2-128-server.jar

第一次启动服务端,需要确认同意 EULA 协议,此时服务端会自动下载、生成配置文件、世界地图等文件,需要一定的时间;

另外针对服务器的各种详细配置,主要通过修改 server.properties 文件实现,这里就简单做一些基础修改,详细配置方法不再赘述;

1# 修改服务器配置文件
2vim server.properties
3
4# 修改 server.properties 的内容
5# 关闭正版验证
6online-mode=false
7
8# 设置白名单
9white-list=true

设置自动脚本

为了方便启动和管理,我们需要设置一个 shell 脚本,这里我利用 screen 来控制服务端的后台运行和管理,方便随时在 ssh 中随时切入查看;

1# 构建服务端启动脚本
2vim start_server.sh

编辑 shell 脚本内容如下:

 1#!/bin/bash
 2
 3# 检查名为 "mc" 的 screen 会话是否存在
 4if screen -list | grep -q "\.mc"; then
 5    # 如果存在,则发送停止命令到 Minecraft 服务器
 6    screen -S mc -X stuff "stop $(printf '\r')"
 7    sleep 7  # 等待服务器停止,根据需要调整等待时间
 8
 9    # 等待 5 秒钟后,杀死可能未正常停止的服务器进程
10    screen -S mc -X quit
11fi
12
13# 创建一个名为 "mc" 的新 screen 会话,并在其中启动 Minecraft 服务器
14screen -S mc -d -m java -jar -Xmx4G mohist-1.20.2-128-server.jar

该脚本会自动判断当前是否存在名为 mc的屏幕会话,若不存在,则会新建名为mc的虚拟屏幕,然后在这个屏幕中,启动服务端;若mc会话已存在,则会重启这个服务端;

screen 控制后台的方式很简单:

1# 恢复 mc 会话
2screen -r mc
3
4# 退出当前会话
5# 按下 Ctrl + A 然后按下 D 键来将 screen 会话放入后台运行

最后可以利用 systemctl 将启动脚本文件,加入开机自启动,方便管理;

1# 使用文本编辑器创建一个 .service 文件
2sudo vim /etc/systemd/system/minecraft.service

将以下内容粘贴到该文件中:

 1[Unit]
 2Description=Minecraft Server
 3After=network.target
 4
 5[Service]
 6WorkingDirectory=/opt/minecraft/mohist-1.20.2
 7ExecStart=/bin/bash start_server.sh
 8ExecReload=/bin/bash start_server.sh
 9Restart=on-failure
10
11[Install]
12WantedBy=multi-user.target

然后重新启动 systemd 服务

1sudo systemctl daemon-reload
2sudo systemctl enable minecraft.service
3sudo systemctl start minecraft.service

好了,至此整个 Minecraft 服务器的搭建工作已经完成,此时服务端已经一切准备就绪了,可以下载客户端连接服务器了;

客户端下载

HCML 启动器:https://hmcl.huangyuhui.net/download/

选择 1.20.2 版本下载安装

image-20240102190451005.png

启动客户端,选择多人游戏,添加服务器,输入服务器名称,地址填写 VPS 的 IP 或者域名,如果自定义了端口号,则添加端口号

image-20240102190723483.png

点击“加入服务器”,一切顺利的话,恭喜,这就算成功开服了。

image-20240102191214063.png

评论
取消