通过 VPN 进行 TCP 反向代理

通过 VPN 进行 TCP 反向代理

我的情况很奇怪,但我发誓这很简单。我有一台服务器(我们称之为主机 A),它连接到互联网,我用它来访问一些网站和其他零碎的东西。我还有另一台服务器(我们称之为 B),它托管文件和其他一些东西,但它位于防火墙和 NAT 后面。

我想做的是设置它,以便主机 A 上的特定端口将接受特定端口上的 TCP 流量,并通过 VPN 或其他点对点隧道将其转发到主机 B。然后主机 B 将能够响应。基本上,主机 A 将充当反向代理/负载平衡器,但由于主机 B 位于不同网络上的不同位置(防火墙后面),我希望 A 和 B 通过隧道而不是直接连接。

我知道这样效率不高,但我相信对于主机 B 这种比较奇怪的网络状况来说,这是最好的解决方案。

我认为解决方案是将 fproxy 和 ipsec 隧道混合使用,但我不知道如何正确设置 ipsec(我以前从未使用过它)。我研究过 OpenSwan 和 StrongSwan,但问题是它们似乎都旨在桥接两个 LAN,而且 ipsec 中有关 NAT 遍历的文档似乎超出了我的理解范围。在我的处境中,我希望隧道仅呈现给所涉及的两台机器,可能作为每台机器上的自己的接口。这样,我就可以设置 fproxf(或另一个反向代理)来代理到虚拟 IP 地址,该地址将自动地将流量传输到另一台机器,在那里它将作为另一个虚拟地址出现在该机器上的软件中。

不过,我在这里提出的关键问题是,因为我不知道这是否是最好的方法。我愿意听取任何关于如何配置 ipsec 以仅在两台机器之间进行通信的建议或意见。

答案1

这不需要太复杂。使用host_a和的示例host_b

host_b# ssh -f -N -g -R 80:host_b:80 user@host_b

这应该将 host_b 上的端口 80 (www) 转发到端口 80 (www)。我还没有测试过这个确切的组合,但我经常使用这样的转发端口。

答案2

您可以按照@David 的建议建立 SSH 隧道,但要持续保持隧道畅通,需要在终止隧道的机器上执行某种类型的进程,以定期检查隧道状态并重新建立隧道(如有必要)。

我可能会在两台机器上安装 OpenVPN,将“主机 A”机器配置为服务器,将“主机 B”机器配置为客户端。如果隧道失败,OpenVPN 将自动重新建立隧道(这就是我偏爱通过 SSH 使用它的原因)。一旦启动并运行,我可能会使用iptables“主机 A”机器上的规则通过 OpenVPN 隧道将流量 NAT / 转发到“主机 B”机器。

相关内容