Apache2.7+SSH实现内网穿透

一、背景


由于很多的第三方API在认证的时候都需要都需要一个回调地址(域名路径),而域名只能指向一个公网的IP,所以我们就需要一个暴露在公网的IP或者端口。

解决方法有很多,比如路由器做端口映射,ngrok内网穿透等等,这里,我们使用的方法是【SSH打洞+Apache反向代理】的方式,更多方法可以参考《自己搭建服务器...》)

二、 思考


最早,我的概念是 内网可以可以访问外网,但是外网由于不知道内网主机的IP,无法访问内网。再后来 了解了路由器端口映射,知道原来可以通过把路由器某个端口转发到内部某台电脑上的某个端口来实现让外网访问内网。

至此,我开始想如果外网访问内网的时候不仅带上公网IP,也带上了内网IP,是不是可以访问内网呢?理论上如果硬件支持,个人觉得应该可行。但估计需要路由器与应用的支持,感兴趣的可以了解下NAT。或者,如果我们建立一个socket长连接,只要长连接不关闭,接下来是不是就可以由外网一直访问内网呢?

SSH实现内网穿透的原理类似,ssh命令内网和服务器建立一个类似telnet的较长时间的连接(隧道),然后让服务器监听自己的某一个端口,ssh会将信息加密通过之前建立的专门的隧道发送到本机,并转发给本机之前指定的端口。若服务器是一个web服务器,某个端口已经被监听,可以再详细配置,本实验是将apache再做一个反向代理,实现对某个特定域名进行转发。

三、 实现步骤


3.1 配置Apache反向代理

3.1.1加载指定模块。将mods-available中的proxy.confproxy.load以及proxy_http.load三个文件建立软连接到mods-enabled,同时编辑proxy.conf,改变权限

 将模块前面的'#'去掉

注意:网上很多说把require all denied改成require all granted,实际上不要这么操作,因为一旦这样,就会开放这个代理,导致很多其他网站使用我们的网站做代理。是否开放代理可以通过设置浏览器代理,访问任意非Https网站,若可以访问,代表开放状态,不可以说明只允许本地代理(默认)。

3.1.2 在apache上建立一个虚拟主机。
仅需要配置域名和转发端口参考 ,因为apache已经监听80端口,ssh无法再次监听,所以需要建立虚拟主机,将指定域名的访问转发到其他接口再由ssh转发到本地。

<VirtualHost *:80>
    ServerName 【domain】
    ProxyPass / http://127.0.0.1:XXXX/
    ProxyPassReverse / http://127.0.0.1:XXXX/
</VirtualHost>      

测试:若有tomcat实例,可以将XXXX改为实例端口,先转发到tomcat测试是否成功。
<br />

3.2 配置SSH
3.2.1在服务器和本地电脑上都装上open-ssh。linux默认已经有了。windows要安装。
3.2.2在本地电脑上打开cmd,输入命令.XXXX为上诉apache转发到本地的端口

ssh -R -v -N XXXX:localhost:8080 root@hostname
以root身份登录hostname,建立ssh隧道。
hostname监听自身XXXX端口,并加密改该端口收到的信息
传送到ssh隧道,转到本机。
再由本机转发到localhost的8080端口。

ps:若服务器上无apache或者80端口没有被监听,可以不配置apache,直接配置ssh

3.3 ssh连接超时解决方法

3.3.1 修改server端的etc/ssh/sshd_config

ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接
ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接,正常情况下,client不会不响应

3.3.2 修改client端的etc/ssh/ssh_config添加以下:(在没有权限改server配置的情形下)

ServerAliveInterval 60  #client每隔60秒发送一次请求给server,然后server响应,从而保持连接
ServerAliveCountMax 3  #client发出请求后,服务器端没有响应得次数达到3,就自动断开连接,正常情况下,server不会不响应  

这里注意ClientAliveInterval不能太大,之前就是设置到了600,导致失效,另外要重启sshd服务 service ssh restart 。
参考

3.3.3另一种方式:
在命令参数里ssh -o ServerAliveInterval=60 这样子只会在需要的连接中保持持久连接, 毕竟不是所有连接都要保持持久的。

3.3.4 或者可以一直接收信息,加个top,实时回显数据。

四、 过程中的难点


1.由于版本不同,很难从网上找到apache2.7载入模块的方法。只能通过查看入口apache2.conf内容和之前载入站点的方式判断,只要莫相应模块从mods-available复制或软连接到mods-enabled

2.proxy.conf的配置文件改好忘记保存,浪费了大量时间。此处应该注意每一个命令的用处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容