任何 TCP 相关协议的独特代理

任何 TCP 相关协议的独特代理

我不知道该如何称呼它(代理/重定向/中继),我希望可能存在适用于 Linux 的某些软件或解决方案。

我的目的是能够监听单个面向公众的 ip:port(特别是端口 80)和代理(?)流量到每个运行的内部服务器独特的应用程序实例。TCP 连接中的数据将用于确定要访问哪个内部服务器,即要连接到一个不同的实例。这将需要对应用程序数据进行某种形式的 7 级解析,并从该代理(?) 到正确的端点。

我是不是希望实现负载平衡。虽然我一直在研究 haproxy 和类似的软件,试图更好地理解我的问题。haproxy 在使用 http 标头中的信息确定要将负载平衡到哪个内部服务器来“代理”http 流量方面所做的工作与我想要做的非常相似。这有点问题,因为在搜索这个时,我不断找到只解析 HTTP tcp 流量的东西,但我需要更通用的东西。或者也许这在 haproxy 中是可能的,但我没有看到任何表明这一点的东西。

我将具体使用的应用程序协议是联盟,并且它通过单个端口工作,因此应该是可中继的。再次强调,目的是允许 union 的多个实例都监听面向公众的端口 80,尽管每个实例当然都会监听内部地址/端口。

这对任何人来说都有意义吗?或者我完全走错了我想做的事情。由于有如此多的负载平衡器可以与任何 TCP 相关协议一起使用,我可以想象有人可能使用 l7 过滤做了一些事情,而只是忽略了负载平衡位。

答案1

听起来很复杂。我建议使用类似OpenVPN. 设置更简单您可以使用端口 80 TCPOpenVPN连 接。

答案2

如果你愿意暴露服务器的内部主机名或 IP 地址,一个简单的 HTTP连接代理可以工作:

==> (connected to <proxyhost>:80)
--> CONNECT server42:<port> HTTP/1.0
--> Host: <proxyhost>
--> 
<-- HTTP/1.0 200 Connection Established
<-- Proxy-agent: Apache/2.2.19 (Debian)
<-- 
--> (client sends Union handshake as usual)

类似的协议有 SOCKS 5(稍微复杂一些)和 TCPMUX(可能是最容易实现的;使用 xinetd 作为代理)。这三种协议都可能需要修改您的客户端程序。

答案3

我正在研究但从未完成的解决方案是使用Apache 流量服务器。它包含一个框架,用于为通过 TCP 的任何协议构建插件并根据需要代理流量。他们的示例“协议”插件是一个很好的入门指南,可以准确地了解如何轻松地将您的协议包装在另一个协议中,专门用于反向代理。如果有人正在寻找类似的解决方案,我会推荐这个(但是需要开发工作,因为它全部用 C 语言构建)。

相关内容