分享好友 最新动态首页 最新动态分类 切换频道
内网穿透你真的了解吗?
2024-12-26 04:13

内网穿透作为程序员常用的调试手段之一,我们可以通过在个人电脑上运行花生壳或者 frp 等方式,让他人访问我们本地启动的服务,而且这种访问可以不受局域网的限制,当我们使用ngrok,frp等开源框架时,你是否有好奇过它神奇的作用?明明没有将服务部署到服务器,程序员们究竟是怎么通过这种特殊方式让所有人访问自己的主机的?本文将以frp开源框架为例,介绍内网穿透的原理。

内网穿透你真的了解吗?

能否在公网中访问服务器的决定性因素:公网 IP

众所周知, IP 地址是每一位使用互联网的网民都会拥有的标识, IP 地址在互联网中起到的作用是定位,通过 IP 地址我们可以精确的定位到所需资源所在的服务器,这是对于一般用户来讲的,而对于程序员而言,我们需要的则是让用户通过 IP 地址定位到我们部署的资源,既然每个互联网用户都拥有 IP 地址,为什么用户无法直接访问部署在个人PC上的服务呢

事实上, IP 地址分为两种:公网 IP 和内网 IP

内网 IP 内网 IP 是用户在使用局域网时,由局域网的网关所分配的 IP 地址,每一个内网 IP 实际上都可以映射到当前所在局域网网关的某一端口( IPV4 地址通过 NAT 与端口映射方式实现,具体原理下文详解,拥有内网 IP 可以被同一局域网下的其他设备所访问到

公网 IP 内网的设备想要访问非同一局域网下的资源则必须通过公网 IP ,公网 IP 是没有经过 NAT 转换的由互联网供应商(ISP)提供的最原始的 IP 地址,每一个公网 IP 都可以直接在互联网中被直接定位到。

一个最简单的例子(以前端开发为例

当我们使用 webpack-dev-server 来启动一个 node 项目时,我们除了通过localhost:[端口号]的方式以外,与我们的开发设备处于同一局域网下的设备可以通过内网 IP :[端口号]的方式对我们的项目进行访问,但当我们使用自己的流量或者连接其他非当前开发设备所在局域网的设备使用内网 IP :[端口号]的方式进行进行访问时,则无法访问。

原因

内网 IP 地址仅在当前局域网下可以被定位并访问到,而当我们想要跨局域网访问时,我们的访问请求则需要先映射为公网 IP 然后访问到另一局域网的公网 IP ,最后由另一局域网的网关将其映射到相应的局域网设备,但我们访问的地址属于局域网中的内网 IP ,因此无法定位到其相应的公网 IP

综上所述,当我们想要让处于其他局域网下的设备访问到我们本地资源,必不可缺的就是公网 IP

相较于内网 IP ,公网 IP 明显比内网 IP 更加有用,为什么不可以人手一个公网 IP 呢

尽管 IPV6 的概念在几年前已经被提出,但实际的普及程度并没有很高,现在大部分网络用户使用的依旧是 IPV4 的 IP 地址,这也是限制公网 IP 个数的最大原因。

** IPV4:** IPV4 由 32 位二进制数组成,一共有 2^32 个不同的 IPV4 地址

** IPV6**: IPV6 由 128 位二进制数组成,理论上共有 2^128 个不同的 IPV6 地址

由此可见, IPV4地址的个数并不足以满足当前全世界网络用户的人手一个 IP 地址的需求,那么当前的网络为什么可以让这么多用户同时在网络上冲浪呢

网络地址转化技术的核心作用在于实现对公网 IP 地址的复用,即所有的内网主机共用同一个 IP 地址,NAT 的实现方式共有三种

  • 静态转换:将内网 IP 直接转换为公网 IP 地址,形成一一对应的方式
  • 动态转换:将内网 IP 地址转换为公网 IP 地址,与静态转换不同的是动态转换会在 IP 池中选择空闲 IP 地址进行转换,即每次同一个内网 IP 对应的公网 IP 会发生改变
  • 端口多路复用(PAT 技术):将内网 IP 与公网 IP 的某一端口进行映射,通过公网 IP 的某一端口访问公网

可以看出以上三种形式中端口多路复用(PAT)技术可以最大程度上缓解 IPV4 地址紧张的现状,也是最为广泛使用的实现方式,三种 NAT 实现方式共同点在于:对于内网用户来说自己对应的公网 IP 是不可知的,就好像我们可以知道自己的门牌号但无法知道自己所在的小区,因此无法准确告诉别人我们的具体地址。

在已知了当前内外网工作方式后,我们再来看一看作为程序员常用的技术手段内网穿透

在此之前或许很多人都曾使用过如花生壳、ngrok、frp等方式在没有服务器的情况下将一些服务部署到网络上让别人使用

那么内网穿透的原理究竟是怎么样的呢

目前市面上主流的内网穿透工具实现的原理如下

可见,内网穿透的核心原理在于将外网 IP 地址与内网 IP 地址建立联系,市面上常用的如花生壳工具其核心原理就是依靠一台具有公网 IP 的服务器作为请求的中转站以此来达到从公网访问内网主机的目的。

当我们启动花生壳的服务时,花生壳会将本地配置好的端口和服务器上的端口进行映射,告知服务器请求转发的路径,花生壳的公网服务器则会监听相应端口的请求,当用户访问花生壳提供的 IP 地址时,花生壳的对应 IP 地址的公网主机将会根据访问的端口映射到相应的内网主机,并通过预先配置好的服务端口将请求转发,以达到访问内网主机相应服务的效果。

更多C++后台开发技术点知识内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK多个高级知识点。

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以点击领取

花生壳作为一款商业产品,对于配置端口等一系列工作进行了封装,使得用户可以更快捷的使用内网穿透,但我们在了解原理后完全可以通过一些开源的框架以及一台公网服务器实现对应的内网穿透功能,我们以 frp 为例。

 

当我们配置完上述的文件后,用户的访问请求将会经过如下的步骤

用户的请求将会经过域名解析,公网端口的转发以及内网主机的监听三个步骤成功将请求发送到对应的内网服务,当然 frp 相较于花生壳提供了更多的自定义配置项,此处不做详细讲解,有兴趣的读者可以访问:frp中文文档

当我们使用 frp 去配置我们自己的内网穿透服务时,我们可以使用一台服务器为大量的内网主机提供公网访问的功能,以此来实现公网 IP 的复用,其原理与上文提到的 PAT 端口多路复用技术相类似,当我们临时需要使用服务器时,只需要向拥有公网服务器的朋友申请两个闲置端口即可。

本文以 http 请求为例解析当一个公网请求发送到frp服务器后究竟会经过哪些步骤

 

在frp/cmd/frps/root.go中

  • 核心代码1: server.NewService() 方法对我们在frps中的配置进行解析,初始化frp服务端
  • 核心代码2: serever.Run() 方法启动frp服务
 

在frp/cmd/client/service.go中

  • 核心代码3: for 循环不断去发起和服务端的连接,失败后会再次发起
  • 核心代码4: 连接成功后,客户端会使用连接的信息调用 NewControl()

frps 发起连接

 

在frp/server/proxy.go中

  • 核心代码5: frps从多个连接中通过依次遍历的方式来获取第一个成功获取到的连接
  • 核心代码6:frps通过获取到的连接向 frpc 发出 &msg.StartWorkConn 的消息,告诉frpc建立连接的相应信息

frpc 响应连接

 

在frp/client/proxy/proxy.go中

  • 核心代码7:frpc接收到frps的信息后发起 TCP 连接

frps发送消息

 

在frp/server/control.go中

  • 核心代码8: frps发送信息到 crypto.NewWriter() 创建的 writer 中

frpc 接收和响应

 
  • 核心代码9: frpc 读取 frps 转发的信息

到这里,我们的 frps 已经成功将公网中接收到的请求转发到 frpc 相应的端口了,这就是一个最简单的请求通过 frp 进行代理转发的流程。

本文所介绍的内网穿透技术相关的实现方式其实在我们的日常开发生活中有更多的使用场景,当我们深入了解了当前 IP 地址以及内外网的实现方式后,我们不难发现,当我们将内网穿透的图片稍加修改后就成为了我们常用的另一种功能的实现方式(VPN实现原理)

最新文章
直播机构业务大揭秘:如何通过在线直播平台实现多元化盈利模式?
提供专业课程、讲座等教育内容,通过课程销售或会员制实现盈利。与其他行业进行合作,如品牌推广、产品带货等,通过合作模式获取收益。三、技术创新:利用先进技术提升用户体验技术是直播机构的核心竞争力之一。通过不断引入新的技术和设备
怎样销毁两方的微信聊天记录苹果手机,战略布局_免费版99.18.90
本文介绍了如何销毁两方的微信聊天记录,包括苹果手机的操作步骤。需要明确的是,销毁聊天记录是一个敏感的操作,需要谨慎进行。可以通过微信的“聊天记录迁移”功能来实现,具体步骤包括备份当前聊天记录、恢复备份、删除备份文件等。也介
找联雅网络建站怎么样?
随着跨境电商贸易的持续火爆,独立站开始成为越来越多跨境卖家的新选择。建站对于卖家而言是非常关键的一步,因为卖家是需要依靠网站来开展其他系列运营工作的。如果网站搭建就存在问题,那么在后续运营过程中,也必然会给卖家带来更多的麻
网站关键词排名顺序能否影响排名?
    在百度站长社区看到了“网站title关键词顺序,是否影响排名?”这样一个疑问。很多SEOer各抒己见,当然无外乎就两个答案“会”OR“不会”。就这个问题,笔者小丹通过日常工作的经验也发表一下自己的意见。 
百度如何开通闪购功能,入驻需要哪些材料今年方法论
近年来,随着电商平台竞争的加剧,越来越多的商家开始关注如何高效地在不同平台上开店并实现盈利。尤其是在抖音与百度等平台上,闪购功能已成为商家吸引流量的重要工具。通过将传统的线上销售与快闪活动结合,闪购不仅能够瞬间提升销量,还
uiix.com的Whois信息
clientLock ······································注册商锁定serverLock ·······························注册局锁定renewPeriod ············注册商
神马电影的魅力所在:为什么这类电影能吸引如此多观众?
在如今的电影市场中,大家对于电影的选择标准越来越多样化。尤其是在各种类型的电影中,神马电影凭借其独特的魅力,吸引了大量的观众。神马电影是指那些既有深度又充满创意的影片,它们在故事情节、角色塑造和情感表达上都有着独特的亮点。
细胞生物学平台Olympus激光共聚焦显微镜FV3000上机培训通知
简介激光扫描共聚焦显微镜是在传统荧光显微镜成像的基础上采用激光作为光源,通过使用激光扫描装置和共轭聚焦装置,利用计算机对所观察的对象进行数字图像处理的现代化光学显微镜。FV3000共聚焦显微镜具有活细胞成像和深层组织观察所需的高
揭秘《歌手2024》首场前三名:香缇莫 凡希亚 那英
原标题:揭秘《歌手2024》首场前三名:香缇·莫专辑单曲销量超500万张,凡希亚选秀节目亚军出道近日,湖南卫视的音乐综艺类节目《歌手2024》爆火,多个话题登上热搜榜。其中5月10日首场竞演结束之后,在直播、全开麦、不修音的背景下,美国
淘宝全类目新老商品可换的白图技术 运用技巧
淘宝全类目新老商品可换的白图技术 运用技巧淘宝各种图片,标题,转链接,客服,综合技术过排除查防排查如有不懂请咨询下面请忽略标题:淘宝全类目新老商品可换的白图技术运用技巧随着淘宝电商平台的日益发展,买家们对商品的质量和外观要
相关文章
推荐文章
发表评论
0评