如何利用SSH Tunnel打洞
通常我们将SSH当作更安全的TELNET在使用,实际上SSH还能帮助我们进行网络打洞,开辟隧道,解决很多实际工作中
的互联互通问题,这就是SSH tunnel,它属于端口映射技术(port forwarding),是建立在SSH连接上的一个加密
隧道,利用它可以放心传输数据而不用担心信息泄漏。正是由于它的加密传输,数据不容易在传输过程中被第三方窥探,
所以可以利用它来帮我们穿越”全世界最大的局域网”的限制,从而真正意义上的畅游Internet!
创建了SSH隧道之后,不用直接去访问远程服务器,相反你访问你本机的某个端口,SSH Client会把你的数据通过已建
立的加密通道转发到远程主机的目的端口去。这就是端口映射技术(port forwarding)名称的由来。
SSH隧道分三种
Local Forwarding
主要用来提供常规的加密隧道,主要是将本机某个端口,直接映射到远程机器的某端口上,来达到加密传输的目的。
比如远程主机上有一个WEB服务,监听80端口,走的是不加密的HTTP协议,如果你想要确保登录时输入的帐号和密码
的绝对安全,就可以使用SSH的Local Forwarding技术来实现加密传输。
前提条件:你必须有远程主机的帐号和密码,并且能通过ssh登录上去。
【windows配置】
在PuTTY的Connection->SSH->Tunnels中创建一个Local的映射关系。比如,我们在Source Port中输入1443,
在Destination中输入对方主机的IP地址:端口(例如192.168.214.129:80),然后选择Local,再点一下Add,
在Forwarded ports中就会出现”L1443 192.168.214.129:80″,这时隧道就建好了,如果你现在通过SSH登录
到这台主机,你与主机之间就会创建出一条SSH加密隧道,所有你发往本地1443端口的数据,都会通过SSH隧道传到
对方主机的192.168.214.129:80这个socket上去。

【linux配置】
操作更简单,直接ssh -L 1443:192.168.214.129:80 192.168.214.129就可以了。
之后在浏览器中输入http://localhost:1443就可以以安全方式访问192.168.214.129:80端口上的内容了。
Dynamic Forwarding
假设我们所用的A机器无法直接访问C服务器,和D服务器,但B服务器能直接访问C和D,A与B又是通的,加上我们又有B
机器的帐号和密码,能够以SSH登录。那么我们就可以借用B服务器来做Dynamic Forwarding。即我们通常所说的
socks代理,这个使用场景最多,非常有用!
【windows配置】
只需在PuTTY的Connection->SSH->Tunnels中创建一个Dynamic的Foward端口。比如,我们可以在Source port
中输入1080,然后选Dynamic,再点一下Add,在Forwarded ports中就会出现“D1080,这时隧道就设置好了,如果
你现在再登陆到B这台主机上,你与B主机之间就会创建出一条SSH加密的通道,所有你发往本地1080端口的的数据,都
会通过SSH隧道传到B主机上再发送出去,并把返回的结果也以相同的方式传回来。

【linux配置】
操作更简单,直接ssh 192.168.214.129 -D 1080就可以了。
之后A机器就可以通过socks代理(代理地址localhost:1080),顺利访问C和D主机了。也可以通过SocksCapV2来
达到透明使用socks的目的。