SSH端口转发与二次转发

SSH Tunneling

SSH端口转发功能通过ssh隧道方式,在本地端口和远程服务器的某个服务之间建立转发关系,而SSH连接充当了转发服务流量的隧道。从安全性来说,正确配置的SSH服务器有很高的安全性,而SSH Tunneling可以转发任意的服务,避免了将其他机器或端口暴露给外网。
如下图所示,Xshell客户端首先连接到公网IP地址x.y.160.14,ssh连接建立之后,根据配置的转发规则,在Xshell客户端所在主机的本地15902端口和目标服务器172.26.0.17的5900端口之间建立了转发关系。VNC客户端访问本地15902端口即相当于访问172.26.0.17的5900端口VNC服务。在一个SSH连接上,可以建立多个转发规则,如图中的172.26.0.17,172.26.0.18,172.26.0.19。SSH服务器x.y.160.14的内网地址是172.26.0.14,SSH服务器和转发目标通常位于同一个网段。
SSH端口转发与二次转发

二次转发

有时仅转发一次还不能方便访问到位于远端的、内网的服务,而是需要做两次跳转。
例如,首先SSH到服务器A,作为跳板机,只能从服务器A再SSH登录服务器B,最后要访问的web服务位于服务器C,服务器C跟服务器B在同一个内网网段。
第一层转发规则建立在服务器A的SSH连接上,可以表示为
ssh(serverA, 22) -> tunnel1(localhost:localport1) -> serverB:22
serverA是10.x.y.19,serverB是202.x.y.204,localport1是22222。
SSH端口转发与二次转发

第二层转发规则建立在localhost:localport1这个ssh服务的连接上,可以表示为
ssh(localhost, localport1) -> tunnel2(localhost:localport2) -> serverC:80
serverC是192.168.x.196,localport2是10080。
SSH端口转发与二次转发

综合起来,做了两次隧道转发,tunnel1(localhost:localport1) 在外层,tunnel2(localhost:localport2)在内层。沿着这种思路,可以实现多层转发。

最后,打开浏览器访问本地10080端口,数据将依次通过tunnel2和tunnel1,最终访问到远端的serverC的服务。
SSH端口转发与二次转发