1、SSH隧道的主要作用:

    1、加密SSH Client 端至SSH Server 端之间的通讯数据 2、突破防火墙的限制完成一些之前无法建立的TCP 连接

    1. 3、探测内网连通性的时候,如果HTTP协议,ICMP协议等都被防火墙所禁用,但是恰好SSH 在内网还是可以用的,就可以使用SSH协议把内网流量带出网

    2、SSH隧道本地端口转发
    1、适用于内网WEB服务器 有公私网双IP;或是是A->C被限制 但是B=>C可达的内网场景
    2、它的命令格式为:
    ssh -Nf -L {本地端口}:{目标机器}:{目标端口} {中间机器}**
    # 或
    ssh -Nf -L {本地地址}:{本地端口}:{目标机器}:{目标端口} {中间机器}

    1. 3、例如以下拓扑,我们即可在VPS上执行如上命令<br /> 例如 SSH -L 2345:100.128.1.6:21 root@192.168.100.3 <br /> ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1431765/1591274144395-24262542-3f24-4431-8038-cf627162dd85.png#align=left&display=inline&height=266&margin=%5Bobject%20Object%5D&name=image.png&originHeight=264&originWidth=510&size=80898&status=done&style=none&width=514)
    2. 4、现在环境模拟一下,三台LINUX主机分别为PC1 PC2 PC3 <br />iptables -I INPUT -s 192.168.49.136 -j DROP **PC1增加防火墙规则禁止通往PC3**<br />**![image.png](https://cdn.nlark.com/yuque/0/2020/png/1431765/1591274214573-26c5365c-35ca-4d3a-9eea-bb5d34e4e3ba.png#align=left&display=inline&height=192&margin=%5Bobject%20Object%5D&name=image.png&originHeight=219&originWidth=734&size=108896&status=done&style=none&width=639)**<br />

    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.png

    4、现在环境模拟下,三台Linux主机A,B,C
    image.png
    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.png
    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