一个端口代理多个我的世界(Minecraft)服务器,这个 Go 工具部署很轻
开设 Minecraft 服务器的人,迟早都会遇到端口问题。
假设你有一台服务器,准备同时运行生存服、小游戏服和创造服。Minecraft 服务端默认使用 25565 端口,三个服务不能同时绑定同一个端口,只能改成 25566、25567 和 25568,然后告诉玩家:
“生存服连接 :25566,小游戏服连接 :25567,创造服连接 :25568。”
端口一多,玩家很快就记不住。更麻烦的是,你还需要把多个端口暴露到公网,防火墙规则和安全风险都会随之增加。
BungeeCord 和 Velocity 可以解决这个问题,但它们本身是完整的 Minecraft 代理平台,包含插件系统、权限管理、跨服传送、聊天转发和跨服通信等功能。功能越完整,配置和资源开销自然也越高。
如果你的需求很简单,只想让玩家连接一个端口,再根据域名把请求分发到不同的后端服务器,那么可以看看 infrared(红外)。它只处理代理和状态占位,不负责搭建完整的跨服生态。
infrared 是什么
infrared 是一个使用 Go 编写的 Minecraft 反向代理工具,同时支持状态占位服务器功能。根据项目页信息,截至本次核对时,它在 GitHub 上有 855 颗星,采用 AGPL-3.0 许可证。项目页
它的定位很直接:让多台 Minecraft 服务器共用一个公网端口。项目 README 对它的描述也是反向代理和状态占位,而不是功能齐全的服务器网络平台。官方 README
它的工作方式和 Nginx、HAProxy 这类反向代理比较接近。infrared 监听公网的 25565 端口,玩家连接时会带上目标服务器地址,infrared 根据域名匹配规则选择后端,再把连接转发到对应的内网地址。
例如,你有两个域名:
survival.example.comcreative.example.com
它们都解析到同一台服务器的公网地址,并由 infrared 监听 25565 端口。之后,infrared 可以把前者转发到内网的 25566,把后者转发到内网的 25567。
玩家连接 survival.example.com 就会进入生存服,连接 creative.example.com 则会进入创造服。整个过程只需要记住域名,不用再输入端口号。
核心功能
infrared 的功能列表并不长,但每一项都围绕端口代理这个需求展开。
反向代理是基础功能。配置文件可以指定域名和后端地址,支持通配符匹配,也支持让多个域名指向同一个后端。官方文档给出的配置结构比较简单,通常只需要填写域名列表和后端服务器地址。代理配置文档
状态响应缓存用于处理 Minecraft 客户端的服务器列表刷新。当玩家刷新列表时,客户端会向服务器发送 ping 请求,获取 MOTD、在线人数和延迟等信息。如果大量玩家同时刷新列表,后端服务器就会重复处理许多状态请求。
infrared 可以缓存后端返回的状态响应,后续相同类型的请求直接使用缓存结果,从而减少后端服务端需要处理的 ping 请求。
它还支持 PROXY Protocol。启用后,后端服务器可以获取玩家的真实 IP,而不是只看到 infrared 的地址。这个功能适合需要记录玩家 IP、执行 IP 白名单或进行访问统计的服务器。不过,后端服务器也必须正确配置并信任来自代理的 PROXY Protocol 信息。infrared 官方文档目前说明支持 PROXY Protocol v2。PROXY Protocol 文档
速率限制器则可以按 IP 限制连接频率。例如,在一个时间窗口内限制同一个 IP 创建新连接的次数,降低高频 ping 和连接请求对服务端的影响。它可以作为基础的限速层,但不能替代专业的 DDoS 清洗或上游防护。速率限制器文档
状态占位服务器
infrared 还有一个比较实用的功能,叫状态占位服务器(status placeholder)。
设想这样一种情况:一台机器上运行着多个 Minecraft 服务端,但有些服务器只在活动期间启动,或者正在维护,并不会一直在线。
如果后端服务已经关闭,玩家在服务器列表中通常只会看到“无法连接到服务器”。这种提示没有提供太多信息,玩家也不知道服务器是暂时维护,还是已经永久关闭。
状态占位功能可以在后端不可用时返回一个替代状态。你可以把 MOTD 改成“服务器维护中,请稍后再试”,在线人数显示为 0,让玩家在列表中看到一条有明确说明的服务器记录,而不是单纯的连接失败。
需要注意的是,状态占位主要解决的是服务器列表中的状态展示。它本身不等于排队系统,也不会自动实现跨服大厅、等待队列或玩家踢出逻辑。玩家真正尝试进入时,后端仍然需要可用;如果需要排队或维护大厅,还要配合其他服务端工具。
对于拥有多个子服务器的 Minecraft 社区来说,这种状态展示很有用。无论后端是正常运行、暂时关闭还是正在维护,玩家都能看到相对统一的提示。
为什么用 Go
infrared 使用 Go,首先是因为部署简单。
官方构建说明使用了下面这条命令:
CGO_ENABLED=0 go build -ldflags "-s -w" -o ./out/infrared ./cmd/infrared
其中,CGO_ENABLED=0 表示关闭 CGO,-s -w 用于去掉部分符号和调试信息。编译完成后,得到的是一个可以直接运行的二进制文件,不需要在目标服务器上安装 Java 或其他运行时环境。官方构建说明
不过,二进制文件的实际体积会随版本、系统架构和编译参数变化。更稳妥的说法是它属于轻量级部署工具,而不是把“几百 KB”当成所有平台和版本的固定大小。
Go 的 goroutine 也适合网络代理场景。代理需要同时处理许多连接,goroutine 的创建和调度成本通常比传统重量级线程低。再加上 infrared 本身只负责域名路由、状态响应和限速,运行时需要维护的功能更少,所以整体资源占用比较容易控制。
当然,Go 并不意味着内存占用为零。连接数量、后端数量、缓存规模和实际流量都会影响资源使用。它的优势在于基础开销低、依赖少,部署时也不需要额外准备一套 Java 运行环境。
和同类工具的对比
Minecraft 代理工具有不同的定位。
BungeeCord 是较早出现的完整代理方案,功能覆盖面很广,支持插件系统、跨服传送、聊天转发和权限同步,适合搭建大型服务器网络。但它需要维护更完整的代理平台,配置项和运行开销也会相应增加。
Velocity 是 BungeeCord 的现代替代方案,性能和扩展性更好,同样提供插件系统以及完整的跨服代理能力。对于需要大厅、跨服传送、全局聊天和统一权限的服务器网络来说,Velocity 通常更合适。
infrared 和它们不是同一类产品。它没有插件生态,也不负责跨服传送、全局聊天或统一权限。它主要做一件事:根据域名转发连接,并在后端不可用时返回状态占位信息。
如果你要搭建完整的多服网络,应考虑 Velocity 或 BungeeCord。如果你只想让多个后端共享一个公网端口,infrared 会更简单。
项目 README 还列出了另一个类似工具 mc-router。mc-router 同样使用 Go 编写,但官方 README 对 Kubernetes 和 Docker 服务发现、自动扩缩容等功能介绍得更多,更适合容器化部署场景。mc-router 项目页
部署方式
infrared 支持直接运行二进制文件,也提供 Docker 镜像。
直接部署时,可以根据系统下载对应版本的程序,准备配置文件后运行。官方文档目前列出了 Linux、Windows 和 macOS 等平台的构建产物;如果服务器不想安装 Docker,这种方式更直观。官方部署文档
Docker 部署则可以使用 haveachin/infrared 镜像。官方示例会把宿主机的 25565 映射到容器的 25565,再把本地配置目录挂载到容器的 /etc/infrared。配置完成后启动容器即可。Docker Compose 部署说明
配置文件采用 YAML 格式。代理规则通常放在 proxies 目录中,每条规则指定域名匹配模式和对应的后端地址。配置好后,infrared 启动并监听端口,玩家就可以通过不同域名进入不同服务器。
官方文档站点是 infrared.dev,其中包含全局配置、代理规则、PROXY Protocol 和速率限制器等说明。
适用场景
infrared 最适合以下几种情况。
一台物理机或云服务器上运行多个 Minecraft 服务端,所有服务通过不同域名区分,同时只向公网开放一个 Minecraft 端口。
后端服务器并非全天运行,需要在维护或关闭期间向玩家展示明确的 MOTD,而不是直接显示连接失败。
希望在后端之前增加一层基础限速,减少大量高频连接请求对 Minecraft 服务端的干扰。
需要一个资源占用较低的轻量网关,并且不需要插件系统、跨服大厅或全局权限。
它不适合需要完整跨服功能的场景。如果玩家需要从生存服直接传送到小游戏服、使用全局聊天、共享权限,或者通过插件实现复杂的大厅和队列逻辑,infrared 无法单独完成这些工作。此时应使用 Velocity、BungeeCord,或者其他完整代理平台。
infrared 的优点正是它没有试图解决所有问题。它把工作范围限制在域名路由、状态响应缓存、PROXY Protocol 和基础限速上,因此配置和部署都比较轻。
对于只想让多个 Minecraft 服务器共享一个公网端口的管理员来说,它比完整代理平台更容易上手。你不需要先学习插件系统,也不需要搭建跨服通信体系,准备好域名、后端地址和 YAML 配置后就能运行。
评论互动区
理性讨论,友好交流,让观点更有价值
登录后即可参与讨论、点赞和回复,打造更有质量的社区互动。
立即登录参与互动正在加载评论...