python内⽹穿透开源_反向代理和内⽹穿透
概念
反向代理看上去看深奥,其实不然,只是因为汉语⾔⽂化的差异导致它看上去深奥。⼀般反派感觉都⽐较厉害和神秘。
要理解反向代理,我们就不得不说⼀下正向代理。
正向代理 (Forward Proxy)
所谓正向代理,就是⼤家通常说的代理。打个通俗的⽐⽅,你想跟你舅舅借钱,但不好开⼝(或者你舅妈会设法阻拦),就跟你妈说。这时母亲⼤⼈就是个正向代理。此时代理本质就是个桥的作⽤,这个桥让你能和桥对⾯的⼈交换信息。
正向代理是多对⼀的概念,例如你,你妹你可以通过你妈去跟舅舅借钱,但舅舅只有⼀个舅舅。舅舅有可能并不知道到底是谁真正在借钱,只知道钱给了你妈。
反向代理 (Reserve Proxy)
⼤家都有打的经历,⽐如10086,⼀般上来就是个语⾳系统,转接⼈⼯服务后嘟嘟嘟好⼏声才有⼈接听,说我是⼯号xxx,很⾼兴为你服务。这个客服总机号码10086就是个反向代理,
反向代理隐藏了真实的服务端,有可能有N个客服对应N个号码,但你只需要记⼀个10086,它会平衡客服之间的压⼒给你安排合适的⼈。反向代理是⼀对多的概念,刚好和正向代理反过来了。
正向代理代理的对象是客户端
反向代理代理的对象是服务端
反向代理最常见的作⽤就是负载均衡。⽐如你访问baidu的域名后,baidu会根据你的ip地址和⽹络情况给你分配最快的服务器,这个分配服务器的服务器就是反向代理。
反向代理还有⼀个场景就是内⽹穿透,因为服务对象是在内⽹⾥,你需要通过代理才能访问到。
内⽹穿透
从外⽹是没办法直接访问到内⽹的资源的,因为内⽹是⼀个局域⽹不在⼀个⽹段,⽽且还有防⽕墙在。
这时候你弄个反向代理就可以解决这个问题:
内⽹服务器访问代理服务器
握⼿,建⽴通道
外⽹⽤户访问代理,代理通过通道和内⽹通信
举⼀个具体例⼦,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
⼩⽶球
Sunny-Ngrok
echosite
dog-tunnel
翻译过来就是狗洞吧,国⼈做的,基于GO语⾔开发,在GitHub上活跃度还不错,有1k+的星星,有兴趣可以试⼀下。
serveo
⽆需注册,⽆需配置,只需要 ssh 就⾏,没有客户端,⽀持多端⼝映射,⽀持⾃定义⼦域名,只要⼀⾏代码。
我试了⼀下,临时⽤⼀下真的很棒!
写在最后
内⽹服务本来就是⽐较敏感的,所以从数据安全的⾓度看我觉得还是⾃⼰搭建代理服务更可靠。⽤不
靠谱的服务有很⼤风险,还有可能很坑,⾮常坑。
teamviewer
⽐如nat123和花⽣壳,⼀步⼀步诱导你付费,协议,端⼝,流量,速度,域名每个细节都要收费,还不⼀次说清楚,你付完钱才知道后⾯还要付钱的,别问我怎么知道的。
关于作者:
Toby Qin, Python 技术爱好者,⽬前从事测试开发相关⼯作,转载请注明原⽂出处。