SSH 端口转发

2017-01-02  本文已影响385人  面包石头

SSH端口转发分为三种情况,分别为本地端口转发,远程端口转发以及动态端口转发.本文只介绍前两种.

什么是端口转发

日常生活中,客户端与服务器端连接(例如网页浏览时的http连接),都是从客户端发起时,指定服务器端的地址(包括IP和端口).例如访问百度时,浏览器指定服务器的地址为https://www.baidu.com. 其中www.baidu.com经过DNS解析后可得到一个IP地址,而https协议默认使用443端口,因此,访问百度时,浏览器会发起从本地到百度服务器443端口的连接. 而端口转发是指,客户端访问另一个地址和端口,该端口会将所有到达本端口的流量全部转发到目的地址.

SSH端口转发

ssh端口转发是指用ssh在本地环境和转发环境之间建立ssh隧道,这样不仅保证了数据传输安全,也能绕开一些网络防火墙等的限制.下面是ssh的man文档说明

man ssh

SSH本地端口转发

使用 -L 指定本地端口转发,指令形式为

$ssh -L [bind_localhostdaddress]:localhostport:remotehost:remotehostport user@transhost

其中bind_localhostaddress为可选地址,默认为localhost,即127.0.0.1
上面这条指令的意思为:
将发往localhostport的流量发送到transhost, 然后transhost再将收到的流量发送到remotehost:remotehostport. 这样就实现了localhostport的流量转发到remotehost:remotehostport的目的.

本地端口转发使用场景

  1. 绕过IP限制
    有hostA,hostB,hostC三台主机
目标:

hostA --访问--> hostC:80

现状:

hostA--可以访问-->hostB
hostA--不可以访问-->hostC:80
hostB--可以访问-->hostC:80

解决方案

在hostA中启用本地端口转发,将本地8080端口映射到hostC:80端口,这样hostA访问本地8080端口时,会自动将流量转发到hostC:80端口.
指令

[localuser@hostA] ssh -L 8080:hostC:80 hostBuser@hostB
  1. 绕过服务端端口限制
    有hostA,hostB两台主机
目标:

hostA--访问-->hostB:443

现状:

hostA--仅可访问-->hostB:8888端口(同时hostB开放22端口供远程SSH访问)

解决方案

在hostA中启用本地端口转发,将本地8080端口映射到hostB中的443端口,在hostB中流量路径为 hostB:8080 --> hostB:443
指令

[localuser@hostA] ssh -L 8080:localhost:443 hostBuser@hostB

注意上面指令中的localhost.可以从流量的角度理解,此处较容易令人疑惑,分步理解如下
流量从hostA:8080经过ssh隧道(22端口)到达hostB.
此时流量应当转发至localhost:443端口,因为流量已经到达hostB.因此,从hostB看,下一步的目的地址为localhost:443.即到达了hostB:443

[localuser@hostA] ssh -L 8000:hostB:443

SSH远程端口转发

上一篇下一篇

猜你喜欢

热点阅读