ssh反向隧道实验——在没有路由器权限的情况下,让外网访问内网服务器

ssh反向隧道实验——在没有路由器权限的情况下,让外网访问内网服务器

http://my.oschina.net/abcfy2/blog/177094

有关ssh反向隧道的概念和用法详情可以google,这里不再细表,只是做一个实验。

服务器在局域网,没有配置路由器端口映射,想让外网访问到内网服务器。 
此时外网有一个公网服务器,该服务器具有合法IP,希望借助该服务器访问到局域网,该服务器将作为用户前端服务器,外网用户访问这个服务器就可以访问到局域网内部服务器了。

以下涉及到外网服务器的IP全部打码处理

开始试验,首先按照这个资料:http://blog.zjutoe.net/?p=95 , 来简单做个小实验。 
virtualbox虚拟了一个debian,就照着资料提供的命令在debian的终端上敲autossh -M 5678 -NR 19999:localhost:22 root@myserver_ip,输入密码后ssh就在前台开始监听端口了。

进入外网服务器,看一下监听端口: 
在此输入图片描述

没问题!确实在远程服务器开放了一个19999端口,通过这个端口就实现了隧道,访问这个端口实际就访问了我内网服务器的22端口。显然22端口是ssh的默认端口,我们现在就来试一下: 
在此输入图片描述

Very Good!成功了!在没有路由器端口映射的情况下,成功让外网访问到了内网服务器!

接下来我们继续实现我们的需求,在虚拟机上的debian搭建webserver。 
使用apache做webserver,IP为192.168.1.106,为了让实验明显点,编辑了一下index.html。 
局域网内部打开浏览器,访问192.168.1.106

在此输入图片描述

现在要让外网访问到这个网站,其实我不怎么会搭建socket-4a代理,只好把上面的命令改一下了,让外网服务器上19999映射到内网服务器上80端口。(其实用socket代理效果会更好,不需要再这么转端口了) 
在debian服务器上把命令改成autossh -M 5678 -NR 19999:localhost:80 root@myserver_ip 
这次在外网服务器测试一下,终端下用links浏览器访问一下看看 
在此输入图片描述

在此输入图片描述

Good job! 发现确实OK,注意用的是http-proxy,socket-proxy需要改一些东西。 
此时理论上只要用这台服务器做代理服务器,那么外网用户就可以访问到内网服务器了。

但是外网用户可能还是觉得自己去配置代理服务器太麻烦了,喜欢更加简单的操作。 
那么我们可以用apache(或者nginx等其他webserver)的mod_proxy模块,把apache配置成前端代理服务器,用户访问本机的apache就相当于访问了内网服务器,这个也很简单,打开apache的mod_proxy模块,在配置文件中写上http代理的配置即可。 
我是这么写的:

在此输入图片描述

按照这个配置,用户访问/proxy实际就是访问的内网服务器(可根据需要调整),实际上是不是这样呢? 
迫不及待的打开本机浏览器,访问一下/proxy 
在此输入图片描述

Nice!!!完全一致!! 
至此完成全部实验!

这个问题,ssh -y -i ssh.rsd -f -N -R直接搞定,ssh本身就有的功能而已。

发表评论

电子邮件地址不会被公开。 必填项已用*标注