SSH反向隧道实现树莓派穿透内网

本文是通过SSH反向隧道方式实现外网访问内网中的树莓派服务器。不需要设置端口映射。一条命令即可完成。

需求分析

现有一个树莓派提供服务,需要通过外网访问。树莓派(A)能与外网通讯,但没有公网IP。手中还有一个服务器(B)有公网IP,可以与树莓派通讯。现需要外网中访问树莓派(A)提供的服务。

思路

SSH转发是

1
本机 -> 隧道 -> 外网服务器

既然这个是一个双向通讯,那么必然可以

1
本机 -> 隧道 -> 外网服务器 -> 外网客户端

这就需要用到ssh的反向隧道,它在服务器上打开一个监听端口,这个端口的访问会被隧道传输到本地,结果再通过隧道传到服务器上,从监听端口返回给客户。这样,在我们的应用中,内网机器通过外网访问DMZ服务器,创建ssh反向隧道,就能够对外提供服务了。当然,防火墙上要将相应端口映射到DMZ的服务器上。

实现

由于服务器B不能直接访问A,但A可以访问B。所以需要在服务器树莓派(A)来主动建立隧道。

在树莓派上运行一下命令

1
ssh -fNgR 8080:localhost:8000 USER@serverB

其中8080为外网端口,即通过外网访问http://serverB:8080来访问本地的http://localhost:8000

参考