对于许多不同的 TCP 主机,如何区分它们并从同一个外部 IP 进行路由?

对于许多不同的 TCP 主机,如何区分它们并从同一个外部 IP 进行路由?

我意识到我可能在问一个不可能的问题——

目前,我使用了太多弹性 IP,而且它们要花钱。它们不仅要花钱……而且在灾难情况下,将 25-30 个弹性 IP 重新连接到一台机器需要时间。这些弹性 IP 都绑定到一台机器,并且具有内部机器的 1 对 1 映射。我想减少 IPS 的数量并将我的所有使用合并到一两个弹性 IP。然后,我想从该原始 IP 将所有这些主机路由并转发到它们各自的机器。但是,由于 HTTP 与 TCP 的性质以及缺少额外的标头,我还没有让它工作。我正在寻找有关我缺少什么的建议,或者我可以解决这个问题。

我有许多不同的主机在 TCP 端口上运行——例如

mydbserver.mycompany.com:3306
myseparatedb.mycompany.com:3306
anotherdb.mycompany.com:3306
myrdppc.mycompany.com:3389
mywebserver.mycompany.com:80/:443
myelasticsearch.mycompany.com:9200
mybamboo.mycompany.com:88
mybitbucket.mycompany.com:9090

等等等等

示例合并 IP:200.31.21.11 haproxy 绑定 IP:3.2.44.1

我使用的是 iptables 和 HAProxy 的组合。网关机器上使用 IPtables,后面另一台机器上使用 HAProxy。我想到了一个主意,为每台机器分配不同的 DNS 条目。每台机器都分配相同的“网关”IP。IPtables 设置为监听任何端口上发往 200.31.21.11 的请求,并将其转发到端口 999(我随机选择的端口)上的 HAProxy。这意味着 HAProxy 有一个绑定到 3.2.44.1:999 的前端

然后前端会将请求指向众多后端之一。从而将请求路由到适当的机器。

首先,我尝试使用 acl 匹配请求上的标头 --- 如果主机标头与 mydbserver.mycompany.com 匹配,则将其路由到适当的后端,然后将请求转发到端口 3306 上的计算机名

但是,这不起作用,因为主机标头不会在 TCP 请求中发送,而 haproxy 无法通过 http 连接到数据库。这是有问题的,因为无法区分请求和其主机。

我喜欢这个解决方案,因为我只需要为正在使用的一个或两个弹性 IP 付费,能够快速分配给任何新机器,并且考虑到弹性 IP 的性质 - 让它们永远存在。

是否有一个高级概念或流程可用于查看 TCP 请求本身并以某种方式将两者联系在一起?或者也许是我在 HAProxy 中遗漏了什么?

相关内容