想象一下,我在不同位置有多个(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
很难满足您的确切需求,但您可以尝试的一种可能性是:
- 设置从服务器到服务器的 VPN 隧道。这解决了您对 VPN 的抱怨。
- 使用 TProxy 补丁运行 HAProxy。这可以创建通用 TCP 代理并保持原始 IP 完好无损。但有一个警告是,所有回复都必须通过负载均衡器路由。然后,此流量可以通过 VPN 隧道。
您的要求非常具体,如果退一步思考并更详细地解释您想要构建的内容,您可能会从我们这里得到更好的建议。
答案2
一旦开始将数据包从一台服务器转发到另一台服务器,网络负载就会加倍。为什么不设置路由器/防火墙,根据目标端口重定向数据包,以便数据包首先到达正确的服务器呢?然后路由器/防火墙将处理来回切换目标地址。
之所以需要“来回”是因为如果客户端认为它正在连接到服务器1,那么返回的数据包必须来自 server1 的 IP 地址,否则客户端将忽略它们,因此当 server3 响应时,“来自”地址需要更改为 server1,如果防火墙使用类似 Linux 的 ip_conntrack 进行 NAT,它应该自动处理该地址。
如果您坚持在服务器之间来回转发,我有一些想法,但现在无法测试它们。