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

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测试是否成功。

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不会不响应  

要重启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的配置文件改好忘记保存,浪费了大量时间。此处应该注意每一个命令的用处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值