端口转发
端口转发(port forwarding),又称SSH隧道(tunnel)。将SSH作为加密通信的中介,充当两台服务器之间的通信加密跳板。
端口转发主要有两个作用:
- 将原本不加密的数据放在SSH安全连接里面传输,增加明文网络服务的安全性(如Telnet、FTP等)。
- 作为数据通信的加密跳板,绕过网络防火墙。
端口转发分为三种方式:动态转发,本地转法,远程转发。
动态转发
本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。动态转发需要把本地端口绑定到 SSH 服务器。至于 SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信。
ssh -D local-port tunnel-host -N
-D
:表示动态转发local-port
:本地端口tunnel-host
:SSH服务器-N
:表示SSH只进行端口转发,不登录远程Shell,不能执行远程命令,只能充当隧道
动态转发采用了SOCKS5协议,访问外部网站时,需要把HTTP请求转成SOCKS5协议,才能把本地端口的请求转发出去。
本地转发
SSH 服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。本地转发指定一个本地端口(local-port),所有发向那个端口的请求,都会转发到 SSH 跳板机(tunnel-host),然后 SSH 跳板机作为中介,将收到的请求发到目标服务器(target-host)的目标端口(target-port)。
ssh -L local-port:target-host:target-port tunnel-host
-L
:表示本地转发local-port
:本地端口target-host
:目标服务器target-port
:目标服务器端口tunnel-host
:SSH服务器
本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议。
远程转发
远程转发指的是在远程 SSH 服务器建立的转发规则。
它跟本地转发正好反过来。建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机,而远程转发则是通过远程计算机访问本地计算机。
ssh -R remote-port:target-host:target-port -N remotehost
-R
:远程端口转发remote-port
:远程服务器端口target-host
:目标服务器target-post
:目标端口remotehost
:远程服务器
第一个例子是内网某台服务器localhost
在 80 端口开了一个服务,可以通过远程转发将这个 80 端口,映射到具有公网 IP 地址的my.public.server
服务器的 8080 端口,使得访问my.public.server:8080
这个地址,就可以访问到那台内网服务器的 80 端口。
ssh -R 8080:localhst:80 -N my.public.server
上面命令是在内网localhost
服务器上执行。