xshell内网穿透(远程传入)隧道实现配置
先吐槽一下“远程传入”这个名词翻译,简直太难理解。
目标:
本地局域网的服务,通过远程服务器的端口暴露出去,可供全世界外网访问。
说明:
正常情况下,外部是找不到内部的局域网服务的,具体原理需要学习计算机网络的NAT,这里不再啰嗦。
于是,有如下几种方式可以解决:
1)本地局域网的路由器上,配置公网端口映射——前提是你有路由器控制权限,比如家用路由器或者企业路由器管理员
2)类似“花生壳”这种NAT产品实现——只有较少的免费流量,而且也有数量和速度限制
3)ssh隧道方式(如下)
4)vpn技术(没试过,但是理论也可行)
ssh隧道方式步骤:
1)关闭阿里云控制台的云防火墙(如果你不会配置,就简单暴力处理)
2)关闭linux本身防火墙firewalld,即执行 systemctl stop firewalld(如果你不会配置,就简单暴力处理)
测试:服务器任意目录开启一个简单的http服务器,即执行 python -m SimpleHTTPServer
然后,通过公网IP+8000访问,看是否端口是否配置正确。
如果配置正确,那么会展示一个类似FTP的索引页(除非你这个目录下刚好有index,html)
如果没看到内容或者卡半天,那就先去折腾一下防火墙或者咨询一下云服务商。
3)vim /etc/ssh/sshd_config
找到文件中被注释掉的GatewayPorts no,去注释,并将no改成yes
如果没找到就在末尾添加上GatewayPorts yes
很重要,很重要,很重要!!!
否则,只能远程服务器localhost(127.0.0.1)监听和访问,不能公网IP监听和访问。
先改了再开启xshell隧道,否则仍然是127.0.0.1。
退出shell窗口,然后重新开启shell窗口,即可。
可以通过命令netstat -ant 观察 12345的local IP是不是0.0.0.0。
4)添加隧道配置,选择远程(传入)——也就是把本地从登录后的服务器暴露出去,供外网访问。
效果:
这样,当全世界通过远程服务器公网IP的8080访问时,背后真实访问的是我们本地的服务。
这个尤其适合于本地开发,临时对外提供服务,供别人查看,或者类似微信小程序开发,微信服务器需要主动找我们通信,而如果我们没有公网IP提供,那么将无法通知支付回调结果。