前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Linux网络#16】:NAT 技术& 代理服务器 & 内网穿透

【Linux网络#16】:NAT 技术& 代理服务器 & 内网穿透

作者头像
IsLand1314
发布2025-03-06 08:47:25
发布2025-03-06 08:47:25
16100
代码可运行
举报
文章被收录于专栏:学习之路学习之路
运行总次数:0
代码可运行

一、NAT 技术

1. 背景

💬 前言:今天来聊聊网络世界里一个超重要的技术 —— NAT(网络地址转换)。你有没有想过,为啥我们家里的电脑、手机,还有公司里的各种设备,都能同时连上网,但又不会互相冲突呢?这就得感谢 NAT

🕸️ IPv4 地址不够用,这事儿大家都清楚。NAT 就像是一个超级聪明的 “翻译官”,它能把我们内网里的私有IP地址(比如192.168.1.x)转换成公网能识别的全局IP地址。这样,我们就能在有限的公网IP下,让无数设备同时上网!

🌰 举个例子,学校里可能有几百台电脑,但学校只需要一个公网IP,NAT 就能搞定这一切。公网IP必须是独一无二的,但私有IP就随便多了,不同的局域网里完全可以重复用,一点儿问题都没有。

2. 概念

🔫 NAT(Network Address Translation网络地址转换)是一种用于解决 IPv4 地址短缺的关键技术,允许私有网络内的多个设备通过一个或多个公共IP地址访问互联网

2.1 基本原理
  • 地址转换:将内部网络的私有IP地址(如192.168.x.x)转换为公共IP地址,实现与外部网络的通信。
  • 会话跟踪:通过维护转换表(NAT表),记录内部设备与外部服务器的IP和端口映射关系。
2.2 核心作用
  • 节省IPv4地址:允许多个设备共享一个公共IP,缓解地址不足问题。
  • 隐藏内部网络:外部无法直接访问私有IP,增强安全性。
  • 简化网络管理:内部网络变更(如更换设备)无需调整公共IP配置。
2.3 NAT 类型

类型

描述

静态NAT

一对一固定映射,常用于对外提供服务的服务器(如Web服务器)。

动态NAT

从公共IP池中动态分配地址,会话结束后回收地址,适用于临时访问。

PAT(NAPT)

多对一转换,通过不同端口号区分设备(如家庭路由器),最常用类型。

  • 静态地址NAT:实现固定私网主机地址到公网地址的一对一转换(IP地址对是一对一的,是一直不变的),适用于上网用户少,且同时上网用户数量与公网地址数量相同的场景
  • 动态地址NAT:私网主机地址与公网地址的动态转换,并没有固定映射关系(不确定的、随机的),所有被授权访问 Internet 的私有IP地址可随机转换为任何指定合法的IP地址
  • 网络地址端口转换NAPT:同时进行地址和端口的转换的NAT,可以实现多个私网地址对应同一个公网地址的转换(端口多路复用),不同的私网地址数据使用相同公网地址时,使用不同的端口进行转换,适用于公网地址数量少,但是私网用户数量大的场景。
2.4 优缺点

优点

缺点

节省公共IP地址

破坏端到端连通性(如影响P2P应用)

增强内部网络安全性

增加网络延迟(需处理地址转换)

支持灵活的网络扩展

部分协议需额外配置(如FTP、IPSec)

3. NAT 转化过程

👾 那么这样在网络通信过程中势必会造成问题,因为私有IP并不是唯一的,所以私有IP不能出现在公网通信中的。解决这个问题的机制就是 NAT 机制。

  • NAT 机制即在路由器进行转发时将报文源IP更换为 路由器WAN口IP ,进行一次源IP地址替换!

这样就可以私有IP就不会出现在公网中!并且在通信过程中够可以层层向下找到唯一的主机!

  • NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37。
  • NAT 路由器收到外部的数据时,又会把目标 IP 从 202.244.174.37 替换回10.0.0.10。
  • 在 NAT 路由器内部,有一张自动生成的、用于地址转换的表 NAPT
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

因此其实际工作时,流程如下:

  • 内部设备发起请求:设备A(192.168.1.2:5000)访问外部服务器(203.0.113.5:80)
  • NAT转换:路由器将源地址替换为公共IP(198.51.100.1:6000),并记录映射关系。
  • 服务器响应:数据返回至198.51.100.1:6000,路由器根据NAT表转发到192.168.1.2:5000。
4. NAPT

🤔 那么问题来了,如果局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的 IP 都是相同的。

  • 那么 NAT 路由器 如何判定将这个数据包转发给哪个局域网的主机?

这时候 NAPT 来解决这个问题了。使用 IP+port 来建立这个关联关系。

上面的这种关联关系也是由 NAT 路由器 自动维护的。

  • 例如在 TCP 的情况下,建立连接时就会生成这个表项;在断开连接后,就会删除这个表项。

👻 路由器之中,进行转发时,维护了一张 NAPT 转换表。其中记录 目的 IP + 端口号port 与 WAN口IP + 端口号port 的映射关系,互为键值。

  • 这两个都具有唯一性:局域网唯一,公网唯一!
  • 怎么做:源IP发生替换,源端口也可能发生替换!这样保证了映射的唯一性

每个路由器在转发过程中都会生成一份 NAPT 表,最终就可以到达 公网 进行通信!

为什么上面转换表中不仅转换IP地址,还转换端口号?

这是因为可能存在同一局域网不同主机访问同一外网服务器的同一端口号服务

  • 正如上图,10.0.0.10 和 10.0.0.11 同时想访问 202.244.174.37:80。

如果只转换IP地址,那么这两台主机转换后的数据包其中源IP地址都是NAT路由器的IP地址。当服务器返回响应时,只有NAT路由器的IP地址,无法区分这个响应是给哪台局域网主机的。所以还需要转换端口号来区分不同主机

但是上面这样其实也说明了一个问题,公网是 无法直接访问 内网机器的,只有内网机器向公网发送过数据,建立过 NAPT 表,才能从外部进入内部!

所以 NAT 技术是有缺陷的,由于 NAT 依赖这个转换表, 所以有诸多限制:

  1. 无法从 NAT 外部向内部服务器建立连接。
  2. 转换表的生成和销毁都需要额外开销。
  3. 通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开。

使用 Windows 访问我们的 Linux 服务端 时,我们仔细观察会发现服务端接收到的IP地址和 Windows 端是不一致的!

这也是由于路由器 NAT转发的结果!Linux 服务上的实际获取到的 IP出入口路由器的 WAN口IP

🌊 具体而言, 路由器 NAT 转发全过程如下:

  1. 当出口路由器接收到返回的数据包时,它会检查数据包的目标 IP 地址+端口号。
  2. 然后根据NAPT转换表中的映射关系,找到对应的私有 IP 地址+端口号。
  3. 接着出口路由器会将数据包的目标 IP 地址+端口号修改为对应的私有 IP 地址+端口号,并将数据包发送到局域网内的相应主机。
5. 生动比喻 – 充分理解 NAT 转化与NAPT

① NAT 的「翻译官」工作日记 🌐

场景1:内部小弟出门闯荡(请求阶段)

小弟(内网设备): “我是 10号房的小明(IP:10.0.0.10:5000),想给外网的 163号大佬(IP:163.221.120.9:80)寄个快递!但我的地址是小区内部门牌,外网看不懂咋办?”

NAT翻译官(路由器): “莫慌!我给你贴个 国际快递标签(全局IP:202.244.174.37:6000),这样外网就能认出来了! ——顺便记到我的 《跨国通讯备忘录》(NAPT表)里: 📝 [内网小明:5000] ↔ [国际标签:6000] → 目标大佬:80

场景2:外网大佬回礼(响应阶段)

外网大佬: “收到来自 国际标签:6000 的包裹!回礼请按这个地址发~”

NAT翻译官: “收到回礼!火速翻查《备忘录》: 🔍 国际标签:6000 → 内网小明:5000 ——撕掉国际标签,换上内部门牌,精准投递给 10号房的小明!”


关键角色解析

术语

生动比喻

功能

内网IP

小区内部门牌号

只在本地网络有效,对外保密

全局IP

国际快递标签

全球通用的“通行证”,NAPT动态分配

NAPT表

《跨国通讯备忘录》

记录“谁用哪个标签发了快递”,防止回礼送错人

端口号

房间号+信箱编号

同一门牌下的不同服务通道(如小明家5000号信箱)


② 为什么说NAT是“社交达人”?

  1. 一标签多复用: —— 全小区共用1个国际标签,靠不同 端口号 区分住户(如6001给小红,6002给小蓝)。
  2. 健忘症克星: —— 如果 5分钟 没新快递,《备忘录》自动擦除条目,防止标签被占满。
  3. 隐私保镖: —— 外网大佬只能看到国际标签,永远不知道小明真实门牌号!

③ 特殊场景:多人同时呼叫

小明和小红同时给不同外网大佬发快递:

  • 小明:10.0.0.10:5000 → 标签202.244.174.37:6000 → 目标A
  • 小红:10.0.0.11:3000同一标签:6001 → 目标B

翻译官の绝活: 📦 回礼时,凭 端口号+IP 组合,像分拣机一样精准投递!

可视化流程图

代码语言:javascript
代码运行次数:0
复制
内网小明喊话       NAT翻译官操作         外网视角
───────────  ───────────────────  ──────────
(小明:5000)       📌 贴上[国际标签:6000]  → 看到[国际标签:6000]
               📖 记录到《备忘录》        
               🔄 转换目标IP+端口        
                                   ⇅ 数据往返
(小明:5000) ← 🏷️ 撕掉标签还原地址 ← 返回[国际标签:6000]

二、代理服务器

1. 正向代理
1.1 基本概述

🏴‍☠️ 正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。

  • 过程:正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。
  • 功能:通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
1.2 工作原理及特点
  1. 客户端将请求发送给正向代理服务器。
  2. 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
  3. 正向代理服务器将处理后的请求转发给目标服务器。
  4. 目标服务器处理请求,并将响应返回给正向代理服务器。
  5. 正向代理服务器将响应返回给客户端

其特点如下:

  • 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。
  • 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
  • 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
  • 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
  • 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。
1.3 应用场景
  • 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
  • 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。
  • 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。
  • 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。
1.4 生动比喻 --正向代理の「代购小哥」工作日记 🛒📦

场景1:害羞买家的秘密行动

小明(客户端): “我想买 ‘绝密小饼干’,但不想让店主知道是我买的!咋办?” —— 小明把购物清单和钱塞给 「代购小哥」(正向代理): “帮我匿名买,别暴露我地址!”

场景2:代购小哥的伪装行动

代购小哥(正向代理): 1️⃣ 检查包裹

  • 翻自己的 「零食储物柜」(缓存):“嗯?上周帮小红买过同款,直接拿库存!”
  • 没库存?启动 「安检仪」(过滤规则):“禁止购买辣条!拦截!”

2️⃣ 伪装出击: 换上 「马甲IP」(代理地址),大摇大摆走进店铺: “老板,我要这个!我是普通顾客 202.244.174.37,和小明没关系!”

场景3:老板的包裹快递

网站老板(目标服务器): “收到订单!已打包发货 → 签收人:代购小哥的地址!”

代购小哥

  • 撕掉快递单上的马甲地址
  • 深夜悄悄把包裹送到 小明家后门 “亲,你的小饼干到货啦~ 老板绝对不知道是你!”

① 关键技能解析

术语

代购比喻

实际功能

客户端

害羞买家小明

想隐藏身份的真实用户

正向代理

戴面具的代购小哥

替客户端发送请求,保护隐私

目标服务器

零食店铺老板

提供资源的网站或服务端

缓存

代购的储物柜

存储历史请求结果,加速重复访问

过滤规则

安检仪+禁买清单

屏蔽危险网站或敏感内容

② 为什么需要代购小哥?

  1. 隐身斗篷模式: —— 老板只看到代购地址,小明家的门牌号彻底隐藏!
  2. 零食快速通道: —— 热门商品直接从储物柜拿货,比现买快10倍!
  3. 家长监护功能: —— 自动拦截“小黄鸭玩具枪”(危险网站)和“过期食品”(恶意内容)!

经典工作流图示

代码语言:javascript
代码运行次数:0
复制
小明の购物车        代购小哥骚操作         老板视角
───────────  ───────────────────  ──────────
[买小饼干]      → 检查缓存&过滤        → [看到马甲地址]
               → 没库存?亲自去买       → [发货给马甲]
               ← 偷偷送货上门         ← [全程不知小明]

③ 三种常见代购模式

  1. 便利店模式(公开代理): —— 谁都能用,但可能被老板拉黑(速度慢、不安全)
  2. VIP会员制(企业代理): —— 需密码才能召唤小哥,专属加速通道
  3. 智能机器人(透明代理): —— 强制代购不隐身(公司监控员工上网)

这样解释是不是像在看漫画? 😎 正向代理就像互联网世界的「神秘中间人」,帮你跑腿还守口如瓶!

2. 反向代理
2.1 基本概述

🛜 反向代理服务器 是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。

2.2 基本原理
  1. 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。
  2. 反向代理服务器会根据配置的规则将请求转发给后端的 Web 服务器,并将 Web 服务器的响应返回给客户端。
  3. 在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
2.3 应用场景
  • 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在 高并发 场景下。
  • 安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。
  • 缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
  • 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。
  • 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
  • CDN(Content Delivery Network,内容分发网络):就是采用了反向代理的原理。
2.4 反向代理の「智能前台」工作日记 🏨🗝️

场景1:VIP客户的专属通道

土豪客户(客户端): “我要订 ‘钻石套房’!钱不是问题,但不想让其他酒店知道我的行踪!” —— 土豪直接把需求丢给 「五星级酒店大堂」(反向代理),全程只和穿制服的前台沟通。

场景2:前台的暗箱操作

智能前台(反向代理): 1️⃣ 神秘分诊术

  • 偷看客户画像:“这位土豪爱安静 → 分配 3号楼保洁阿姨(Web服务器A)服务!”
  • 发现服务器A太忙 → 秒切 5号楼实习生(Web服务器B):“快去接单!”

2️⃣ 身份掩护: 把土豪的订单悄悄改成 内部工单号,所有服务员只知道“客户是前台派来的”。

场景3:服务员的迷惑日常

保洁阿姨(真实服务器): “今天又是十几个匿名订单!到底谁在订房?不管了,按工单打扫吧!” —— 把打扫好的房间钥匙通过 秘密通道 送回前台。

智能前台

  • 把钥匙装进 印着酒店LOGO 的信封
  • 鞠躬微笑:“您的钻石套房已准备好~ 祝您入住愉快!”

① 核心技能拆解

术语

酒店比喻

真实作用

客户端

土豪客户

以为自己在和“酒店品牌”交互

反向代理

神秘前台

隐藏真实服务器,智能调度请求

Web服务器

保洁阿姨/实习生

实际干活的“打工人”

负载均衡

分诊调度系统

避免某阿姨累瘫,雨露均沾派单

SSL终止

保险箱拆包员

先解密危险包裹再转交阿姨(HTTPS处理)


② 为什么酒店需要神秘前台?

  1. 安全护城河: —— 土豪永远不知道阿姨住在3号楼还是5号楼,黑客想砸门都找不到方向!
  2. 抗压神器: —— 双11爆单时,自动把流量分给10个阿姨,系统不崩盘!
  3. 统一形象: —— 无论背后是阿姨还是实习生,给客户的信封永远印着 同款LOGO(域名一致)。

③ 经典工作流图示

代码语言:javascript
代码运行次数:0
复制
土豪客户视角         前台の暗箱操作         保洁阿姨视角
───────────  ───────────────────  ──────────
[我要钻石套房] → 分配工单给3号楼阿姨 → [收到匿名工单123]
               ← 返回LOGO信封       ← [上交房间钥匙]
               💡 全程以为在和酒店对话  💡 不知客户是谁

④ 三大高级模式

  1. 镜像分身术(缓存加速): —— 热门套房图纸存档前台,客户秒拿钥匙,不用等阿姨现打扫
  2. 防火墙模式(安全防护): —— 前台先检查客户是否带危险品(DDoS攻击),可疑分子直接拒之门外
  3. 跨国分店(CDN联动): —— 客户在北京下单,前台自动派给上海分店阿姨,减少快递时间

反向代理 vs 正向代理 趣对比

反向代理(酒店前台)

正向代理(代购小哥)

服务对象

保护服务员(服务器)

保护买家(客户端)

经典台词

“我们酒店统一标准~”

“老板不知道是你买的!”

工作定位

站在店门口迎客

蹲在客户家后门送货

知名案例

Nginx、Cloudflare

梯子工具、公司上网代理


这样解释后,反向代理就像互联网世界的「影分身大师」,用统一门面隐藏了背后复杂的服务器江湖! 🌟

3. NAT & 代理服务器

🍑 路由器往往都具备 NAT 设备 的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。代理服务器看起来和 NAT 设备有一点像。

  • 客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。

NAT vs 代理服务器(两者区别)

  • 应用上:NAT 设备是网络基础设备之一,解决的是 IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
  • 底层实现上:NAT 是工作在网络层,直接对 IP 地址进行替换。代理服务器往往工作在 应用层
  • 使用范围上:NAT 一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
  • 部署位置上:NAT 一般集成在防火墙、路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。

代理服务器是一种应用比较广的技术:

  • 翻墙:广域网中的代理。
  • 负载均衡:局域网中的代理。
  • 代理服务器又分为正向代理和反向代理:
    • 正向代理:用于请求的转发(例如借助代理绕过反爬虫)。
    • 反向代理:往往作为一个缓存。

三、内网穿透 & 内网打洞

1. 内网穿透

💢 前言:NAT技术 保证内网主机的安全性,比如:NAT技术不仅极大程度缓解了IP地址不足的问题(甚至解决了),还保证了局域网主机的安全性。

  • 如果想从外网访问内网主机,如果内网主机没有对该外网IP进行过数据通信,那么NAT路由器 的 NAPT转换表 中没有响应的映射关系.
  • 即使外网主机将数据发送给NAT路由器, NAT路由器 也不会将该数据转发给局域网主机,因为 NAPT转换表 没找到映射关系

但这并不代表无法从外网访问内网主机。从外网访问内网主机的方式就是 内网穿透(NAT穿透)

🤖 内网穿透是一种网络技术,用于解决内网设备与外部网络之间通信的问题。它可以让外部设备访问内网中的设备或服务,而无需直接暴露内网设备的IP地址,从而在一定程度上兼顾了安全性和可访问性。

1.1 背景

在大多数网络环境中,内网设备(如家庭路由器内的设备、公司内部网络中的服务器等)通常被隐藏在路由器或防火墙之后,无法直接从外部网络访问。

主要原因如下: ① 私有IP地址的限制 ☠️ 内网设备通常使用私有IP地址(如192.168.x.x),这些地址只能在局域网内使用,无法在公网中直接访问。私有IP地址的范围包括:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

这些地址在互联网中是不可路由的,因此外部设备无法直接通过这些地址访问内网设备。

② NAT(网络地址转换)的限制 ☠️ 内网设备通过路由器访问外网时,路由器会将内网设备的私有IP地址转换为公网IP地址(即路由器的WAN口IP)。这个过程称为网络地址转换(NAT)。NAT的作用是:

  • 节省内公网IP地址资源。
  • 保护内网设备的安全性。

然而,NAT机制也导致了外部设备只能看到路由器的公网IP,而无法直接访问内网设备的私有IP。

③ 防火墙的限制 防火墙是网络中的安全屏障,通常会阻止外部设备直接访问内网设备,以保护内网的安全。防火墙的作用包括:

  • 阻止未经授权的访问。
  • 过滤恶意流量。
  • 保护内网设备免受攻击。

防火墙的限制进一步增加了内网设备对外部访问的难度。

【案例】

  • 首先我们拥有一台云服务器,并且在内网构建一台 Linux 机器,使用 22 端口部署了一个 SSH 服务,可以与云服务器建立连接。
  • 云服务器也部署一个服务,可以将机器上所有 8888 端口获取的数据转发到内网的 Linux 服务器上。
  • 这样,云服务器的 8888 端口与内网服务器的 22 端口就建立了映射。
  • 那么其他内网的机器可以通过访问云服务器的8888 端口直接访问到内网的 Linux 机器。这叫做 内网穿透技术!

我们可以在云服务器上使用 frp 软件进行内网穿透服务:

  • 服务器:拥有一台具有公网IP地址的服务器,作为 FRP 的服务端。
  • 客户端:需要穿透的内网机器,作为 FRP 的客户端。

为什么要进行内网穿透呢?内网穿透有以下优点:

  • 成本效益:内网穿透可以避免购买服务器公网IP地址的高昂成本,同时也能实现公网服务的功能。
  • 访问限制:由于 NAT(网络地址转换)和防火墙的存在,内网中的设备通常无法直接从外网访问。内网穿透技术可以帮助绕过这些限制,使得内网服务可以被外网访问。
  • 资源共享:内网穿透使得个人或企业可以将其内网中的资源(如文件服务器、Web服务、数据库等)分享给外网的用户,而无需复杂的网络配置。
  • 远程管理:系统管理员可以通过内网穿透技术,从外部网络远程管理内网中的服务器或设备,方便进行维护和监控。可以实现远程访问公司服务器进行办公。
  • 开发与测试:开发者可以在内网环境中开发应用程序,并通过内网穿透技术让外网的测试人员或合作伙伴访问,以便进行测试和反馈。
  • 安全性:内网穿透可以提供一种更安全的远程访问方式。通过配置,可以限制哪些外部地址可以访问内网服务,从而保护内网资源不被未经授权的访问。
1.2 常见的内网穿透技术
  1. 端口映射:通过在路由器或防火墙上设置端口映射规则,将公网上的某个端口映射到私有网络中的设备,从而实现对该设备的访问。
  2. 反向代理:在公网上搭建一个反向代理服务器,当公网用户请求访问时,反向代理服务器会将请求转发到内网中的目标设备上,并将响应返回给公网用户。
  3. 虚拟私人网络(VPN):通过建立加密隧道,将公网用户连接到私有网络中,使得公网用户可以像在内网中一样访问内网设备或服务。
  4. 第三方工具:一些第三方工具提供了方便的内网穿透功能,例如ngrok,frp等。这些工具通过建立安全的通道,将公网请求转发到内网服务

这些技术都可以实现内网穿透,但具体选择哪种方式取决于实际需求和网络环境。需要注意的是,在使用内网穿透技术时应确保网络安全,采取适当的安全措施来保护内网设备和数据的安全性。

2. 内网打洞

💤 在上述场景中,客户端最终被云服务器获取的 源IP出入口路由器 的 WAN口 IP。服务端通过配置会有内网服务器的 IP地址表 与 端口号。那么,可不可以将服务端的 IP+port 发给客户端,客户端的 IP+port发给服务端呢?

答案是可以的。

  • 这样客户端就可以直接向内网服务器进行访问,服务端也可以直接给客户端发送数据。这种技术就叫做 内网打洞! 这种方式直接跨过了云服务器,在出入口路由器上打了一个洞,可以直接进行访问。

内网打洞的工作原理

① 信息交换:

  • 客户端和服务端通过云服务器交换彼此的 WAN口IP 和 端口号。
  • 云服务器作为中介,将客户端的 IP+port 发送给服务端,同时将服务端的 IP+port 发送给客户端。

② 建立直接连接:

  • 客户端和服务端分别使用对方的 IP+port 尝试建立直接连接。
  • 由于双方的 WAN口IP 和 端口号 已经交换,路由器会允许这种直接通信。

③ 绕过云服务器:

  • 一旦直接连接建立成功,客户端和服务端就可以绕过云服务器,直接进行数据传输。
  • 这种方式不仅减少了云服务器的负载,还提高了数据传输的效率。

内网打洞的优缺点

① 优点:

  • 高效性:直接通信减少了中间环节,提高了数据传输速度。
  • 降低成本:减少了对云服务器的依赖,降低了带宽和计算资源的消耗。
  • 灵活性:适用于需要频繁通信的场景,如实时音视频传输、在线游戏等。

② 缺点:

  • 路由器限制:部分路由器可能不支持 NAT 打洞,导致无法建立直接连接。
  • 安全性问题:直接暴露 WAN口IP 和 端口号 可能增加被攻击的风险。
  • 复杂性:实现内网打洞需要对网络协议有较深的理解,且调试和维护成本较高。

适用场景

  1. P2P 网络:如文件共享、区块链网络等。
  2. 实时通信:如视频会议、在线游戏等。
  3. 物联网设备:设备之间需要直接通信的场景。

需要注意的是,一些出入口路由器可能不允许进行内网打洞。这里我们只需要了解其原理即可。

四、小结 — 跨网络通信流程

学了这么多网络方面的东西,我们来总结一下 跨网络通信的总体流程吧,如下:

应用层:应用程序向操作系统发出请求,例如在浏览器中输入网址——域名解析DNS,获取目标服务器的IP地址。

传输层:操作系统将应用程序的请求封装成 传输层数据段(Segment),使用默认的端口号来建立与服务器的连接(三次握手),例如,HTTP为80,HTTPS为443。通常使用 TCP 协议来提供可靠的数据传输

网络层:操作系统将传输层的数据段封装成IP数据包(Packet),并加上源IP地址和目标IP地址。计算机A需要先判断目标主机是否在同一局域网:

  • 子网掩码必须相同,不同肯定不在同一局域网,再将目标IP和本主机IP分别和子网掩码 按位与 &,结果相同即再同一局域网
  • ARP(地址解析协议),如果通过发送ARP请求可以直接获取到响应,说明在同一局域网网

两个方法二选一即可

  1. 如果是同一局域网,那么可以直接通信,不需要路由器
  2. 如果目标IP是公网服务器,则操作系统会将数据包发送到默认网关,也就是路由器

数据链路层:操作系统将IP数据包封装成数据链路层数据帧(Frame),并加上MAC地址和目标MAC地址。

  • 如果是同一局域网主机,那么首先查找 ARP缓存表 看是否有IP地址和MAC地址的 映射关系,有则直接使用,没有还需要先发送 ARP请求 获取目的主机的MAC地址,收到 ARP响应 后将映射关系 保存 在ARP缓存表中,然后开始网络通信
  • 如果是外网主机,那么需要进行 路由转发NAT路由器替换,需要先将数据发送给路由器,目的MAC地址 是路由器的MAC地址

物理层:数据链路层的 数据帧 通过物理介质(例如以太网)被发送到路由器。

  • 路由器会解析数据帧,根据目标IP地址选择 下一跳路由器,并重新封装数据帧。这就是 路由转发
  • 其中 源MAC地址 和 目标MAC地址 一直改变,源IP也一直改变(被替换成出口路由器的IP地址),目的IP地址不变。源IP(私有IP) 最终会被转化为 NAT路由器 的公网IP,数据也就被发送到了公网。

每一次IP地址的替换,路由器都会维护转换记录,保存在 NAPT 表中

重复路由转发和IP地址替换,最后数据到达公网的目的主机,服务器解包,分析需求,返回响应,重复上述操作。

  • 在数据返回的时候,根据 NAPT表 中的转换记录,将目的IP逐步替换,从最开始的 NAT路由器 的IP地址,换成内网的路由器的IP地址,最后到达内网主机所在子网的出口路由器。
  • 出口路由器根据 NAPT表,将目的IP地址填写为私有IP,数据成功返回——浏览器显示网页内容

需要注意的是,这只是简单的情况,实际上还有很多因素会影响内网主机访问公网服务器的过程,例如网络拓扑结构,路由策略,防火墙等。不同的应用场景和网络环境可能会有不同的细节和差异

同样,我们这也有个生动比喻:跨网络通信の「快递小哥奇幻漂流」📦🚚

故事版流程解析

1. 下单阶段:查电话簿找地址(应用层)

小明(浏览器): “我要给 ‘淘宝大酒楼’ 下单!但不知道他家地址啊?” → 翻开 《DNS电话簿》:“哦~ 原来他们公网地址是 180.101.49.12!”

2. 包装快递盒:贴快递单(传输层)

操作系统快递站

  • 把订单塞进 TCP加固纸箱(Segment)
  • 贴上专属标签:发件人端口:54321收件人端口:80
  • 打电话确认三次:“喂?酒楼在吗?能收快递吗?”(三次握手)

3. 规划路线:先看是不是同小区(网络层)

智能导航系统

  • 对比 自家门牌(192.168.1.10)酒楼地址(180.101.49.12)
  • 掏出 子网计算器: 🔍 192.168.1.10 & 255.255.255.0 = 192.168.1.0 🔍 180.101.49.12 & 255.255.255.0 = 180.101.49.0 → “不是一个小区!得找 跨城快递专线(路由器)!”

4. 换车接力:MAC地址变身术(数据链路层)

快递小哥(数据帧)

  • 《邻居通讯录》(ARP缓存表):“路由器MAC是 00-1A-3F-xx-xx!”
  • 把包裹装上 路由器专车(Frame),车头贴: 🚚 发车人MAC:AA-BB-CC-DD-EE接车员MAC:00-1A-3F-xx-xx

5. 跨城运输:快递分拣中心(物理层 & 路由转发)

分拣员(路由器)

  1. 撕掉旧车贴,换上新快递单(NAT转换): 📦 原始发件人IP:192.168.1.10 → 公网IP:202.100.1.100
  2. 翻开 《全国路线图》(路由表):“下一站去 上海枢纽中心!”
  3. 反复换车(MAC地址变更),但 收件地址(目标IP)永不改

6. 抵达终点:酒楼后厨处理(服务器响应)

淘宝大酒楼(服务器)

  • 拆开包裹:“哦~ 要一份螺蛳粉套餐!”
  • 做好后贴上 回程单: 📦 发件人:180.101.49.12:80收件人:202.100.1.100:54321

7. 逆流返乡:按记忆原路返回(NAPT表逆向解析)

分拣员(NAT路由器)

  • 《快递日记本》(NAPT表): “202.100.1.100:54321 → 其实是小明家的192.168.1.10:54321!”
  • 换上小区内部门牌,精准投递到小明电脑~

Mermaid流程图

通信要素萌化对照表

技术术语

快递世界版

DNS解析

查餐馆电话簿

TCP三次握手

打电话确认酒楼能接单

子网掩码

小区范围测量仪

ARP缓存表

邻居门牌号通讯录

MAC地址

快递车的车牌号

NAT转换

统一换成快递中心对外地址

路由表

全国高速公路地图

特殊事件小剧场

场景1:快递车被劫(数据包丢失)

TCP快递员: “检测到包裹丢失!启动 超时重传 —— 再发一辆一模一样的车!” UDP快递员: “丢了就丢了,老子不管!” 🚚💨

场景2:地址写错(IP不可达)

ICMP小秘书: 火速寄回 错误通知单:“亲,您找的地址是黑洞哦~” 📨❌

这样解释后,复杂的网络通信就像一场环环相扣的快递接力赛! 🌐🏁

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、NAT 技术
    • 1. 背景
    • 2. 概念
      • 2.1 基本原理
      • 2.2 核心作用
      • 2.3 NAT 类型
      • 2.4 优缺点
    • 3. NAT 转化过程
    • 4. NAPT
    • 5. 生动比喻 – 充分理解 NAT 转化与NAPT
  • 二、代理服务器
    • 1. 正向代理
      • 1.1 基本概述
      • 1.2 工作原理及特点
      • 1.3 应用场景
      • 1.4 生动比喻 --正向代理の「代购小哥」工作日记 🛒📦
    • 2. 反向代理
      • 2.1 基本概述
      • 2.2 基本原理
      • 2.3 应用场景
      • 2.4 反向代理の「智能前台」工作日记 🏨🗝️
    • 3. NAT & 代理服务器
  • 三、内网穿透 & 内网打洞
    • 1. 内网穿透
      • 1.1 背景
      • 1.2 常见的内网穿透技术
    • 2. 内网打洞
  • 四、小结 — 跨网络通信流程
    • 故事版流程解析
    • 通信要素萌化对照表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档