ssh反向隧道实验——没有端口映射的前提下,让外网访问内网服务器

来源:互联网 发布:软件测评师 编辑:程序博客网 时间:2024/05/20 08:24
摘要 设想这样一种场景: 在局域网中架设了一台服务器,但是又没有网关的配置权限(比如企业内部局域网内搭建的测试服务器,你又不是网管;比如校园网内部学生为学习而练习搭建的服务器等等),同时还希望外网用户能方便的访问到我这台内网服务器中,应该如何实现呢?
linux ssh 反向隧道 apache

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

设想这样一种场景: 
在局域网中架设了一台服务器,但是又没有网关的配置权限(比如企业内部局域网内搭建的测试服务器,你又不是网管;比如校园网内部学生为学习而练习搭建的服务器等等),同时还希望外网用户能方便的访问到我这台内网服务器中,应该如何实现呢?

幸运的是这个这个需求并不少见,已经有了一些优秀的解决方案,比如本文中即将提到的ssh tunnel

服务器在局域网,没有配置路由器端口映射,想让外网访问到内网服务器。 
此时外网有一个公网服务器,该服务器具有合法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!!!完全一致!! 
至此完成全部实验!

0 0
原创粉丝点击