Dur*_*ndA 7 reverse-proxy ssh-tunnel
我有一个基于 linux 的设备(假设是一个 Raspberry Pi),它托管一个 HTTP 服务器。此设备会定期更改 WiFi 接入点,并且由于 NAT 和/或防火墙的原因通常无法公开访问。
我想使用公开可用的服务器(rpi.example.com如下)设置反向 ssh 隧道,rpi behind NAT以便rpi.example.com在启动时建立隧道。rpi.example.com然后将任何 HTTP 请求转发到rpi behind NAT.
时序图:
HTTP client rpi.example.com rpi behind NAT
+ + +
| | ssh -R |
| | <-----------------+
| GET /temp | |
+-----------------> | |
| +-----------------> |
| | [SSH tunnel] |
| | <-----------------|
| HTTP/1.1 200 OK | |
| <-----------------+ |
| | |
Run Code Online (Sandbox Code Playgroud)
如何设置这样的反向 SSH 隧道?有更好的选择吗?
我认为 VPN(例如 openVPN 或像 Strongswan 这样的 IPSEC 解决方案)可能效果更好。
你绝对可以使用 SSH,通过以下-R开关:
-R 远程套接字:本地套接字
指定到远程(服务器)主机上给定 TCP 端口或 Unix 套接字的连接将转发到本地端的给定主机和端口或 Unix 套接字。这是通过分配一个套接字来侦听 TCP 端口或远程端的 Unix 套接字来实现的。每当与此端口或 Unix 套接字建立连接时,该连接都会通过安全通道转发,并从本地计算机与主机端口 hostport 或 local_socket 建立连接。
您只需要 Pi 上有一些东西来启动连接,并在失败时重新启动它。这里的 NAT 是无关紧要的,因为隧道将直接位于您的公共主机和 Pi 之间 - 在您的主机上,您实际上会有一个侦听器(例如 127.0.0.1:9999),并将配置您的网络服务器以使用该侦听器作为上游。
最有可能的是,您希望有一个专门的用户来创建此转发(因为您的 Pi 需要能够对您的服务器进行身份验证,这几乎肯定意味着您需要一个无密码的私钥)。如果您需要多个连接,您还需要为每个端口创建一个转发连接。
我怀疑 VPN 会更容易可靠地工作,并且本质上需要更少的脚本。不过,这两种方法都有效。