1,SSH隧道的主要作用:
1,加密SSH客户端端至SSH服务器端之间的通讯数据
2,突破防火墙的限制完成一些之前无法建立的TCP连接
3,探测内网连通性的时候,如果HTTP协议,ICMP协议等都被防火墙所取代,但是恰好SSH内置网还是可以用的,就可以使用SSH协议把内网流量带出网
2,SSH隧道本地端口转发
1,适用于内网WEB服务器有公私网双IP;或者是A-> C被限制但是B => C可达的内网场景
2,它的命令格式为:
ssh -Nf -L {本地端口}:{目标机器}:{目标端口} {中间机器}
#或
ssh -Nf -L {本地地址}:{本地端口}:{目标机器}:{目标端口} {中间机器}
3,例如以下拓扑,我们即可在VPS上执行如上命令
例如SSH -L 2345:100.128.1.6:21 root@192.168.100.3
![image](https://upload-images.jianshu.io/upload_images/21837492-1a3d50bbe7d13fe3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4,现在环境模拟一下,三台LINUX主机分别为PC1 PC2 PC3
iptables -I INPUT -s 192.168.49.136 -j DROP PC1增加防火墙规则禁止实现PC3
![image](https://upload-images.jianshu.io/upload_images/21837492-97860741673f1256?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://upload-images.jianshu.io/upload_images/21837492-e11e43447636da1d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
PC1:192.168.49.138 ** 模拟VPS**
PC2:192.168.49.134 模拟WEB服务器
PC3:192.168.49.136 模拟内网主机
即ssh -L 2345:192.168.49.136:22 root@192.168.49.134
这样vps ssh自己的2345端口,可以访问内网主机PC3的22端口
3,SSH隧道远程端口转发
1,适用于WEB服务器,只有内网IP,可以出外网,并且内网主机之间可以互相访问
2,例如我们可以在WEB服务器上-(跳板机)上使用以下命令
SSH -Nf -R {远程VPS端口}:{目标机器}:{目标端口} {远程VPS机器}
3,例如以下拓扑,我们可以在WEB服务器上执行
SSH -R 1234:1.1.1.10:22 192.168.1.10
![image](https://upload-images.jianshu.io/upload_images/21837492-f7685d9bb087464f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4,现在环境模拟下,三台Linux主机A,B,C
![image](https://upload-images.jianshu.io/upload_images/21837492-4692bb8160d0c821?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
A:192.168.49.138 **模拟VPS**
B:192.168.49.136 **模拟内网服务器**
C:192.168.49.133 **模拟内网主机**
A不能访问B和C,B可以自由访问,配置以下命令
A:**iptables -I INPUT -s 192.168.49.133 -j DROP**
![image](https://upload-images.jianshu.io/upload_images/21837492-e6359dcbc15c412d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
B:ssh -Nf -R 2345:192.168.49.133:22 192.168.49.138
A:ssh -p 2345 127.0.0.1
成功连接内网主机C的SSH
4,动态转发(类似翻墙)
动态转发多个简单,主要就是为你创建一个SOCKS5
例如:
存在主机A,B,C,其A-> B = ok B-> C = ok A-> C = no ok
A:192.168.1.1恢复自己的计算机
B:192.168.1.2动态转发服务器
C:192.168.1.3谷歌
我们只需要再A主机使用命令SSH -D 1234 192.168.1.2(类似小飞机的作用)
然后再把浏览器设置代理端口1234即可将流量转发到192.168.1.2了,而这时自然也就可以出网上Google了
5,结论:
本地端口转发适用于跳板机双网卡,内外网皆可通,外网也可直接ping跳板机。
远程端口转发适用于跳板机可出外网,一般通过网关出口,外网不可直接到达内网。
其适用场景不仅仅与以上两种情况,偶尔也可以把内网当外网,外网当内网来进行SSH隧道的建立。
参考文档:
https://xz.aliyun.com/t/6966#toc-11
https://segmentfault.com/a/1190000019397169
https://www.cnblogs.com/keerya/p/7612715.html#_label2
https://blog.csdn.net/weixin_42741132/article/details/82947192