一:SSH的本地端口转发原理
1、远程 SSH 访问保证:首先,需要保证能够正常通过 SSH 客户端工具连接到远程服务器,即远程主机的 SSH 端口(默认是 22 端口)必须可访问,并且远程服务器允许 SSH 登录。
2、本地端口监听和隧道建立:SSH 在客户端本地计算机上指定的端口(如 8080)上监听。当 SSH 隧道成功建立时,这个端口实际上成为了一个通向远程服务器指定端口的加密隧道。
3、本地数据通过隧道转发:当客户端本地程序将数据发送到本地的监听端口时,SSH 会将数据加密并通过隧道转发到远程服务器指定端口(如 localhost:8000),远程服务器的相应进程会处理这些数据。
4、请求的源地址处理:这里需要说明的是,对于远程服务器上运行的服务,它看到的请求源地址并不是客户端本地计算机的真实 IP 地址,而是 SSH 隧道的终点——远程服务器本身的地址(如 localhost 或 127.0.0.1)。因此,从防火墙的角度来看,请求实际上来自于远程服务器的本地地址,而非真正的客户端地址,这样就绕过了可能阻止外部 IP 的防火墙规则。
5、数据返回客户端:远程服务器处理完请求后,将响应数据返回给 SSH 客户端。响应数据通过 SSH 隧道加密传输,最后解密后传递给客户端本地的应用程序。对于客户端来说,这个过程和直接与远程服务通信几乎没有差别,像是直接在本地访问远程服务一样。
二:防火墙导致访问超时
1、使用浏览器访问时出现超时情况
2、使用远程端口探测发现端口探视失败:
# powershell
Test-NetConnection -ComputerName 10.0.4.99 -Port 80
3、服务器上端口正常监听且本地可以正常访问
因为此时没法排查是否是客户端或者网络的问题,所以可以通过SSH的本地端口转发方式来排查是否是服务器上的防火墙导致的没法直接访问
三:SSH本地转口转发配置流程
1、使用xshell建立连接
2、建立连接后会出现终端什么都不显示的状态,然后此时在浏览器进行访问测试,访问地址和端口都是本地的地址和端口;
四:SSH本地端口转发使用场景
1、内网资源未暴露在外网时,通过本地端口转发访问内部资源
当内部网络中的某些服务(如数据库、Web 服务)没有暴露在外网上,但需要在外部访问这些服务时,可以通过 SSH 本地端口转发将这些内部服务“映射”到你本地的某个端口。
2、绕过服务器的防火墙限制,访问特定应用进程
防火墙阻止你直接访问服务器上的某些端口(如 Web 服务的端口),而允许 SSH 连接。在这种情况下,可以通过 SSH 建立隧道,并通过隧道访问受防火墙限制的端口。这样,即使服务器有防火墙规则阻挡某些端口的外部访问,SSH 隧道可以绕过这些限制。
3、排除客户端和网络问题,验证防火墙配置问题
怀疑是防火墙阻止访问,可以使用 SSH 隧道来尝试访问目标服务。如果通过 SSH 隧道可以访问,而直接访问不行,那么就可以推断防火墙配置可能是问题所在。