有没有办法转发基于子域的端口?

可能重复:
如何使用DNS将域名redirect到我的服务器上的特定端口

基本上我想有这样的事情:

name1.mydomain.com:1234 – > my.internal.ip.address:10001
name2.mydomain.com:1234 – > my.internal.ip.address:10002
name3.mydomain.com:1234 – > my.internal.ip.address:10003
name4.mydomain.com:1234 – > my.internal.ip.address:10004
name5.mydomain.com:1234 – > another.internal.ip.address:10001
name6.mydomain.com:1234 – > another.internal.ip.address:10002

可以在路由器级别,内部DNS服务器级别,甚至是本地networking上运行某个应用程序的其他某台机器,这些应用程序只是将stream量传递到正确的端口上的适当的机器上。

更多的解释:这不是HTTPstream量,而是我们自己的自定义协议(我们自己的客户端/服务器应用程序使用.NET中的Remoting)

好的,让我们来澄清一下这里的一些混乱

首先,在你的问题中,没有明确的要求,所有这些名称都parsing为相同的IP地址 – 所以,你可以分配一个地址块到你的路由器设备,让DNSlogging设置提供一对一将名称映射到IP地址,然后使用DNAT(目标networking地址转换)将stream量转发到内部设备。

我将继续假设你没有能力在问题上抛出一堆IP地址。

一般来说,对于在TCP或UDP内运行的任意协议(因为在IP之上运行的其他协议不一定具有任何端口的概念),所以不能做你想做的事情,因为不能保证在那里是交通“stream”内的任何信息,以允许这种路由发生。 为了解决这个问题,某些协议将名称信息embedded协议中(比如HTTP和Host头),对于这些协议,通常会有代理接收请求,确定名称是呈现,然后将请求路由到适当的位置。 其他一些代理已经在其他答案中提到过,如果这些代理不够用,那么如果您告诉我们您尝试代理的是第7层协议,那么您无疑会收到适当的答案。

但是, 绝大多数协议并没有对预定目的地进行基于名称的识别,对于那些你别无select,只能使用IP地址来控制stream量到不同内部端点的stream量。

编辑 :如果你正在定义你自己的协议,应该可以embedded你连接的主机的名字在里面,然后你只需要编写自己的代理(可能作为一个插件现有的软件)采取这些请求,映射到正确的后端,并通过它们。

不 – 你不能为通用协议做,虽然它可以完成特定的协议 – 例如http通过放置反向代理不仅基于IP地址/端口,而且还请求的域名决定。