首 先看下面这张图,咱们所面临的大部分状况都和它相似。咱们的电脑在右上角,经过公司带有防火墙功能的路由器接入互联网(固然可能还有交换机什么的在中间连 接着你和路由器,可是在咱们的问题中交换机并不起到什么关键性的做用)。左下脚的部分是一个网站的服务器,它是咱们公司防火墙策略的一部分,也就是说公司 不但愿咱们访问这个服务器。在左上还有一台机器,它也是属于咱们的。可是这台机器并不在咱们公司里面,换句话说他不受到公司防火墙的限制。最后也是最重 要的一点是,咱们可以在公司经过互联网直接访问这台机器。或者说这台位于公司防火墙外面的机器须要拥有一个独立的互联网IP,同时公司的防火墙规则不会屏 蔽这台机器,而且这台机器运行着一个OpenSSH服务器。html
现 在,咱们清楚地知道了本身所处的网络环境。而且不难理解咱们在公司没法访问那个服务器的缘由是:线路A-B-C上A-B之间的防火墙屏蔽了对那个服务器的 访问。与此同时,咱们也很快注意到,线路A-B-D之间、D-C之间是不受阻碍的。相信你已经想到了,在A-B之间的防火墙不会屏蔽对机器d的访问。所以 咱们能够经过机器d创建一个通道A-B-D-C,从而访问到机器c上的数据。服务器
这条通道能够用不少技术来创建,这里咱们仅仅介绍如何使用SSH服务器来创建这样一个通道-他被称为SSH隧道。网络
在咱们计划创建一个本地SSH隧道以前,咱们必须清楚下面这些数据:ssh
如今,咱们把上面这张图变得具体一些,给这些机器加上IP地址。而且根据下面这张图列出咱们的计划:ide
如今咱们使用下面这条命令来达成咱们的目的网站
ssh -N -f -L 2121:234.234.234.234:21 123.123.123.123 ftp localhost:2121 # 如今访问本地2121端口,就能链接234.234.234.234的21端口了
这里咱们用到了SSH客户端的三个参数,下面咱们一一作出解释:spa
咱们再重复一下-L参数的行为。-L X:Y:Z的含义是,将IP为Y的机器的Z端口经过中间服务器映射到本地机器的X端口。.net
在这条命令成功执行以后,咱们已经具备绕过公司防火墙的能力,而且成功访问到了咱们喜欢的一个FTP服务器了。3d
使用SSH的方式不够稳定,使用AutoSSH能够自动在链接断开时自动重连,再把AutoSSH加入系统服务自动启动,则能够作到稳定的链接。orm
autossh是个很好的东西,他是用来保证SSH隧道链接稳定性的。在Ubuntu下安装
apt-get install autossh
使用方法很简单,好比原来直接用ssh的命令:
ssh -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port
如今改为:
autossh -M 5122 -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port
本文出自http://www.javashuo.com/article/p-qbqtzrxe-bp.html
autossh原理解析参考https://blog.csdn.net/wesleyflagon/article/details/85304336