端口转发

端口转发(port forwarding),又称SSH隧道(tunnel)。将SSH作为加密通信的中介,充当两台服务器之间的通信加密跳板。

端口转发主要有两个作用:

  1. 将原本不加密的数据放在SSH安全连接里面传输,增加明文网络服务的安全性(如Telnet、FTP等)。
  2. 作为数据通信的加密跳板,绕过网络防火墙。

端口转发分为三种方式:动态转发,本地转法,远程转发。

动态转发

本机与 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服务器上执行。