每个服务器都要占用一个端口,但是25565端口只有一个,输入端口又麻烦又难记还不好看
为什么HTTP能够很多网站都绑定在80端口上,而Minecraft却不能很多网站都绑定在25565端口上呢?
答案当然是可以的,MineGate就是这样的一个工具。他是一个Minecraft反向代理,支持虚拟主机(Virtual Host)功能。使用golang开发,跨平台的性质使得一份代码能够在Windows和*nix平台上同时运行。如果你愿意,MineGate也能够在手机上运行。
MineGate到底能做啥:
1. 多个服务器能够绑定在同一个端口上,不同服务器之间通过用户在客户端多人游戏的地址框输入的域名区分:
工作原理类似于HTTP的Virtual Host。如*.example.com都解析到了192.0.2.233上,MineGate作为前端反向代理绑定在192.0.2.233:25565上,服务器上有三个服务器分别运行在10001, 10002和10003端口上,分别分配a.example.com, b.example.com, c.example.com。此时,用户在地址栏输入a.example.com将进入第一个服务器,而输入b.example.com将进入第二个服务器,即使他们ip地址相同。
2. 合并了FakeOnline的功能:在服务器维护时能够返回维护信息告诉玩家服务器正在维护,支持自定义颜色和样式:

由于Minecraft在1.7进行了一次彻底的多人游戏协议更新,因而目前暂时只支持1.7+的服务器,对于1.6及更低服务器的支持将在之后版本中加入。
使用办法:
参见https://github.com/jackyyf/MineGate-Go/blob/master/minegate/config.yml的配置格式。
将配置好的文件保存为config.yml,放在当前工作目录下(一般为MineGate可执行文件所在目录),然后运行即可。
有任何问题?
1. 遇到了BUG?
请在github中开一个issue,最好能够附带相关的log (比如panic的stacktrace)
2. 性能问题?
提供当时的连接数(在线玩家数)以及即时的网络带宽情况,并在github上开一个issue或直接跟帖说明情况,我会及时处理 :)
3. 不会使用?
有任何不清楚的部分请直接跟帖询问=w=,我会及时加到帖子中 :)
建议 / 功能及特性请求
请直接跟帖留言,或在github开一个issue~
官方插件计划
1. conntrack: 一个简单的模块,用于防止短时间内大量的连接导致服务器过载
2. realip: (仅适用于spigot等有bungeecord支持的服务器端, 仅离线模式) 允许服务器获得真实的玩家IP
3. ???
里程碑 / 未来计划:
v0.4.0
模块系统: 允许在构建时加入额外的模块(由于golang的特性暂时无法动态加载插件,我之后也许会找一个其他的办法来实现)
v0.9.0
下一个版本将是最后一个beta版本,核心部分将基本确定,并适当修改模块接口,未来更多功能将尽可能通过模块而不是通过修改核心代码实现。
v1.0
??? 欢迎提供更多的想法和需求~ (满地打滚求follow github和star=w=)
更新日志:
v0.5.0
新加入conntrack模块,有效防止各类Level4/7攻击
修正了一个在v0.4.0中引入的bug,由于对错误信息处理不完善,导致在特定的非法登录包可以导致minegate崩溃
模块系统更新: 加入了更多可以拒绝请求的事件点,现在包括登录和Ping都可以拒绝。
v0.4.1
realip插件加入默认插件列表,允许使用bungeecord模拟功能,在对应的upstream上打开bungeecord支持(加入bungeecord: true)即可。
v0.4.0
模块事件/配置部分完成,接口请参照Github上的Issue #4
协议部分重新实现,现在会有更加严格和准确的协议判断
v0.3.3
重写了代理实现部分,理论上应该有部分的性能提升,以及更低的CPU占用
重写了Minecraft协议部分,独立为mcproto包,分开维护分开测试
v0.3.2
修正了当配置文件中没有指明日志路径和级别的时候会报错退出的问题
在上游golog中修正了一个状态未重置的问题,修正后作为后台daemon程序运行的功能目前看来工作正常,可以尝试使用 :)
配置文件中也默认打开了daemon
v0.3.1
配置文件中默认daemon配置改为false
v0.3.0
加入了更多的自定义错误信息部分
*nix平台: 加入了滚动日志文件的功能,通过向进程发送SIGUSR1信号完成滚动
*nix平台: 加入了测试阶段的作为一个后台程序运行的功能(此功能尚不稳定请不要在生产环境中使用)
v0.2.0
加入了自定义维护信息,维护信息的样式也可以自定义了
v0.1.0
加入了配置文件重加载功能(仅*nix,windows暂不支持),通过向进程发送SIGHUP信号即可完成重载
重载时配置文件不合法会报错并继续使用旧配置