在本地程序不知情的情况下通过不同的路由隧道端口

在本地程序不知情的情况下通过不同的路由隧道端口

我需要设置以下方案:

  • server1:通用程序本地连接到代理,然后通过代理连接到server2。
  • 一切都正常,直到服务器之间的连接。
  • 当连接中断或发生其他事件(例如数据包丢失,多次重新传输等)时,事情将无法正常工作,我们需要执行以下操作:

    1. server1 将当前连接“重新路由”到具有相同代理程序的第三台服务器(server3)
    2. server3 与 server2 的连接正常,
    3. 因此,本地通用程序不会重新连接,甚至不关心连接问题。
    4. 分别在另一侧(在server2上)的本地通用程序也不知道存在另一条路由。

可能,这可以用 haproxy 和 openvpn 来模拟,但是 openvpn 连接对于快速交换机来说太慢了,而且对于仅一个服务(比如说 tcp 端口)来说设置太复杂了。

[-这就像端口的隧道-]并且当服务器1和服务器2之间发生某些事情时,服务器1上的本地客户端程序不需要重新连接(或建立新连接)到服务器2上的服务器程序

有人能给我一些关于 Linux 下这样的 tcp-proxy-reroute 程序的建议吗?

编辑:我并不是说我需要保存 tcp 会话之类的。

我需要像 haproxy 这样的东西(在第 7 层工作),

  • 当client_prog_1_srv_1连接本地主机haproxy_1_srv_1时,

  • haproxy_1_srv_1 连接(互联网)到 haproxy_2_srv_2,

  • haproxy_2_srv_2 连接到 server_prog_2_srv_2 (也在本地绑定和连接),
  • 但是当 haproxy_1_srv_1 和 haproxy_2_srv_2 之间没有连接时,

    • haproxy_1_srv_1 连接到 haproxy_3_srv_3,
    • 连接到 haproxy_2_srv_2 并重用 haproxy_2_srv_2 和 server_prog_2_srv_2 之间打开的连接。
    • haproxes 之间的连接是通过互联网的,与终端程序(客户端、服务器)的连接始终是本地的。

答案1

如果服务器 2 和服务器 3 上的传出 IP 不同,则无法使用 TCP 构建这样的代理。

如果您可以控制路由,并且可以使用路由指标、OSPF 或类似方法自动绕过不良连接(如果不涉及 NAT),那么这可能是可行的。如果涉及 NAT,则可能存在不太复杂的解决方案,例如,教导您的客户端在发生错误时重新连接。

如果确实必须这样设计,您可能能够使用任播或故障转移来允许服务器 2 和 3 具有相同的传出 IP,但如果没有更多细节,您的使用案例听起来不像您拥有这种能力。

答案2

关于任意或通用 Linux 程序,有一点是...它们没有特征...

您需要应用程序级 [第 7 层] 网络,但使用通用程序/协议。https://www.rfc-editor.org/rfc/rfc3768(RFC 3768 -

添加 LVS 后,您突然又回到了 HAProxy 上。为了在第七层执行此操作,您必须编写自己的包装器服务器来执行以下操作:

  1. 接受前端的所有连接
  2. 监控后端可用的服务器/路由列表
  3. 通过活跃的服务器/路由引导流量

你的问题很复杂……但我相信那是因为你做了很多假设。VPN 很可能会让这个问题变得复杂,以至于你永远无法让它发挥作用。如果你准确地告诉我们你需要做什么,我们可能能够帮助您朝着正确的方向前进。

答案3

可以通过以下设置来完成:

  1. 两个边缘服务器上使用 openvpn+haproxy(tcp 模式)的私有网络,中间服务器上只使用 haproxies。
  2. 每个 openvpn 都本地连接到一个 haproxy,配置为:“一个普通服务器和一个备份服务器”,haproxy 会进行检查以验证应该使用哪个服务器。
  3. 检查显示 haproxy 必须使用备份,因此 haproxy 将连接切换到中间服务器。连接被断开。
  4. 立即发生 openvpn 重新连接 - 但这次 tcp 连接将从 edge-haproxy->backup 链接“路由”到 middle-haproxy,后者又代理到第二个 edge-haproxy,通过该代理到达第二个 edge openvpn。请注意,openvpn 不知道路由上有三个 haproxies。
  5. 而另一端的私有地址暂时不可用,导致双方应用程序建立的连接超时。
  6. openvpn 再次建立连接,私有网络再次启动,所有私有地址可用,双方的应用程序都可以从超时中恢复。
  7. 双方的第 7 层应用程序均未进行重新连接。丢失了一些数据包,这会在隧道网络上触发一些重新传输,但最终一切都正常。

您曾经使用过 VPN 吗?您将计算机连接到 VPN 服务器,然后您就进入了公司专用网络,然后使用 ssh 连接到您的工作计算机,如果 Internet 连接中断一分钟,VPN 会尝试重新连接,但 ssh 会在超时期间重新传输。一分钟后 Internet 连接恢复,VPN 会再次建立隧道,ssh 会继续,无需重新连接(最终在超时之前重新传输成功)。这就是我需要的效果,但隧道必须通过中间服务器,因为它在一段时间内具有更好的连接性。如果所有 tcp 流量都由 haproxies 相互通信进行,则可以完成此操作。但我认为这种设置非常复杂,并且 openvpn(或隧道)重新连接的速度很慢。注意 haproxy 是这个应用程序 -http://haproxy.1wt.eu/,它具有 tcp 模式 - 功能上与 http 代理非常相似。

相关内容