ssh服务除了实现“安全”的远程登录,命令执行,文件传递外,还可以基于隧道方式实现内网透传。
假定网络环境如下:
A主机 本地主机
B主机 远程主机
C主机 其他主机
本地端口转发
此处使用的是-L Local Port Forwarding
情况1:
A主机无法直接访问C主机,但是可以连通B主机。想通过B主机连通C主机。此时B与C有两种可能
- B与C可以通过公网连通
- B与C在相同局域网内
此时可以在A主机上执行如下命令
ssh -fgNL 8888:C主机IP:8888 user@B主机
执行此命令后就会建立A主机8888端口经由B主机到C主机8888端口的链接。
在A主机上访问A主机8888端口即可访问C主机的8888端口。
远程端口转发
此处使用的是-R Remote Port Forwarding
情况1:
B主机无法访问C,但是可以连通A,B主机希望通过A访问C
在A主机上执行
ssh -fNR 8888:C主机IP:8888 user@B主机IP
建立经由B主机8888端口经由A主机到C主机的连接
在B主机上访问本机8888端口即可连通C主机的8888端口
情况2:
A主机可以通过NAT方式访问外网,但是没有通过绑定端口或者DMZ等方式对外服务。可以通过-R方式在让拥有公网IP的B主机链接过来。
在A主机上执行
ssh -fNR 8888:127.0.0.1:8888 user@B主机IP
在B主机上访问8888端口即可访问A主机的8888端口。