通过 SSH 隧道进行端口流量转发
通过 SSH
的 -L
、-R
参数可在管道内部建立一个有向隧道:
- 使用
-L
(Local) 参数建立一个由本地到远程的隧道(正向隧道);
- 使用
-R
(Remote) 参数建立一个由远程到本地的隧道(反向隧道)。
正向隧道
ssh -L [<bindHost>:]<sourcePort>:<forwardToHost>:<onPort> <connectToHost>
在本机与 connectToHost
的连接管道上,建立一条从本机到 connectToHost
的隧道。然后本机把收到的从 bindHost
发到本机 sourcePort
端口的数据通过隧道由 connectToHost
转发给 forwardToHost
的 onPort
端口。
注意:
1. bindHost
为 *
或者省略时,则表示所有主机;
2. forwardToHost
主机是以 connectToHost
的角度来看的,若 connectToHost
为 localhost
则表示是 connectToHost
的本地回环。
反向隧道
ssh -R [<bindHost>:]<sourcePort>:<forwardToHost>:<onPort> <connectToHost>
与 -L
类似,在本机与 connectToHost
的连接管道上, 建立一条由 connectToHost
到本机的隧道。然后 connectToHost
把它收到的从 bindHost
主机发往 connectToHost
的 sourcePort
的流量转发到本机,并由本机发送到 forwardToHost
主机的 onPort
端口。
其它相关参数
-f
:使 SSH 在建立连接之后保持在后台运行。-N
:告诉 SSH,我们只希望建立隧道,而不会在远程主机上执行任何指令。-T
:告诉 SSH,我们只希望建立隧道,因而不需要创建虚拟终端。-C
:允许 SSH 压缩数据。-D
:动态端口转发。将指定地址端口的数据转发到远程服务器,支持SOCKS5
协议。如:ssh -D localhost:1077 root@8.8.8.8
将本地1077端口接收到的数据转发到8.8.8.8