通过反向 ssh 隧道建立 HTTP 服务器

通过反向 ssh 隧道建立 HTTP 服务器

我有一台基于 Linux 的设备(比如说 Raspberry Pi),它托管一个 HTTP 服务器。此设备会定期更换 WiFi 接入点,并且由于 NAT 和/或防火墙,通常无法公开访问。

我想使用一个公开可用的服务器(rpi.example.com如下)设置一个反向 ssh 隧道,以便在启动时rpi behind NAT建立一个隧道。然后将任何 HTTP 请求转发到。rpi.example.comrpi.example.comrpi behind NAT

序列图:

HTTP client       rpi.example.com     rpi behind NAT
     +                   +                   +
     |                   |       ssh -R      |
     |                   | <-----------------+
     |    GET /temp      |                   |
     +-----------------> |                   |
     |                   +-----------------> |
     |                   |   [SSH tunnel]    |
     |                   | <-----------------|
     |  HTTP/1.1 200 OK  |                   |
     | <-----------------+                   |
     |                   |                   |

如何设置这样的反向 SSH 隧道?还有更好的选择吗?

答案1

我认为 VPN(例如 openVPN 或像 strongswan 这样的 IPSEC 解决方案)可能会更好用。

您绝对可以使用 SSH,使用以下-R开关:

-R 远程套接字:本地套接字

指定与远程(服务器)主机上给定 TCP 端口或 Unix 套接字的连接将转发到本地端的给定主机和端口或 Unix 套接字。这通过分配一个套接字来监听远程端的 TCP 端口或 Unix 套接字来实现。每当与此端口或 Unix 套接字建立连接时,连接都会通过安全通道转发,并从本地计算机建立与主机端口 hostport 或 local_socket 的连接。

你只需要在你的 Pi 上安装一些东西来启动连接,如果失败了就重新启动它。这里的 NAT 无关紧要,因为隧道将直接位于你的公共主机和 Pi 之间 - 在你的主机上,你实际上会有一个侦听器(例如 127.0.0.1:9999),并将你的 Web 服务器配置为使用该侦听器作为上游。

最有可能的是,您需要一个专门的用户来创建此转发(因为您的 Pi 需要能够对您的服务器进行身份验证,这几乎肯定意味着您需要一个无密码私钥)。如果您需要多个转发连接,您还需要为每个端口创建一个转发连接。

我认为 VPN 更容易可靠地工作,并且本质上需要更少的脚本。不过,这两种方法都可以。

相关内容