简单聊聊内网穿透(背景-概念-原理-工具对比)
1、背景
- 我们平常使用手机和电脑上网,需要访问公网上的网络资源,如逛淘宝和刷视频,那么手机和电脑是怎么知道去哪里去拿到这个网络资源来下载到本地的呢?
- 就比如我去食堂拿吃的,我需要知道食堂的地址,手机和电脑还有存储网络资源的服务器和我们人用的地址一样,这些设备有一个网络ip地址,当我们需要访问公网上的网络资源时,比如逛淘宝或刷视频,我们的手机和电脑会向公网上的 DNS 服务器(如常见的8.8.8.8、114.114.114.114 etc.)发送一个请求,请求其转换域名(如"www.taobao.com")为相应的 IP 地址。DNS 服务器会返回相应的 IP 地址给我们的手机和电脑。
- 目前的网站基本上都是基于IPv4地址。
- 我们现在用的网络地址是来自1981年发布的第四代:IPv4,有2^32约等于43亿个ip地址,在2019年11月25日日,全球五大区域互联网注册管理机构之一的欧洲网络协调中心(RIPE NCC)宣布IPv4 地址已全部用完。
- 众所周知,我们要访问公网上的资源,必须要有公网ip,但是在ip地址已经用完的情况下,我们的设备又如何去访问呢?
- 为了解决这个问题,在ipv4地址已经分配完不够用的情况下,创新派发明了ipv6地址,号称可以给地球的每一粒沙子都可以分配一个IP地址,这个IPv6正在普及中,在没有ipv6地址的情况下,守旧派在94年提出了Nat地址转换。
- 什么是NAT?打个比喻,在IPv4地址够用的情况下,整个小区的网络给分配一个外网地址,大家都共用一个,随着设备增多,外网ip地址没有那么多的情况下,继续套娃,又多新增了一层NAT网络地址转换,这时候可能好几个小区共用一个外网地址。大家共用一个外网ip地址去访问网络上的资源。
- 这个时候,我们虽然IPv4地址少,访问外网资源的问题是解决了,但是带来的问题就是从外网访问我们内网的设备却无法访问。
- 在这个背景下,内网穿透诞生了。
2、基础概念
内网穿透是一种将内网中的网络服务通过映射到公网服务器上,使得公网客户端可以直接访问内网中的网络服务的技术。正常情况下,内网中的计算机和网络设备只能在内网中互相通信,对于外网中的计算机来说,无法直接访问内网中的计算机和网络设备。这就导致了内网与外网之间的信息交换存在着困难和瓶颈。而内网穿透技术则可以打通这个障碍,让内网与外网之间的数据流动变得更加畅通和便利。
3、内网穿透原理(用frp举例)
4、内网穿透解决的一些痛点或者使用场景
- 远程办公:内网穿透可以使公司员工在外部网络环境下,通过公网连接到受管控的内部网络,方便地访问内部资源,实现远程办公。(目前已经被vpn取代)
- 云服务器:使用内网穿透技术可以让公司内部的服务器、数据库等资源可以通过公网被访问,同时保证数据传输的安全性。(有点本地服务器上云的意思)
- 家庭网络:家庭网络中有时会存在一些需要远程访问的设备,例如网络存储、智能家居设备、摄像头等,使用内网穿透可以轻松地从外部访问这些设备,方便用户进行远程监控、数据存储等操作。(常见的有NAS和软路由)
- 服务测试:在进行开发或调试时,有时需要在本地进行服务测试,使用内网穿透技术可以直接通过公网访问本地的服务,避免了因网络隔离而无法进行测试的情况。(本地搭建一个网站或接口服务,分享给外网的人使用,微信本地开发)
ps:以上的前提条件是设备可以访问外网
5、常见的内网穿透工具对比
这四款内网穿透工具我本人有幸都有用过,在我没有拥有带公网ip的云服务器之前,我最早用的是ngrok和花生壳,这2个工具的优势就是,只需要配置一个客户端,你设置好本地需要映射到外网的端口,就可以使用,但是在免费的情况下,有所限制,例如抠搜的花生壳只提供1G流量,我当时用花生壳是在公司内网的服务器搭建了一个禅道系统,服务器常开,让外网的同事也能访问到内网的bug系统。
有了云服务器之后,研究了frp,这个可以不受花生壳和ngrok的流量等限制,但是需要自己去搭建客户端和服务端,一一配置对应的端口,有一个后台可以自己配置。
再后来,就是现在使用的ZeroTier,我的需求只要可以访问到家庭中的设备即可,这个工具的好处是,可以定义一个虚拟的局域网,然后可以给加入这个网络的设备定义一个ip地址,这些设备可以通过这个虚拟的局域网ip地址互相进行访问,不需要和前面3个工具那样,需要设置每个端口本地和服务端的对应关系,这个端口多了极其方便。速度方面,这个会自动尝试给进行网络打洞,进行p2p连接,只要打洞成功,端对端速度非常快。如果p2p连不上的情况下,才会走类似上面3个工具的端口转发技术,如果对不能打洞连接的访问速度有要求,或者说免费的25个设备不够用,可以自行搭建moon服务器来进行扩展。