在项目开发过程中,如果公司有几个技术团队,分别分布在不同的地方,而且网络不互通,这个时候有一个紧急的需求需要团队间联调配合。遇到这种情况如何快速响应,使用技术手段打通各项目团队的本地服务,推动项目早点交付使用?这个时候“内网穿透”方案就是一个不错的选择。
简单理解什么是内网穿透的话,就是一种让外部网络的电脑能够访问当内部网络里的电脑或服务的技术。通常内部网络的电脑只有私有IP,外部网络无法直接访问,但内网穿透技术可以建立一个通道,让外部网络能够通过这个通道访问到内部网络的资源。
在实际项目开发中,内网穿透技术一般用于跨地区的各团队之间进行服务联调。同时也可以作为一种方便快捷的测试方案,让测试人员从外部网络访问内网的某个服务。当然它还有其它应用场景,比如在远程办公场景下的应用,使得员工在家就可以访问公司内部网络资源(如文件服务器、数据库、内部应用程序等);在远程监控场景下的应用,允许管理员从任何地方进行实时监控和管理网络摄像头、智能家居设备等设备;在物联网(IoT)场景下,内网穿透允许设备之间的远程通信和数据传输,从而实现智能家居、工业自动化等应用场景。
这篇文章我们先来总结梳理下当前主流好用的内网穿透方案,然后简单分析下这门技术的实现原理,想看原理的可以直接绕到文末阅读。
方案梳理
Localtunnel
Localtunnel方案是非常简单能够实现内网穿透功能的方案,只要两行代码,就可以轻松搞定。Localtunnel 是一个轻量级的开源工具,它允许您将本地开发环境的Web服务暴露给互联网,而无需进行复杂的DNS或防火墙设置。基于Node.js,Localtunnel 提供了一个简单易用的命令行接口,使得外部用户能够访问您的本地服务器,这对于协作测试、演示或者需要从外部调用API的服务非常有用。
全局安装localtunnel
bash代码解读复制代码npm install -g localtunnel
假设本地服务是跑在8000端口,运行Localtunnel命令创建隧道:
bash代码解读复制代码lt --port 8000
Localtunnel 将分配一个公开URL,如 randomstring.localtunnel.me 您可以通过该URL分享给他人,供别人在外网访问你的内网服务。
Localtunnel还支持指定子域名
js 代码解读复制代码lt --subdomain myapp --port 8000
这样,您可以使用 myapp.localtunnel.me 来访问本地服务。
ngrok
ngrok 是一个反向代理工具,它通过建立隧道,把你本地的服务映射到一个外部可访问的 URL。通过 ngrok,开发者可以将本地运行的 HTTP 或 TCP 服务映射到一个公网可访问的 URL,从而让远程用户通过这个 URL 访问到本地服务。
对于 Windows 用户,下载后解压到一个目录,打开命令行工具,进入该目录即可使用。mac请使用一下命令行安装。
bash代码解读复制代码brew install ngrok/ngrok/ngrok
创建 ngrok 账户并获取 Authtoken,ngrok 的部分功能需要登录后才能使用。创建账户后,你会获得一个 Authtoken,在命令行中执行以下命令,将这个 token 添加到 ngrok 中:
ngrok cofig add-authtoken <你的-token>
假设你有一个本地的 Web 服务运行在端口 80 上,现在我们可以使用 ngrok 将其映射到公网。在命令行中执行:
ngrok http 80
ngrok 会生成一个公网可访问的 URL:
将这个 URL 发送给外部用户,他们通过访问这个地址即可访问你本地运行的应用。
ngrok 提供了一个方便的 Web 界面,用于查看隧道的实时流量和请求详情。可以通过访问以下本地 URL 进行监控:
bash代码解读复制代码http://localhost:4041
上面的步骤,生成的公网域名,每次都会变化。可以使用 ngrok 提供的静态域名。
花生壳
花生壳是款具备内网穿透功能的软件。是通过云服务器快速与内网服务器建立连接,同时把内网端口映射到云端,实现各类基于域名的互联网应用服务。花生壳能够实现反向代理应用,支持TCP、HTTP、HTTPS协议,端到端的TLS加密通信,黑白名单防黑验证等;支持外网设备穿透各种复杂的路由和防火墙访问到内网的设备。
花生壳是一款稳定好用的付费软件,这里简单介绍下从下载到使用的全流程用法
进入官网下载安装,这里正常操作即可,就不详细介绍了。下载完成后使用微信扫码关注官方微信公众号,关注以后,用微信再次扫描二维码,选择【生成新的子账号】:
生成子账号成功,单击【授权登录】,如下图所示:
出现花生壳主界面,单击【免费激活】,根据相关操作即可。如下图所示:
回到主界面,单击下右角的“加号”,如下图所示:
输入应用名称,应用类型选择 http 或 https ,如下图所示:
单击 http ,会提示立即认证,如下图所示:
出现产品购买界面,单击【去下单】,付款购买即可:
输入应用名称,选择应用类型为 HTTP,选择内网主机 127.0.0.1,内网端口为:5000,单击【保存】:
最后完成自定义映射:
外网浏览器输入 396fe17804.qicp.vip 就等同于访问 http://127.0.0.1:5000 。
原理解析
内网穿透的原理主要是利用中间服务器(通常称为“跳板机”或“中继服务器”)作为桥梁,将来自公共网络(外网)的连接请求转发到私有网络(内网)中的特定设备或应用。说到内网穿透技术又不得不提及NAT技术。
由于IPv4的公网地址数量有限,无法为每一台接入互联网的设备分配一个公网IP,因此大量设备只能分配到私有IP地址。NAT(网络地址转换)技术可以将内部网络的私有IP地址映射到外部网络的合法IP地址上,从而允许内部网络中的设备访问外部网络,虽然虽然NAT技术解决了内部设备访问外部网络的问题,但是又引入了一个新的问题。NAT技术会屏蔽非内网主机主动发起的连接。也就是说,从外网发往内网的数据包将被NAT设备丢弃,这使得位于不同NAT设备之后的主机之间无法直接交换信息。为了解决这个问题,需要内网穿透技术来建立外网和内网之间的通信桥梁。
内网穿透利用中间服务器来转发数据。中间服务器具有公网IP地址,可以接收来自外网的连接请求,并将其转发到内网中的目标设备。当外网用户尝试访问内网中的服务时,他们首先连接到中间服务器,然后中间服务器根据预设的转发规则,将连接请求转发到内网中的目标设备,目标设备接收到请求后,处理请求并返回响应,响应数据通过中间服务器返回给外网用户,以此达到外网访问内网资源的效果。
评论记录:
回复评论: