1091 字
5 分钟
自部署 frp 内网穿透服务
2024-12-07

背景#

我将 Minecraft 服务端部署在家中的主机上期望可多人游玩。然而,由于家庭网络缺少公网 IPv4 地址,其他玩家无法直接连接到游戏服务器。在这种情况下,我们需要借助内网穿透技术,让外部玩家能够通过内网穿透服务器访问家中的游戏服务器。

概念准备#

名词解释#

词语解释
Minecraft由 Mojang Studios 开发的沙盒游戏,玩家可以在由像素方块构成的开放世界中进行建造、探险和生存等多种活动。
内网穿透通过将局域网内的服务映射到外部网络,使外部用户能够访问位于内网中的资源,常见应用包括通过公网访问本地的 Minecraft 服务器。
内网穿透软件通过技术手段突破 NAT 和防火墙的限制,将内网设备的服务映射到公网,外部用户即可直接访问内网资源。例如,使用内网穿透软件可以让他人访问运行在家庭网络中的 Minecraft 服务器。常见工具包括 frpNgrok 等。
公网 IPv4互联网协议第四版的公网地址,是全球唯一的,用于标识设备在公共互联网中的位置。在中国,家庭宽带用户通常没有公网 IPv4 地址,而是通过 NAT(网络地址转换)共享一个公网地址,使得外部 IPv4 网络无法直接访问家庭内网设备。

其他信息#

Minecraft 有基岩版和 Java 版,以下表格列出它们的区别:

基岩版Java 版
网络协议UDPTCP
默认服务器端口1913225565

部署#

本文将使用 frp 来实现内网穿透。

环境要求#

该部署需要两台机器,分别作为内网穿透的服务端和客户端。

服务端客户端
系统Ubuntu 22.04.4 LTSWindows Server 2022
具备公网 IPv4
服务内网穿透服务端(frps)内网穿透客户端(frpc)
Minecraft 服务端

准备工作#

frp 发布页面 下载适用于各平台的 frp 软件,并解压。

例如,在有公网 IP 的服务器上,下载并解压 frp_0.61.0_linux_amd64.tar.gz

wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -zxf frp_0.61.0_linux_amd64.tar.gz

在家中的主机上,下载并解压 frp_0.61.0_windows_amd64.zip

内网穿透服务端配置#

  1. 编辑 frps.toml 配置文件,内容如下:
frps.toml
bindPort = 7000
vhostHttpPort = 8080
  • bindPort:指定服务端监听的端口,用于与客户端建立连接。确保此端口对外开放。
  • vhostHttpPort:定义服务端接收 HTTP 请求的端口,可以通过访问 http://[ip]:8080 来检查内网穿透服务是否正常运行。
  1. 放通端口

需要放通以下端口:

端口类型说明
7000TCP内网穿透连接
8080TCP用于 HTTP 请求检测
19132UDPMinecraft 基岩版服务端
25565TCPMinecraft Java 版服务端
  1. 启动服务

在 frp 目录下启动 frps:

nohup ./frps -c frps.toml >> frps.log &

该命令会在后台启动 frps 程序,并将日志信息追加到 frps.log 文件中。即使关闭终端会话,程序仍会继续运行。
如果需要停止 frps,可以通过 ps -ef | grep frps 查找进程 ID(PID),然后通过 kill -9 [PID] 停止。

内网穿透客户端配置#

  1. 启动 Minecraft 服务端(此部分略)

  2. 编辑 frpc.toml 配置文件,内容如下:

frpc.toml
serverAddr = "114.51.4.19"
serverPort = 7000
[[proxies]]
name = "mcjava"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
[[proxies]]
name = "mcbedrock"
type = "udp"
localIP = "127.0.0.1"
localPort = 19132
remotePort = 19132

请根据实际情况修改 serverAddr(内网穿透服务端的公网 IP 地址)。

  1. 编写 frpc 启动脚本

在 frp 文件夹下创建 start-frpc.bat 文件,内容如下:

.\frpc.exe -c .\frpc.toml
  1. 运行 frpc

双击 start-frpc.bat 启动内网穿透客户端,成功连接后将看到如下输出:

Windows CMD
C:\Users\Administrator\Desktop\frp>.\frpc.exe -c .\frpc.toml
2024-12-07 13:40:13.129 [I] [sub/root.go:142] start frpc service for config file [.\frpc.toml]
2024-12-07 13:40:13.177 [I] [client/service.go:295] try to connect to server...
2024-12-07 13:40:13.316 [I] [client/service.go:287] [dbb57c8289754efa] login to server success, get run id [dbb57c8289754efa]
2024-12-07 13:40:13.316 [I] [proxy/proxy_manager.go:173] [dbb57c8289754efa] proxy added: [mcjava mcbedrock]
2024-12-07 13:40:13.359 [I] [client/control.go:168] [dbb57c8289754efa] [mcjava] start proxy success
2024-12-07 13:40:13.359 [I] [client/control.go:168] [dbb57c8289754efa] [mcbedrock] start proxy success
  1. 设置 frpc 自启动(可选)

start-frpc.bat 脚本的快捷方式拖入启动文件夹以实现自启动。

启动文件夹路径通常是:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

至此,内网穿透部署完成。
接下来可以通过访问内网穿透服务器的公网 IP 来访问内网的游戏服务端。

自部署 frp 内网穿透服务
https://0f.nz/posts/selfhost-frp-server-minecraft/
作者
oftx
发布于
2024-12-07
许可协议
CC BY-NC-SA 4.0