我收到了一个不寻常的请求,我不确定是否有解决方案。
我的客户想要在机器 A 上托管一个 Web 应用程序,并且只能通过访问可公开访问的机器 P 的 URL 来访问该应用程序。
通常情况下,反向代理就足够了,但还有一个额外的、可以说是不必要的麻烦:我的客户不想在机器 A 的防火墙上打开 Web 应用程序的端口——甚至不局限于机器 P 的 IP 地址。但如果机器 A 以某种方式与机器 P 建立连接,他们就同意机器 A 与机器 P 建立连接传出联系。
是否有任何现有软件可以利用,以便以这样的方式设置反向代理,即机器 A 初始化连接(连接到机器 P 上绑定的端口),之后机器 P 能够将传入的 Web 请求反向代理到机器 A?
两台机器都运行 CentOS(6 或 7),我可以完全控制在它们上面安装我找到的任何软件。唯一的限制是,我无法在机器 A 面向公众的防火墙上打开任何传入端口(尽管在我看来,机器 P 是一台受信任的机器,但它被视为“公共”端口)。
答案1
正如您似乎意识到的那样,您使用的任何解决方案都比打开机器 B 上的防火墙以允许机器 A 糟糕得多。
您可以创建从机器 B 到机器 A 的 ssh 隧道,然后使用它。语法如下(从机器 A):
ssh -R 8081:localhost:8080 用户@machineb
这将允许人们连接到机器A上的localhost:8081来连接到机器b上的端口8080。
在这种情况下这不是一个好主意,因为您会失去对流量的可见性,使得调试更加困难,并且不必要地通过 SSH 对其进行加密。
当然,还有许多其他方法可以做同样的事情 - 例如,在两台机器之间建立 OpenVPN 隧道。