什么是端口转发?
端口转发是将一个网络端口从一个网络节点转发到另一个网络节点的行为。
通俗来说,原本存在一个端口(被转发端口),数据通过这个端口进行通信。现在通过某种方式,建立一个隧道,这个隧道前端是转发端口,后端是被转发端口,通过访问这个转发端口,就可以与被转发端口进行通信。这就是端口转发。
1、本地端口转发
应用连接方向为A–>B,SSH连接方向也为A–>B,在ssh连接中附加端口转发功能,由于SSH具有方向性,所以应用连接的方向与SSH的方向相同时使用本地端口转发。
2、远程端口转发
应用连接方向为A–>B,SSH连接方向为B–>A,在ssh连接中附加端口转发功能。由于SSH具有方向性,所以应用服务的方向与SSH的方向相反时使用远程端口转发。
本地端口转发与远程端口转发是相对于SSH连接方向而言的,当转发端口建立在ssh的client端时,称为本地端口转发;当转发端口建立在ssh的server端时,称为远程端口转发。
示例:A通过B连接C的3306端口
1.本地端口转发实现方式
ssh -L A:2206:C:3306 root@B -p22
原理:在A上建立与B的SSH连接,A监听本机2206端口,将数据转发到C的3306端口
数据流向:client–>A:2206–>B–>C:3306(server)
进阶:
autossh -M 25621 -fNC -L A:2206:C:3306 root@B -p22
autossh使用 -M 指定端口号,当ssh连接断开后使用此端口重新建立连接
2.远程端口转发实现方式
原理:在B上建立与A的SSH连接,A监听本机2206端口,将数据转发到C的3306端口
ssh -R A:2206:C:3306 root@A -p22
数据流向:client–>A:2206–>B–>C:3306(server)
进阶:
autossh -M 25621 -fNC -R A:2206:C:3306 root@A -p22
autossh使用 -M 指定端口号,当ssh连接断开后使用此端口重新建立连接
记忆方法:
可以看到:无论是本地端口转发还是远程端口转发,-L 或者 -R 后面的写法一样,方向都是从左到右,从A的2206端口到C的3306端口。
所以我们只需按照应用的访问方向写转发规则。然后,当SSH连接方向与应用的连接方向一致时,使用本地端口转发,也就是 -L ,当SSH连接方向与应用的连接方向相反时,使用远程端口转发,也就是 -R 。