我有一个相当奇怪的情况,但是很简单,我发誓。 我有一个服务器(我们称之为主机A),它连接到互联网,我用于一些网站和其他几个目的。 我有另一个服务器(我们称之为B),它承载文件和其他一些东西,但它在防火墙和NAT之后。
我想要做的就是设置主机A上的一个特定端口接受某个端口上的TCPstream量,并通过VPN或其他点对点隧道将其转发给主机B.然后主机B将能够回应。 基本上,主机A将充当反向代理/负载均衡器,但由于主机B位于不同networking(防火墙后面)的不同位置,我希望A和B通过隧道而不是直接连接。
我知道这样做效率不高,但我相信这是对主机B相当奇怪的networking状况可用的最佳解决scheme。
我认为这个解决scheme将是fproxy和一个ipsec隧道的混合,但我很难找出如何正确设置ipsec(我从来没有使用过)。 我曾经看过OpenSwan和StrongSwan,但麻烦在于,两者似乎都是为了连接两个局域网,而且在ipsec中穿越NAT的文档似乎超出了我的理解范围。 在我的情况下,我希望隧道只能展示给两台机器,可能是作为每台机器上自己的接口。 通过这种方式,我可以设置fproxf(或另一个反向代理)来代理虚拟IP地址,该虚拟IP地址将自动将stream量传输到另一台计算机,并将该计算机上的软件显示为另一个虚拟地址。
然而,我在这里问的关键问题是因为我不知道这是否是最好的办法。 对于如何configurationipsec来启用两台机器之间的通信,我很乐意提供任何build议或build议。
这并不需要很复杂。 使用你的host_a
和host_b
例子:
host_b# ssh -f -N -g -R 80:host_b:80 user@host_b
这应该将host_b上的端口80(www)转发到端口80(www)。 我没有testing过这个确切的组合,但我使用转发这样的端口很多。
你可以像@David所build议的那样做一个SSH隧道,尽pipe保持隧道持续运行需要在终止隧道的机器上进行一些types的过程,以定期检查隧道状态并重新build立隧道状态(如果需要的话)。
我可能会在两台机器上都安装OpenVPN,并将“主机A”机器configuration为服务器,将“主机B”机器configuration为客户机。 如果OpenVPN失败,OpenVPN会自动重新build立隧道(这就是为什么我会通过SSH进行部分修改)。 一旦启动并运行,我可能会在“主机A”计算机上使用iptables
规则来NAT /通过OpenVPN隧道将stream量转发到“主机”B计算机。