Linux / CentOS中的“基于名称的”端口转发或绑定,无需使用Web服务器?

我在Centos 6.3上有一个游戏服务器,它有一个静态IP,但是有不同的游戏,每个都在不同的端口上。 端口4000是游戏的默认查询端口,我在后续端口上托pipe实例。

目前,玩家必须通过inputIP /主机名和端口来连接到每个游戏,如下所示:

  • 游戏1的123.123.123:4001server1.mygame.com:4001
  • 游戏2的123.123.123:4002server2.mygame.com:4002
  • 游戏3的123.123.123:4003server3.mygame.com:4003

我想要做的是让玩家不需要键入端口,只需要记住主机名:

  • 游戏1的server1.mygame.com
  • server2.mygame.com为游戏2
  • server3.mygame.com为游戏3

我知道这(端口redirect/转发)是不可能的只使用DNS A – logging或任何。 所以我设置了Apache来侦听游戏的默认查询端口,并使用基于名称的虚拟主机尝试301redirect连接到适当的端口。 例如,一个与server1.mygame.com匹配的虚拟主机名称已经301端口到4001端口。

这在浏览器中工作 – 我看到redirect工作正常! 但令人遗憾的是,这并没有在游戏中奏效。 我的猜测是游戏不能遵循301redirect。 我也尝试了通过Apache的反向代理,但也失败了。

所以我想知道是否有任何方法来设置基于名称的端口转发,而不使用Apache。

概要:

基本上我需要这些规则:

 Connection to 123.123.123 established on port 4000 (query port). If the hostname is "server1.mygame.com" --> forward to 4001. If the hostname is "server2.mygame.com" --> forward to 4002. If the hostname is "server3.mygame.com" --> forward to 4003. 

所有没有Apache或301redirect。

这可能吗?

在TCP和UDP协议中没有“名称”这样的概念,所以你不能这样做。

替代scheme是在应用程序级协议(例如HTTP 1.1)中实现名称事物,或者使用不同的IP地址或不同的TCP / UDP端口。

除非你的游戏是说HTTP,否则你放置的整个Apache是​​无用的,因为Apache是​​一个HTTP服务器。 如果你的游戏声称说HTTP,那么它必须了解redirect,否则它只是一个部分的,未完成的HTTP客户端。

(Apache也可以服务于其他协议,但是这里没有关系)