我有一台 [游戏] 服务器 (CentOS),大约有 10 个已使用的端口。对于一个特定的游戏,我有 2 台服务器:一台私人服务器和一台公共服务器。它们的 IP 相同,因此要区分它们,用户必须使用 mydomain.com:[portnumber]。有没有办法可以配置 CentOS 自动获取 subdomain.mydomain.com 之类的内容并将其转换为 mydomain.com:[portnumber] 或简单的 localhost:[portnumber]?这就是 DNS 的用途吗?
谢谢
答案1
如果它完全是你的应用程序,并且你可以控制你的 DNS,你可以定义一个SRV
记录为您的游戏。您的客户端必须明白您已定义记录,_gamename._tcp.example.com
SRV
以便为用户提供一种方式来通过example.com
正确的端口访问服务器。
如果您只是使用现有的游戏服务器并托管它,这听起来很复杂并且几乎不可行,但这是在 DNS 中包含端口号的唯一方法。
如果这不可能,只需为公共服务器采用“正常”端口(这样用户就不必担心),为私人服务器采用“其他”端口(您必须指定端口,但用户群有限,因此“总担心量”较小。)
答案2
您可以通过编辑 apache httpd.conf 文件并添加虚拟主机重定向来实现此目的。当然,如果这是您的服务器,您也可以编辑 DNS 记录。例如:
NameVirtualHost ip.add.of.server
<VirtualHost ip.add.of.server>
ServerName yourserver.domain.com
Redirect permanent / http://yourserver.domain.com:PORT
</VirtualHost>
<VirtualHost ip.add.of.server>
ServerName yourserver2.domain.com
Redirect permanent / http://yourserver.domain.com:PORT
</VirtualHost>
yourserver2.domain.com 可以是同一台服务器,您必须在 DNS 上添加新的 A 记录。
答案3
不幸的是,没有办法实现这一点,除非它作为您正在运行的特定游戏的功能。
您的选择是将单独的公共 IP 绑定到同一个游戏的每个不同实例(如果您只拥有一个公共 IP,则这不是一个选项),或者在告诉人们有关服务器的信息时指定端口号。
处理 HTTP 流量时,有一种解决方法,但这种方法只能在客户端与服务器通信并向服务器提供它认为正在尝试连接的信息时才有效(即,当它连接时,它会告诉服务器它正在连接到它试图访问的 DNS 名称)。这允许服务器选择向客户端提供哪些内容。但是,它不会将任何东西转移到其他端口。
答案4
您有这些易于实施的解决方案:
- 防火墙中的 DNAT 规则将本地流量的目标端口更改为专用于本地流量的端口
- 监听外部应用程序的 external_IP:same_port,监听内部应用程序的 internal_IP:same_port。这样,两个应用程序都可以运行,使用相同的端口,但使用不同的 IP。