SSH端口转发

SSH端口转发(SSH Tunnel)可以保护通信安全,也可以突破防火墙以访问需要的服务,其有三种转发模式,本地端口转发(Local Port Forwarding),远程端口转发(Remote Port Forwarding)以及动态端口转发(Dynamic Port Forwarding),本地转发在在本地(相对)主机进行,而远程转发是在远程(相对)主机进行,二者都是针对单一端口的转发,...

SSH端口转发(SSH Tunnel)可以保护通信安全,也可以突破防火墙以访问需要的服务,其有三种转发模式,本地端口转发(Local Port Forwarding),远程端口转发(Remote Port Forwarding)以及动态端口转发(Dynamic Port Forwarding),本地转发在在本地(相对)主机进行,而远程转发是在远程(相对)主机进行,二者都是针对单一端口的转发,动态端口转发可以将本地端口的流量转发到任意远程端口,并不要求本地与远程端口的一一对应关系。

本地端口转发

本地端口转发是指将发送到本地指定端口的请求转发到目标主机的目标端口。下面介绍本地转发应用的两个场景:

目标主机仅开放部分端口

如A主机(10.0.0.2)仅对外开放22端口,我们需要在客户机C(10.0.1.1)访问A主机上运行在8888端口的web服务,此时可以使用端口转发来实现。

ssh -L 889:10.0.0.2:8888 user@10.0.0.2
# -L - 本地转发参数
# 889 - 本地端口
# 8888 - A主机服务端口
# user@10.0.0.2 登陆A主机的用户名为user的用户

运行上面命令后,输入user的用户密码,在浏览器输入127.0.0.1:889便可访问到A主机的web服务。

通过第三方主机访问目标主机

假如与A主机(10.0.0.2)同网段内的B主机(10.0.0.3)可以自由访问A主机,而客户机C(10.0.1.1)不能访问A主机,但是可以访问B主机,此时,可以下面本地转发通过B主机访问A主机。

ssh -L 8808:10.0.0.2:8888 user@10.0.0.3
# user@10.0.0.3 登陆B主机的用户名为user的用户

运行上面命令后,输入user的用户密码,在浏览器输入127.0.0.1:8808便可访问到A主机的web服务。

远程端口转发

远程端口转发是指将访问远程主机的指定端口的请求转发到目标主机的目标端口。假如A主机(201.123.0.2)为公网IP,B主机(10.0.0.3)无公网IP,在B主机的233端口运行有Mysql服务,由于B主机没有公网IP,A主机无法直接访问,此时可以在B主机进行远程转发,使A主机可以访问B主机的sql服务。

ssh -R 8099:10.0.0.3:233 user@201.123.0.2
# 下面也是一样的
# ssh -R 8099:localhost:233 user@201.123.0.2
# -R - 远端转发参数

这样,输入密码后,就可以在A主机访问(mysal -u test -p -P 8099)B主机的sql服务。

动态端口转发

动态端口转发只需要指定本地端口,不需要与远程端口一一 对应,可以实现对不同端口的自动转发。如内网主机A可以访问外网主机B(123.123.1.1),但不可以访问其他外网主机,此时利用动态转发通过主机B可以让主机A自由访问外网。

ssh -D 127.0.0.1:1080 user@123.123.1.1
# -D 动态转发参数

连接到主机B后,还需要在主机A进行Socks代理设置,才可以使用。如在浏览器或系统的代理设置这进行相应的设置,便可以实现在浏览器中访问外网。

其他参数及配置

还有其他参数可以配合上述转发参数使用,如下面几个较为常用的:

# -N 表示创建隧道以后不连接到sshServer端,通常与"-f"选项连用
# -f 表示在后台运行ssh隧道,通常与"-N"选项连用
# -g 表示ssh隧道对应的转发端口将监听在主机的所有IP中,
# 不使用"-g选项"时,转发端口默认只监听在主机的本地回环地址中,
# "-g"表示开启网关模式,远程端口转发中,无法开启网关功能。
# ######
# 下面命令不登录ssh-server,且在后台运行本地转发
ssh -f -N -L 8808:10.0.0.2:8888 user@10.0.0.3

此外,有时为了使转发能够正常工作,可能还需要在服务端做一些设置,在ssh服务端的配置文件中将AllowTcpForwarding的值设置为yes;设置ssh服务端的ClientAliveInterval配置和ClientAliveCountMax配置可以使连接不会因长时间没有流量而自动断开。


参考

  1. ssh隧道详解,ssh端口转发详解
  2. 简单的ssh隧道实现代理上网
  3. 玩转SSH端口转发
Powered By Valine
v1.5.2