Minecraft(我的世界)中文论坛

标题: [开源] MineGate —— 支持虚拟主机的反向代理!从此不再输入端口!

作者: jack950703    时间: 2015-2-13 01:08
标题: [开源] MineGate —— 支持虚拟主机的反向代理!从此不再输入端口!
本帖最后由 jack950703 于 2015-3-9 03:25 编辑

每个服务器都要占用一个端口,但是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.5.0

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信号即可完成重载
  重载时配置文件不合法会报错并继续使用旧配置


















作者: 星光灬羽神    时间: 2015-2-13 01:34
慢慢研究- -
作者: 小泽轩    时间: 2015-2-13 02:26
不错的工具~。
作者: 眼镜蛇_NO.1    时间: 2015-2-13 03:42
不明觉厉。。。
作者: 网络摆渡客    时间: 2015-2-13 08:14
是不是使用后就无法ping了?会影响IP转发吗?
作者: 尼克尼    时间: 2015-2-13 09:33
好像要研究开很大的坑- -
作者: jack950703    时间: 2015-2-13 17:32
网络摆渡客 发表于 2015-2-13 08:14
是不是使用后就无法ping了?会影响IP转发吗?

都没有影响,MineGate只是一个反向代理,你可以看做他就是一个普通的Minecraft服务器集群的入口,ping和转发都是工作在更低的级别所以没有影响=w=
作者: leavessoft    时间: 2015-2-13 23:22
很好,希望尽快支持Windows。
作者: jack950703    时间: 2015-2-15 00:05
leavessoft 发表于 2015-2-13 23:22
很好,希望尽快支持Windows。

由于目前开发和测试都在linux下,手边暂时没有windows的测试机,所以有些功能可能在windows上没法正常工作,基本的转发和自定义错误信息都是可以正常工作的。之后应该会加入一些其他的方式如通过命令行输入命令添加/删除服务器以及重新加载配置文件等功能吧
作者: jack950703    时间: 2015-2-16 00:45
v0.3.2更新   
修正启动时如果配置文件中没有日志文件和等级将报错退出的bug


作者: aa210063654    时间: 2015-2-16 17:20
本帖最后由 aa210063654 于 2015-2-16 17:36 编辑

yyf....来助阵
作者: jack950703    时间: 2015-2-19 00:43
v0.3.3更新
  重写了代理实现部分,理论上应该有部分的性能提升,以及更低的CPU占用
  重写了Minecraft协议部分,独立为mcproto包,分开维护分开测试

另外v0.4版本将加入模块机制,目前预留的借口正在征求大家的意见,欢迎大家前往 https://github.com/jackyyf/MineGate-Go/issues/4 发表自己的意见 :)

作者: Love_凌夏    时间: 2015-2-19 01:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1461748123    时间: 2015-2-19 08:09
看到你这么屌,难道你不知道SRV么。
作者: jack950703    时间: 2015-2-19 13:20
1461748123 发表于 2015-2-19 08:09
看到你这么屌,难道你不知道SRV么。

反向代理存在的作用又不止是不写端口,包括保护实际后端服务器之类的都是反向代理的事情
作者: 変態のマギ    时间: 2015-2-19 23:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: jack950703    时间: 2015-2-21 21:25
変態のマギ 发表于 2015-2-19 23:19
记得好像有个域名转发,要域名备案的。。
可惜.top域名暂时没法备案。。
问一下lz这个用备案吗? ...

如果只用于游戏的话都不用备案吧,备案一般情况是只限网站,我看域名注册的时候可以直接选择非网站用途而不用备案的……
作者: 変態のマギ    时间: 2015-2-22 12:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: jack950703    时间: 2015-2-23 15:25
変態のマギ 发表于 2015-2-22 12:58
不是url转发?
那还是类似于IIS的绑定URL地址?
要是和类似于虚拟主机的那种绑定就66666了 ...

差不多就是虚拟主机吧……只是MineGate作为一个反向代理分发流量而已……
作者: 変態のマギ    时间: 2015-2-23 16:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: SkyCatcher    时间: 2015-2-23 16:32
感觉和bungeecord有点类似。经过这个以后获取不到源IP了吧
作者: iSteven    时间: 2015-2-23 16:55
请教一下,当Minecraft试图连接到服务器时,如何获取Host Name呢
作者: jack950703    时间: 2015-2-23 18:24
SkyCatcher 发表于 2015-2-23 16:32
感觉和bungeecord有点类似。经过这个以后获取不到源IP了吧

看过了spigot的bungeecord支持,准备用同样的办法实现获取源IP
作者: jack950703    时间: 2015-2-23 18:25
iSteven 发表于 2015-2-23 16:55
请教一下,当Minecraft试图连接到服务器时,如何获取Host Name呢

http://wiki.vg/Protocol#Handshake
作者: iSteven    时间: 2015-2-23 20:54
jack950703 发表于 2015-2-23 18:25
http://wiki.vg/Protocol#Handshake

哦,谢谢{:10_525:}
作者: SkyCatcher    时间: 2015-2-23 22:33
jack950703 发表于 2015-2-23 18:24
看过了spigot的bungeecord支持,准备用同样的办法实现获取源IP

这样子的话,那经过这个代理以后在经过Bungeecord就肯定会丢失源IP了
作者: 139740818    时间: 2015-2-24 00:04
这个略屌 顶起来.........
作者: aa210063654    时间: 2015-2-24 00:26
yyf,直接转发源IP到后端不成么....
作者: bangbang93    时间: 2015-2-24 03:15
minecraft-proxy表示围观
作者: DeathKnight    时间: 2015-3-5 22:32
BungeeCord原生带有这项功能
作者: jack950703    时间: 2015-3-6 15:05
DeathKnight 发表于 2015-3-5 22:32
BungeeCord原生带有这项功能

BungeeCord本身会处理协议相关的事项,会耗费额外的资源,同时会因为协议的过期/升级而升级,而minegate除了握手协议部分以外,登录后的处理均是直接透明代理,升级导致的失效可能性更小,维护更方便。

当然了,BungeeCord能够正确处理正版的远端ip,在特定情景下bungeecord肯定是有独特的功能的。
作者: 383964923    时间: 2015-3-28 23:42
好东西  话说 果然应该吐槽下发布日期呢
作者: zhuxintao    时间: 2015-4-26 11:23
config配置文件打不开了,楼主可以发一个?
作者: CCU    时间: 2015-5-11 14:05
配置文件打不开了,楼主写一下把,这东西放在VPS上简直就是他妈神器
作者: jack950703    时间: 2015-6-4 16:53
CCU 发表于 2015-5-11 14:05
配置文件打不开了,楼主写一下把,这东西放在VPS上简直就是他妈神器

主贴已更新……抱歉><
作者: linevil    时间: 2015-7-8 18:07
这玩意不错,不过 用bungeecord不是更好吗?

希望楼主尽快开发转发真实IP的功能
作者: 1723624171    时间: 2019-5-7 08:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: 权威的空气    时间: 2019-7-1 10:28
挖个坟....终于被我找到了~类似于2b2t服务器上搞的proxypipe...继续加油!
作者: 神的鄙视圣    时间: 2019-7-3 11:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: ItsZeroHikari    时间: 2019-7-15 10:58
还可以,直接写个SRV解析就可以了吧【
作者: 冰星    时间: 2019-7-18 18:33
我更想在vps里将网站得端口隐藏
作者: Shenhi    时间: 2019-7-30 12:07
其实我也在学go,可以的话也想加入开发,有联系方式麻烦回复一下 qwq

作者: 918055304    时间: 2020-4-28 19:29
为什么我下了MineGate-Windows-x64.exe后无法打开呀,要怎么使用,出一个详细的教程呀