反向代理和内网穿透

概念

反向代理看上去看深奥,其实否则,只是由于汉语言文化的差别致使它看上去深奥。通常反派感受都比较厉害和神秘。web

要理解反向代理,咱们就不得不说一下正向代理。安全

正向代理 (Forward Proxy)

所谓正向代理,就是你们一般说的代理。打个通俗的比方,你想跟你舅舅借钱,但很差开口(或者你舅妈会设法阻拦),就跟你妈说。这时母亲大人就是个正向代理。此时代理本质就是个桥的做用,这个桥让你能和桥对面的人交换信息。服务器

正向代理是多对一的概念,例如你姐,你妹你能够经过你妈去跟舅舅借钱,但舅舅只有一个舅舅。舅舅有可能并不知道究竟是谁真正在借钱,只知道钱给了你妈。微信

反向代理 (Reserve Proxy)

你们都有打客服电话的经历,好比10086,通常上来就是个语音系统,转接人工服务后嘟嘟嘟好几声才有人接听,说我是工号xxx,很高兴为你服务。这个客服总机号码10086就是个反向代理,网络

反向代理隐藏了真实的服务端,有可能有N个客服对应N个号码,但你只须要记一个10086,它会平衡客服之间的压力给你安排合适的人。app

反向代理是一对多的概念,恰好和正向代理反过来了。负载均衡

  • 正向代理代理的对象是客户端
  • 反向代理代理的对象是服务端

反向代理最多见的做用就是负载均衡。好比你访问baidu的域名后,baidu会根据你的ip地址和网络状况给你分配最快的服务器,这个分配服务器的服务器就是反向代理。ssh

反向代理还有一个场景就是内网穿透,由于服务对象是在内网里,你须要经过代理才能访问到。测试

内网穿透

从外网是没办法直接访问到内网的资源的,由于内网是一个局域网不在一个网段,并且还有防火墙在。网站

1550826381553

这时候你弄个反向代理就能够解决这个问题:

  • 内网服务器访问代理服务器
  • 握手,创建通道
  • 外网用户访问代理,代理经过通道和内网通讯

1550848043738

举一个具体例子,TeamViewer的服务端(外网)就是个反向代理,它须要和TeamViewer客户端(内网)一直保持通讯,创建一个通道(TeamViewer ID)。当远程链接这台机器时,你须要登陆到TeamViewer服务器,而后经过代理通道(TeamViewer ID)和远程机器链接。

一些反向代理服务

远程链接内网机器的桌面服务是最多见的需求,有时候咱们但愿作的是本身的机器上跑一些服务可以从外网访问,好比demo,博客,甚至私有云等等。

TeamViewer和向日葵你们可能都知道,我说一些不同的。

frp

开源界最流行的反向代理之一,frp全称FaskReverseProxy,它的目标是作最快速可靠的反向代理,用GO语言实现,在Github上正在快速迭代中。安装和配置都很是简单,只须要几个命令就能够完成。frp支持的客户端很是丰富,树莓派,路由器,安卓手机等等,可玩性很高。

frp服务可让你本地的web项目提供给外网访问,特别适合向别人展现你本机的web demo 以及调试一些远程的API (好比微信公众号,企业号的开发)。

FRP还能够轻松代理TCP,HTTPS,SSH等等协议,你须要有一台具备公网IP的机器,最好加一个域名。

ngrok

曾经是开源界反向代理软件的老大,到2.0之后选择闭源,最后开源的版本2016年后就没有再更新,止于1.7。基于C语言实现,配置略复杂,不过听说灵活性和稳定性超好。

ngrok也能够代理常见的各类协议,本身搭建只能用早期的开源版本。或者选择商业公司提供的收费服务,国内外能够搜到不少提供NGROK服务的网站,可不可靠不太敢说,但真的不少。

这里列举一些知乎推荐过的,你也能够经过ngrok这个关键字搜索到不少。

  • natapp.cn
  • 小米球
  • Sunny-Ngrok
  • echosite

dog-tunnel

翻译过来就是狗洞吧,国人作的,基于GO语言开发,在GitHub上活跃度还不错,有1k+的星星,有兴趣能够试一下。

serveo.net

无需注册,无需配置,只须要 ssh 就行,没有客户端,支持多端口映射,支持自定义子域名,只要一行代码。

ssh -R 80:localhost:3000 http://serveo.net

我试了一下,临时用一下真的很棒!

写在最后

内网服务原本就是比较敏感的,因此从数据安全的角度看我以为仍是本身搭建代理服务更可靠。用不靠谱的服务有很大风险,还有可能很坑,很是坑。

好比nat123和花生壳,一步一步诱导你付费,协议,端口,流量,速度,域名每一个细节都要收费,还不一次说清楚,你付完钱才知道后面还要付钱的,别问我怎么知道的。

更多讨论,你也能够去看知乎:https://www.zhihu.com/questio...

关于做者:

Toby Qin, Python 技术爱好者,目前从事测试开发相关工做,转载请注明原文出处。

欢迎关注个人博客 https://betacat.online,你能够到个人公众号中去当吃瓜群众。

Betacat.online

相关文章
相关标签/搜索