Debian:如何将端口转发到具有原始 IP 地址的另一台服务器?

Debian:如何将端口转发到具有原始 IP 地址的另一台服务器?

想象一下,我在不同位置有多个(debian)服务器,它们之间没有通过 LAN 连接。

我需要找到一种方法将特定端口转发到其他服务器之一,但处理请求的服务器应该看到连接到转发服务器的用户的原始 IP。我知道 HTTP 有 X-Forwarded-For,但我对 TCP 很感兴趣。

也可以设置 VPN(openvpn、PPTP 等),我不知道这是否有帮助,但 VPN 的问题是所有跨服务器连接都将通过 VPN 主机,但如果每个服务器都可以将流量直接转发到另一个服务器,那就更好了。

我的意思是: server1:80 => server2:80
server2:8080 => server3:8080
server3:1234 => server1:1234

我尝试了 SSH 转发,但原始 IP 丢失了。

答案1

很难满足您的确切需求,但您可以尝试的一种可能性是:

  1. 设置从服务器到服务器的 VPN 隧道。这解决了您对 VPN 的抱怨。
  2. 使用 TProxy 补丁运行 HAProxy。这可以创建通用 TCP 代理并保持原始 IP 完好无损。但有一个警告是,所有回复都必须通过负载均衡器路由。然后,此流量可以通过 VPN 隧道。

您的要求非常具体,如果退一步思考并更详细地解释您想要构建的内容,您可能会从我们这里得到更好的建议。

答案2

一旦开始将数据包从一台服务器转发到另一台服务器,网络负载就会加倍。为什么不设置路由器/防火墙,根据目标端口重定向数据包,以便数据包首先到达正确的服务器呢?然后路由器/防火墙将处理来回切换目标地址。

之所以需要“来回”是因为如果客户端认为它正在连接到服务器1,那么返回的数据包必须来自 server1 的 IP 地址,否则客户端将忽略它们,因此当 server3 响应时,“来自”地址需要更改为 server1,如果防火墙使用类似 Linux 的 ip_conntrack 进行 NAT,它应该自动处理该地址。

如果您坚持在服务器之间来回转发,我有一些想法,但现在无法测试它们。

相关内容