基本上我想要这样的东西:
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 服务器级别,甚至是本地网络上运行某些应用程序的其他机器,这些应用程序只需将流量传递到适当端口上的适当机器。
进一步说明:它不是 HTTP 流量,而是我们自己的自定义协议(我们自己的在 .NET 中使用 Remoting 的客户端/服务器应用程序)
答案1
好的,让我们澄清一下这里的一些困惑......
首先,您的问题中没有明确要求所有这些名称都解析为同一个 IP 地址——因此,您可以为路由器设备分配一组地址,设置 DNS 记录以提供名称到 IP 地址的一对一映射,然后使用 DNAT(目标网络地址转换)将流量转发到内部设备。
我将继续假设您没有能力用一堆 IP 地址来解决问题。
一般来说,对于在 TCP 或 UDP 内部运行的任意协议(因为在 IP 之上运行的其他协议不一定具有端口概念),您无法执行想要执行的操作,因为无法保证流量“流”内有任何信息允许进行此类路由。某些协议试图绕过这个问题,做在其协议中嵌入名称信息(例如 HTTP,带有Host
标头),并且对于这些协议,是通常,代理将接收请求,确定所呈现的名称,然后将请求路由到适当的位置。其他答案中提到了其中一些代理,如果这些代理还不够,如果您告诉我们您尝试代理的第 7 层协议是什么,您无疑会得到适当的答案。
但是,那广阔的大多数协议没有基于名称的目的地识别,对于这些协议,您别无选择,只能使用 IP 地址来控制流向不同内部端点的流量。
编辑:如果您正在定义自己的协议,则应该能够在其中的某处嵌入您所连接的主机的名称,然后您只需编写自己的代理(可能是作为某些现有软件的插件)来接受这些请求,将它们映射到正确的后端,并传递它们。
答案2
不可以 - 您不能对通用协议执行此操作,但可以对特定协议执行此操作 - 例如通过放置反向代理来执行此操作,该代理不仅基于 ip 地址/端口做出决策,还基于请求的域名做出决策。