【Linux网络】NAT、内网穿透、内网打洞

🎬 个人主页 :艾莉丝努力练剑
❄专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:


文章目录

  • NAT、代理服务、内网穿透前言
  • [1 ~> NAT 技术详解](#1 ~> NAT 技术详解)
    • [1.1 NAT 技术诞生背景](#1.1 NAT 技术诞生背景)
    • [1.2 NAT 报文 IP 与端口转换完整工作流程](#1.2 NAT 报文 IP 与端口转换完整工作流程)
      • [1.2.1 正向转换:内网主机向外网发送数据(内网→公网)](#1.2.1 正向转换:内网主机向外网发送数据(内网→公网))
      • [1.2.2 反向转换:外网服务器回包数据(公网→内网)](#1.2.2 反向转换:外网服务器回包数据(公网→内网))
      • [1.2.3 NAT 映射表与 NAPT 端口复用核心原理](#1.2.3 NAT 映射表与 NAPT 端口复用核心原理)
    • [1.3 NAT 落地三大细节补充](#1.3 NAT 落地三大细节补充)
      • [1.3.1 NAT 端口资源上限约束](#1.3.1 NAT 端口资源上限约束)
      • [1.3.2 NAT 设备部署位置规则](#1.3.2 NAT 设备部署位置规则)
      • [1.3.3 外网无法主动直接访问内网原理](#1.3.3 外网无法主动直接访问内网原理)
    • [1.4 NAT 技术的优势与固有缺陷](#1.4 NAT 技术的优势与固有缺陷)
      • [1.4.1 NAT 技术优势](#1.4.1 NAT 技术优势)
      • [1.4.2 NAT 技术缺陷](#1.4.2 NAT 技术缺陷)
    • [1.5 NAT 与 IPv6 拓展兼容说明](#1.5 NAT 与 IPv6 拓展兼容说明)
  • [2 ~> 代理服务器技术](#2 ~> 代理服务器技术)
    • [2.1 正向代理服务器](#2.1 正向代理服务器)
      • [2.1.1 正向代理核心功能](#2.1.1 正向代理核心功能)
      • [2.1.2 正向代理落地应用场景](#2.1.2 正向代理落地应用场景)
    • [2.2 反向代理服务器](#2.2 反向代理服务器)
      • [2.2.1 反向代理关键业务能力](#2.2.1 反向代理关键业务能力)
      • [2.2.2 反向代理落地企业案例](#2.2.2 反向代理落地企业案例)
    • [2.3 正向代理 & 反向代理通俗生活化案例(尿不湿代购)](#2.3 正向代理 & 反向代理通俗生活化案例(尿不湿代购))
    • [2.4 关于代理服务器的一些重要结论](#2.4 关于代理服务器的一些重要结论)
  • [3 ~> NAT 技术与代理服务器多维度区分](#3 ~> NAT 技术与代理服务器多维度区分)
    • [3.1 四大核心维度差异对比](#3.1 四大核心维度差异对比)
      • [3.1.1 实现目的](#3.1.1 实现目的)
      • [3.1.2 工作网络层级](#3.1.2 工作网络层级)
      • [3.1.3 部署位置与载体](#3.1.3 部署位置与载体)
      • [3.1.4 部署适用范围](#3.1.4 部署适用范围)
    • [3.2 落地实例区分](#3.2 落地实例区分)
  • [4 ~> 内网穿透技术(FRP 软件穿透 + NAT 内网打洞 P2P 穿透)](#4 ~> 内网穿透技术(FRP 软件穿透 + NAT 内网打洞 P2P 穿透))
    • [4.1 FRP 开源工具实现内网穿透](#4.1 FRP 开源工具实现内网穿透)
      • [4.1.1 FRP 组网运行原理](#4.1.1 FRP 组网运行原理)
      • [4.1.2 FRP 版本与资源信息](#4.1.2 FRP 版本与资源信息)
    • [4.2 NAT 内网打洞(P2P 点对点穿透)](#4.2 NAT 内网打洞(P2P 点对点穿透))
      • [4.2.1 前置实现条件](#4.2.1 前置实现条件)
      • [4.2.2 打洞工作原理(B 站直播案例)](#4.2.2 打洞工作原理(B 站直播案例))
    • [4.3 内网穿透整体落地场景汇总](#4.3 内网穿透整体落地场景汇总)
  • [5 ~> 内网打洞](#5 ~> 内网打洞)
    • [5.0 内网打洞前言](#5.0 内网打洞前言)
      • [5.0.1 内网打洞知识图谱](#5.0.1 内网打洞知识图谱)
      • [5.0.2 内网打洞的导入语](#5.0.2 内网打洞的导入语)
    • [5.1 内网打洞基础概念与网络前置知识](#5.1 内网打洞基础概念与网络前置知识)
      • [5.1.1 内网、公网与出入口边界路由器](#5.1.1 内网、公网与出入口边界路由器)
      • [5.1.2 NAT 转换原理、NAT 映射表作用](#5.1.2 NAT 转换原理、NAT 映射表作用)
      • [5.1.3 传统中转服务器通信模式(哔哩哔哩直播案例)](#5.1.3 传统中转服务器通信模式(哔哩哔哩直播案例))
    • [5.2 传统服务器中转通信流程与缺陷](#5.2 传统服务器中转通信流程与缺陷)
      • [5.2.1 多内网主机登录公网服务器数据流转逻辑](#5.2.1 多内网主机登录公网服务器数据流转逻辑)
      • [5.2.2 中心化转发模式核心弊端](#5.2.2 中心化转发模式核心弊端)
    • [5.3 内网打洞(P2P 直连)的原理](#5.3 内网打洞(P2P 直连)的原理)
      • [5.3.1 打洞核心前提:NAT 表预先建立映射](#5.3.1 打洞核心前提:NAT 表预先建立映射)
      • [5.3.2 打洞完整分步数据交互流程](#5.3.2 打洞完整分步数据交互流程)
      • [5.3.3 打洞核心本质](#5.3.3 打洞核心本质)
    • [5.4 内网打洞依赖的公网中介服务器作用](#5.4 内网打洞依赖的公网中介服务器作用)
      • [5.4.1 中介服务器核心功能:交换两端公网 IP + 端口](#5.4.1 中介服务器核心功能:交换两端公网 IP + 端口)
      • [5.4.2 NAT 反向查表机制实现内网报文回流](#5.4.2 NAT 反向查表机制实现内网报文回流)
    • [5.5 内网打洞与 P2P 技术关联、运营商限制](#5.5 内网打洞与 P2P 技术关联、运营商限制)
      • [5.5.1 内网打洞是 P2P 通信核心实现手段](#5.5.1 内网打洞是 P2P 通信核心实现手段)
      • [5.5.2 运营商封禁 P2P 打洞的原理与手段](#5.5.2 运营商封禁 P2P 打洞的原理与手段)
    • [5.6 内网打洞总结](#5.6 内网打洞总结)
  • [6 ~> 总结](#6 ~> 总结)
    • [6.1 NAT 模块核心复盘](#6.1 NAT 模块核心复盘)
    • [6.2 代理服务模块核心复盘](#6.2 代理服务模块核心复盘)
    • [6.3 NAT & 代理区分复盘](#6.3 NAT & 代理区分复盘)
    • [6.4 内网穿透模块核心复盘](#6.4 内网穿透模块核心复盘)
  • 结尾


NAT、代理服务、内网穿透前言

一、思维导图

二、导入语

本文围绕计算机网络里三大高频实用技术:NAT 地址转换、正向 & 反向代理服务、内网穿透(FRP + NAT 打洞)进行完整知识点梳理,内容依托网络实操学习笔记整理,是计算机运维、后端网络编程、网络安全学习的核心复习资料。日常生活里随处可见三类技术落地:家里路由器上网依托 NAT 完成内网设备共用一个公网 IP;校园网限制 SSH 远程登录 XShell 是正向代理做了访问拦截;程序员居家远程操控公司内网服务器依靠 FRP 内网穿透;短视频直播主播和观众点对点传输视频流依靠 NAT 内网打洞 P2P。全文顺着NAT 原理→代理分类→NAT 与代理对比→内网穿透落地的逻辑链条逐层拆解,从底层报文转换、表项映射原理,到上层软件部署、真实业务场景全覆盖,兼顾原理理论与落地案例,复盘学习全过程知识点。


1 ~> NAT 技术详解

1.1 NAT 技术诞生背景

IPv4 协议本身公网 IP 地址总量稀缺,无法满足全球海量终端设备独立分配公网 IP 的需求,NAT(网络地址转换)是现阶段解决 IPv4 地址资源不足最主流的技术方案,同时也是家用、企业级路由器的核心内置功能。 IP 地址分为全局公网 IP 与私有内网 IP两类规则:全局公网 IP 在整个互联网环境中必须唯一,由运营商统一分配;私有 IP 无全局唯一性约束,不同局域网、不同家庭、不同企业内网之间可以重复使用完全一致的私有 IP 地址,依靠 NAT 技术完成内网私有 IP 和公网全局 IP 的互相转换,实现内网设备共享少量公网 IP 访问互联网。常见内网网段包含 10.x.x.x、192.168.x.x 等私有地址段,也是家用路由器默认分配的内网地址。

1.2 NAT 报文 IP 与端口转换完整工作流程

以固定实例数据展开:内网局域网网段10.0.0.0,内网客户端 A:10.0.0.10、客户端 B:10.0.0.11;NAT 路由器运营商分配公网 IP:202.244.174.37;互联网远端目标业务服务器 IP:163.221.120.9(服务端口 80),客户端默认发起请求源端口 1025。NAT 的核心是修改 IP 报文首部内的源 / 目的 IP 地址,同时维护一张双向可查的 NAT 映射表,特殊场景下同步修改传输层端口号。

1.2.1 正向转换:内网主机向外网发送数据(内网→公网)

  1. 客户端 A10.0.0.10:1025发起访问163.221.120.9:80的数据包,原始报文源 IP:<10.0.0.10>、源端口 1025,目的 IP:<163.221.120.9>、目的端口 80;
  2. 数据包抵达局域网出口 NAT 路由器,路由器查询本地映射表,无现成条目时自动新建映射关系,把报文源 IP 替换为路由器公网 IP<202.244.174.37>,默认优先沿用原有源端口 1025;
  3. 客户端 B10.0.0.11:1025同样访问同一个目标服务器,此时内网 IP + 源端口和客户端 A 完全一致,仅替换公网 IP 无法区分两条连接,NAT 会同步替换公网侧源端口为 1026;
  4. 替换完成后的数据包经由公网路由转发至远端目标服务器,服务器接收报文只能识别来源为公网 IP202.244.174.37对应端口,完全感知不到后端多个内网私有主机。

1.2.2 反向转换:外网服务器回包数据(公网→内网)

  1. 远端服务器回复响应报文,报文源 IP:163.221.120.9:80,目的 IP:<202.244.174.37>、目的端口区分 1025(对应 A)/1026(对应 B);
  2. 回包抵达 NAT 路由器,路由器通过目的公网 IP + 端口、源服务器 IP + 端口反向检索内置 NAT 映射表;
  3. 查表后将报文目的 IP、目的端口还原为对应内网主机的私有 IP 与原始端口,再转发至内网对应客户端,完成一次完整请求 - 响应闭环。

1.2.3 NAT 映射表与 NAPT 端口复用核心原理

NAT 内部维护的映射表是双向键值结构,内网四元组(内网 IP: 源端口 + 目标 IP: 目的端口)和外网四元组(公网 IP: 替换后端口 + 目标 IP: 目的端口)一一唯一绑定,既能由内网信息查公网映射信息,也能由公网回包信息反向查找内网目标地址,这也是 NAPT(端口型 NAT)可以实现多内网设备共用单个公网 IP 的关键。 映射表样例:

内网五元标识 外网五元标识
10.0.0.10:1025 → 163.221.120.9:80 202.244.174.37:1025 → 163.221.120.9:80
10.0.0.11:1025 → 163.221.120.9:80 202.244.174.37:1026 → 163.221.120.9:80
内网环境中「私有 IP + 端口」可以唯一标识一台主机上的单个进程,公网环境中「公网 IP + 端口」全网唯一,当内网多主机同源端口访问同一外网服务时,NAT 自动变更公网出口端口保证全网唯一性。

1.3 NAT 落地三大细节补充

1.3.1 NAT 端口资源上限约束

TCP/UDP 端口取值范围 0~65535,单个公网 IP 可用端口总量固定,受端口数量限制,单台 NAT 路由器能承载的内网接入设备数量存在上限,这也是家用路由器只能接入几十台终端、大型内网需要分层多级路由嵌套 NAT 的根本原因。

1.3.2 NAT 设备部署位置规则

只有处在内网出口位置的路由器才需要开启 NAT 地址转换功能,数据包进入运营商骨干公网之后,公网内部路由转发全程不再进行 IP 地址替换,公网路由设备默认关闭 NAT 转换;多层级内网环境中,每经过一层出口路由都会执行一次 NAT 地址改写,形成多层 NAT 嵌套(运营商大内网 CGNAT + 家用路由 NAT)。

1.3.3 外网无法主动直接访问内网原理

在没有预先配置静态端口映射的前提下,互联网侧外网主机无法主动发起 TCP/UDP 连接访问内网任意设备,原因是外网主动发包抵达 NAT 路由器时,路由器本地映射表中不存在对应的内网映射条目,没有办法把公网目的 IP 翻译成内网私有 IP,数据包直接丢弃。 生活实例:微信、QQ 两端聊天,设备上线登录腾讯公网服务器时,客户端主动向外网发包,途经各级 NAT 路由自动生成 NAT 映射表,后续好友消息经由腾讯服务器转发,依靠已存在的映射表实现数据回传,两端设备无法绕过服务器直接互相发起连接。

1.4 NAT 技术的优势与固有缺陷

1.4.1 NAT 技术优势

从根源上缓解 IPv4 公网 IP 地址枯竭难题,私有 IP 可以跨局域网无限复用,极大降低入网设备对公网 IP 的消耗,是现阶段全球互联网普及落地的关键技术,未来很长一段时间内会持续和 IPv6 共存使用。

1.4.2 NAT 技术缺陷

  1. 被动建表机制,外部网络无法主动向内网服务器建立接入连接,天然限制内网服务直接对公网暴露;
  2. NAT 映射表的创建、老化、销毁会额外消耗路由器 CPU 与内存算力资源,带来网络转发开销;
  3. NAT 网关设备故障、重启后本地映射表全部清空,所有依托本表建立的 TCP 长连接全部强制断开,即便部署设备热备份也无法规避连接中断问题。

1.5 NAT 与 IPv6 拓展兼容说明

IPv6 地址资源极其充沛,理论上可以实现全网所有设备独立分配公网地址,从底层彻底舍弃 NAT,但现阶段存量 IPv4 业务体量庞大无法短时间切换,衍生出 IPv6 与 IPv4 双向 NAT 转换方案:内网设备使用 IPv6 地址组网,经过网关 NAT 转换成 IPv4 公网地址访问传统 IPv4 互联网,回程数据再由 IPv4 转回 IPv6。


2 ~> 代理服务器技术

  • 正向代理 + 反向代理
  • Nginx 主流实现

代理服务器工作在应用层,和 NAT 解决 IP 短缺的底层需求不同,代理面向上层业务场景做请求中转、管控、分发,主流依托 Nginx 软件部署实现,分为正向代理、反向代理两大分类。

2.1 正向代理服务器

正向代理部署位置更靠近客户端、远离后端目标服务器,核心逻辑:代理服务器代替内网客户端去向目标外网服务器发起请求,客户端所有网络访问流量全部经过代理中转。

2.1.1 正向代理核心功能

  1. 资源缓存:代理缓存高频访问的网页、文件资源,后续内网客户端再次访问相同资源时直接从代理本地缓存返回,无需重复请求外网,提升访问速度;
  2. 上网访问管控:企业、校园网可在代理侧配置黑名单 / 白名单,封禁娱乐网站、SSH 远程协议(XShell)、不良域名,管控员工 / 学生上网行为;
  3. 隐藏客户端真实内网 IP:外网服务器只能识别代理服务器公网 IP,无法溯源真实客户端地址,保护内网隐私;
  4. 流量优化加速:网游加速器、跨境访问工具本质都是正向代理,通过专线中转降低跨网访问延迟。

2.1.2 正向代理落地应用场景

  1. 校园 / 企业内网管控:校园网部署全局正向代理,直接封禁 XShell 的 SSH 远程连接协议,手机热点绕过校园代理直连运营商网络即可正常使用 XShell 远程登录服务器;企业通过代理限制工作时段员工访问短视频、娱乐网站;
  2. 家庭儿童上网管控:家长部署家用正向代理,过滤色情、不良网页内容;
  3. 公共网络优化:图书馆、网咖通过代理做带宽均分,避免单用户占用全部带宽资源。

2.2 反向代理服务器

反向代理部署位置更靠近后端业务集群、远离终端用户,核心逻辑:代理服务器代替后端多台内网业务服务器接收外网客户端请求,客户端全程只和反向代理交互,完全感知不到后端真实服务集群。

2.2.1 反向代理关键业务能力

  1. 负载均衡:按照轮询、权重、服务器实时负载等算法,把海量客户端请求均匀分发到多台后端内网业务服务器,避免单台服务器过载宕机;
  2. 后端安全防护:所有内网业务服务器不直接暴露公网,外网只能访问反向代理 IP,隐藏后端真实服务器私网地址,减少端口扫描、黑客直接攻击风险;
  3. 本地缓存加速:反向代理缓存网站静态资源(图片、css、js),静态请求直接代理返回,减少后端动态服务器压力;
  4. 动静分离架构:静态资源存放反向代理节点直接响应,动态登录、数据库交互请求转发后端应用服务器处理;
  5. 支撑 CDN 架构:CDN 内容分发网络本质依托全域分布式反向代理节点实现,就近节点缓存资源,用户就近访问加速。

2.2.2 反向代理落地企业案例

以字节旗下业务集群为例:多台内网 Web 应用服务器、存储服务器组成后端集群,统一由前端 Nginx 反向代理承接全网用户访问,代理根据负载规则分发用户请求至不同内网业务机,后端服务器全部部署在内网环境不暴露公网 IP。

2.3 正向代理 & 反向代理通俗生活化案例(尿不湿代购)

  1. 正向代理:我不方便亲自去日本超市采购花王尿不湿,委托在日本工作的表姐代为采购邮寄,超市交易的买家信息是表姐,表姐替代我完成采购 = 正向代理(替客户端办事);
  2. 反向代理:大量熟人陆续找表姐代购尿不湿,表姐批量囤货在家,后续下单直接从库存发货、不再重复跑超市,表姐替代多家日本超市对接全部买家 = 反向代理(替服务端对接用户)。

2.4 关于代理服务器的一些重要结论

  1. 代理服务器一般工作在应用层。

  2. 代理服务器分为正向代理和反向代理,正向代理用于请求的转发,反向代理一般作为一个缓存。

  3. 正向代理,代理的是客户端,类似于房产中介,替我们跟房东交互,把我们的请求交给房东,把房东的回复交给我们, 比较典型的就是 VPN 以及一些翻墙代理服务器,一般都是客户端架设的。

  4. 反向代理,代理的是服务器,类似于二房东,你以为你跟房东交互租房呢,其实不是,你是在跟二房东租房,,反向代理通常由服务器端假设,隐藏服务器IP,并实现静态资源缓存以及负载均衡的作用。


3 ~> NAT 技术与代理服务器多维度区分

3.1 四大核心维度差异对比

3.1.1 实现目的

NAT:底层网络技术,核心解决 IPv4 公网 IP 资源不足、内网私有 IP 复用问题; 代理:上层应用技术,核心解决网络访问管控、请求中转、负载加速、资源缓存等业务需求。

3.1.2 工作网络层级

NAT:工作在网络层 ,直接修改 IP 报文首部 IP 地址字段实现转发; 代理:工作在应用层,完整接收应用层请求数据、重新封装请求后再转发。

3.1.3 部署位置与载体

NAT:大多集成在路由器、防火墙等网络硬件设备固件中,固定部署在内网出口网关; 代理:依托 Nginx 等软件程序部署在通用服务器上,部署位置灵活。

3.1.4 部署适用范围

NAT:仅部署在内网和公网对接的出口点位; 代理:可以部署在内网局域网、公网独立服务器、跨地域广域网任意节点。

3.2 落地实例区分

  1. 家用路由器共享宽带上网 = NAT 技术落地;
  2. 迅游游戏加速器、校园网上网管控 = 正向代理落地;
  3. 大型网站前端 Nginx 集群负载分发 = 反向代理落地。

4 ~> 内网穿透技术(FRP 软件穿透 + NAT 内网打洞 P2P 穿透)

内网穿透核心作用:突破 NAT 外网无法主动访问内网的限制,让无公网 IP 的内网设备能够被互联网外部主机正常访问,主流分两大实现方案:商用 / 开源工具 FRP 端口映射穿透、依托 NAT 特性的 P2P 内网打洞。

4.1 FRP 开源工具实现内网穿透

FRP 全称 Fast ReverseProxy,开源高性能内网穿透工具,架构分为服务端 frps、客户端 frpc,必须依托一台拥有独立公网 IP 的云服务器做中间中转节点。

4.1.1 FRP 组网运行原理

  1. 公网云服务器部署 frps 服务端程序,开放指定监听端口;
  2. 处于内网环境(家里 / 公司内网)的主机部署 frpc 客户端,主动向外网 frps 建立永久 TCP 长连接,在公网服务器和内网主机之间持续保持连通链路;
  3. 在 frpc 配置文件中配置端口映射规则:把内网本地服务端口(例如 Linux SSH 22 端口)映射到云服务器某个自定义公网端口;
  4. 外网任意主机访问「云服务器公网 IP + 映射端口」,流量经由 frps 转发至已建立长连接的 frpc,最终转发到内网对应端口的服务,完成内网穿透。

实操案例:居家电脑通过公网云服务器端口,远程 SSH 连接公司内网 Linux 机器。

4.1.2 FRP 版本与资源信息

学习使用版本:frp v0.58.1,官方开源下载地址:https://github.com/fatedier/frp/releases/tag/v0.58.1;安装包区分 linux amd64、arm、windows、macOS 多架构版本,下载 Github 资源缓慢可借助 Watt Toolkit 加速工具(官网:https://steampp.net/)。

4.2 NAT 内网打洞(P2P 点对点穿透)

4.2.1 前置实现条件

通信两端设备分处两个不同 NAT 内网环境,两端设备提前主动登录同一台公网中心服务器(如 B 站业务服务器),两端客户端主动发包的过程中,本地路由器自动生成各自的 NAT 端口映射表,公网中心服务器可以获取两端设备对应的运营商网关公网 IP+NAT 映射端口。

4.2.2 打洞工作原理(B 站直播案例)

  1. 传统方案:主播(内网)推流→B 站公网中心服务器→服务器逐个转发视频流至各个观众客户端(多一层服务器中转,带宽占用高、延迟偏高);
  2. NAT 打洞 P2P 方案:主播、全部观众登录 B 站服务器,服务器收集主播网关公网 IP 与各观众网关公网 IP;服务器把对方网关地址互相下发给两端,主播直接向观众的公网网关 IP+NAT 映射端口发送数据流,数据包命中观众侧提前建好的 NAT 映射表,直接穿透 NAT 进入观众内网,实现主播与观众点对点直连传输视频,绕开中心服务器中转节省带宽,即 P2P 内网打洞。

4.3 内网穿透整体落地场景汇总

  1. 运维场景:异地远程 SSH 管理家里 / 公司内网服务器、NAS 存储设备;
  2. 开发场景:本地开发项目临时暴露公网,给外网客户调试测试接口;
  3. 影音场景:直播软件 P2P 数据流传输、点对点文件传输。

5 ~> 内网打洞

5.0 内网打洞前言

5.0.1 内网打洞知识图谱

5.0.2 内网打洞的导入语

这里围绕内网打洞这一个 P2P 通信核心底层技术展开完整拆解,全程结合哔哩哔哩跨内网直播、蛋哥直播课堂两种真实线上业务场景具象化讲解。我们日常使用直播、点对点文件传输软件时,存在两种数据传输方案:第一种是所有数据流统一经过厂商公网服务器中转分发,第二种就是依靠内网打洞技术,让分属不同局域网、不同运营商内网的两台终端直接建立通信链路。我会从基础网络架构、NAT 转换底层逻辑入手,对比中心化中转方案的短板,完整梳理内网打洞的前置条件、分步交互流程、公网中介服务器的不可替代作用,最后说明运营商对 P2P 打洞的管控逻辑,完整覆盖该知识点全部核心考点,可直接作为复习复盘依据。

5.1 内网打洞基础概念与网络前置知识

5.1.1 内网、公网与出入口边界路由器

家庭、宿舍、公司都属于独立内网环境,每一个内网都会有一台出入口路由器作为内网与互联网公网的分界设备。内网内部主机使用 192.168 开头的私有内网 IP,无法被公网直接寻址;路由器拥有运营商分配的唯一公网 IP,所有内网主机访问外网时,报文都会经过这台出入口路由器转发,外部公网设备能捕获到的访问源地址,永远是路由器的公网 IP,而非主机私有 IP。 举实例:我在宿舍内网、室友在家内网,同时登录哔哩哔哩服务器,哔哩哔哩后台收到的两条客户端请求源 IP,分别是宿舍路由器、家庭路由器对应的两个不同公网 IP,无法直接识别我们两台电脑各自的内网私有地址。

5.1.2 NAT 转换原理、NAT 映射表作用

NAT 即网络地址转换,是出入口路由器自带核心功能,路由器会维护一张 NAT 映射表。

  1. 内网主机向外网发起 TCP/IP 连接请求时,路由器会生成一条映射记录:绑定「主机内网 IP + 源端口」与「路由器公网 IP + 对外端口」;
  2. 所有内网发往公网的报文,源地址会被替换为路由器公网 IP 与对应对外端口;
  3. 外网返回的响应报文抵达路由器后,路由器查询 NAT 映射表,将目的地址转回对应内网主机的私有 IP 与端口,再转发进内网送达终端。 只要内网主机持续保持对外连接,这条 NAT 映射记录就会持续保留,相当于在路由器网关上打开一条临时对外 "通道",这是内网打洞能够实现的核心基础。

5.1.3 传统中转服务器通信模式(哔哩哔哩直播案例)

当存在多个分属不同内网的客户端(主播、观众)时,早期直播软件采用中心化服务器中转方案:

  1. 主播、全部观众分别登录哔哩哔哩公网服务器,各自和服务器建立 TCP 连接,路由器同步生成各自的 NAT 映射;
  2. 主播产生的直播音视频数据流,全部先上传至哔哩哔哩公网服务器;
  3. 服务器接收数据流后,再主动分发转发给每一位在线观众。 该模式下两端内网主机全程无法直接交互,所有流量必须经过第三方公网服务器中转。

5.2 传统服务器中转通信流程与缺陷

5.2.1 多内网主机登录公网服务器数据流转逻辑

以三方跨内网直播场景举例:主播 A(宿舍内网,公网 IP ipa:<122.77.241.4>)、观众 B(家庭内网,公网 IP ipb:<122.77.241.5>)、异环官方(企业内网,公网 IP ipc:<122.77.241.6>),三者分别登录哔哩哔哩云服务器:

  1. 三方终端各自发起对外连接,三台内网对应的出入口路由器分别建立独立 NAT 映射表;
  2. 云服务器留存三方各自的公网 IP、对外端口信息;
  3. 主播直播数据流上传至服务器,服务器读取存储所有观众公网地址,依次将音视频包转发给 A、B、异环官方三台设备。

5.2.2 中心化转发模式核心弊端

  1. 传输效率低、延迟高:音视频数据两次跨公网传输(主播→服务器、服务器→观众),链路更长,网络损耗更大,直播画面容易卡顿;
  2. 服务器带宽成本极高:所有用户上下行流量全部占用厂商服务器带宽,用户量扩大后服务器硬件、带宽开销会指数级上涨;
  3. 服务器单点压力集中:海量用户同时在线时,中转服务器负载极易达到上限,出现服务崩溃。

5.3 内网打洞(P2P 直连)的原理

5.3.1 打洞核心前提:NAT 表预先建立映射

内网主机无法直接接收外网主动发起的报文,外网流量抵达路由器时,若无匹配的 NAT 映射记录,路由器会直接丢弃报文。因此打洞前置条件必须满足:通信双方都先主动访问同一台公网中介服务器,让各自出入口路由器生成有效的 NAT 映射,在网关上预留对外通信通道,也就是俗称 "开好洞口"。

5.3.2 打洞完整分步数据交互流程

  1. 两端内网主机 A、B 分别连接公网中介服务器,路由器各自生成 NAT 映射,服务器获取并存储 A 的公网 IP + 端口、B 的公网 IP + 端口;
  2. 中介服务器将 A 的公网地址下发给 B,同时把 B 的公网地址下发给 A,完成两端地址交换;
  3. 主机 A 直接向 B 路由器的公网 IP、映射端口发送数据包,主机 B 同步向 A 路由器公网 IP、映射端口发送数据包;
  4. A 发送的报文抵达 B 的出入口路由器,路由器查询提前建立的 NAT 映射表,识别该对外端口对应的内网主机 B,将报文转发进内网送达 B;同理 B 的报文也能通过 A 路由器 NAT 表转发至 A;
  5. 两端内网主机完成直连,后续音视频、文件数据流不再经过中介服务器中转,直接点对点传输,这一整套流程就是内网打洞。

5.3.3 打洞核心本质

内网打洞本质是利用预先建立的 NAT 映射,打通两个隔离内网的网关通道,跳过中心化中转服务器实现终端直连,这种点对点通信模式也被称为 P2P(Person to Person)通信。中介服务器仅承担前期地址交换工作,数据流传输阶段不再参与。

5.4 内网打洞依赖的公网中介服务器作用

5.4.1 中介服务器核心功能:交换两端公网 IP + 端口

中介服务器无法直接穿透内网获取主机私有 IP,只能采集路由器对外的公网 IP 与 NAT 映射端口,它的唯一核心任务是作为地址交换中转站:收集所有在线客户端网关公网地址,再将通信对端的地址下发给双方主机。不存在中介服务器时,两个内网终端无法获知对方路由器公网地址,无法发起打洞连接。

5.4.2 NAT 反向查表机制实现内网报文回流

外网数据包抵达内网路由器后,路由器会执行反向 NAT 查表流程:匹配数据包目的公网 IP、端口对应的内网 IP 与端口,完成地址转换,把数据包转发至内网目标主机。打洞能够成功,完全依托这套反向查表机制,若没有提前建立映射记录,反向查表无匹配条目,数据包会被路由器拦截丢弃。

5.5 内网打洞与 P2P 技术关联、运营商限制

5.5.1 内网打洞是 P2P 通信核心实现手段

我们常用的点对点直播、迅雷 P2P 下载、快传类软件,底层全部依靠内网打洞技术实现。传统中心化传输会消耗服务商巨额服务器带宽,而 P2P 直连模式流量分散在各个用户家庭宽带,大幅降低厂商运营成本,内网打洞就是实现跨内网 P2P 直连的底层核心技术。

5.5.2 运营商封禁 P2P 打洞的原理与手段

运营商会限制大规模 P2P 打洞行为,核心原因是大量 P2P 流量会持续占用运营商骨干网络资源,增加网络设备负载。运营商管控逻辑:

  1. 运营商网关设备持续监测流量特征,识别来自其他公网路由器、长期点对点交互的大流量报文;
  2. 识别到 P2P 打洞流量后,运营商边界设备直接丢弃对应数据包,阻断两端内网主机直连通道;
  3. 封禁后 P2P 直连失效,软件只能退回服务器中转模式。

5.6 内网打洞总结

  1. 网络基础层面:内网主机依靠出入口路由器访问公网,私有内网 IP 无法被外网直接寻址,NAT 地址转换是内网访问外网的基础,路由器 NAT 映射表是内网打洞的必备前置条件;
  2. 传输方案对比:传统中心化中转模式全部流量经过公网服务器转发,延迟高、服务器成本压力大;内网打洞实现 P2P 点对点直连,仅前期地址交换依赖中介服务器,业务流量直接两端互通,传输效率更高;
  3. 内网打洞完整流程:两端主机连接公网中介服务器建立 NAT 映射→服务器交换双方网关公网 IP 与端口→两端主机互相向对方路由器公网地址发包→路由器反向 NAT 查表转发报文,完成跨内网直连;
  4. 约束条件:内网打洞必须依托一台公网中介服务器完成地址交换,无法脱离公网服务器单独实现;运营商可通过骨干网流量识别拦截 P2P 打洞流量,强制业务切回服务器中转模式;
  5. 技术定位:内网打洞是所有 P2P 类应用(点对点直播、文件快传、P2P 下载)的底层核心实现技术,核心逻辑是借助预先创建的 NAT 映射,打通隔离内网网关的临时通信通道。

6 ~> 总结

本文完整覆盖 NAT、正反代理、内网穿透三大网络技术全链路知识点。

6.1 NAT 模块核心复盘

  1. 诞生目的:解决 IPv4 地址稀缺,依靠私有 IP+NAT 复用公网 IP,内网私有 IP 可跨局域网重复使用;
  2. 转换本质:网络层修改 IP 首部地址,NAPT 同步替换传输层端口,依靠双向 NAT 映射表完成内外网地址互译,四元组是映射唯一性核心;
  3. 关键特性:无静态映射时外网不能主动访问内网,只有内网主动发包才会生成映射(微信 QQ 聊天原理);端口 65535 上限约束单 NAT 设备接入终端数量;
  4. 优缺点:缓解 IP 短缺是最大优势,无法外网主动入内、映射表开销、网关故障断连是三大固有短板,长期和 IPv6 共存。

6.2 代理服务模块核心复盘

  1. 分层区分:代理运行在应用层,Nginx 是主流实现工具,正向替客户端访问外网、反向替后端服务器承接用户请求;
  2. 正向代理重点:管控内网上网、缓存加速、隐藏客户端 IP,落地校园网封禁 XShell、网游加速器等场景;
  3. 反向代理重点:负载均衡、隐藏后端内网服务、动静分离、支撑 CDN,是大型网站集群架构必备中间件;
  4. 生活化记忆:尿不湿代购案例快速区分正反代理逻辑。

6.3 NAT & 代理区分复盘

从工作层级、实现目的、部署载体、部署范围四个维度区分:NAT 网络层硬件网关、解决 IP 不足;代理应用层软件程序、解决上层业务转发管控。

6.4 内网穿透模块核心复盘

  1. FRP 穿透:依托公网云服务器做中转,frps (公网)+frpc (内网) 长连接 + 端口映射,适合稳定远程运维访问内网;
  2. NAT 打洞 P2P:依托两端提前登录公网服务器生成 NAT 表,互相交换网关公网 IP 实现点对点直连,典型落地短视频直播 P2P 推流;
  3. 统一作用:突破 NAT 天然隔离限制,让无公网 IP 的内网服务对公网暴露访问能力。

整体三项技术是日常互联网上网、后端开发、网络运维的基础底层原理,家用宽带、企业组网、云服务器业务、远程运维全场景都离不开三类技术协同配合。


结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!" "技术之路难免有困惑,但同行的人会让前进更有方向。" |

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!

往期回顾:

【Linux网络】数据链路层协议(二):ARP协议

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
aixingkong9212 小时前
Nvidia为例 XPU的Multi-Host、Socket Direct 、GPUDirect、RDMA 技术点分析
服务器·网络·硬件架构·硬件工程
今年下半年3 小时前
记录一次IBMS物联网项目的架构设计及技术栈应用
物联网·websocket·网络协议·tcp/ip·微服务·udp·kafka
雯宝4 小时前
mnt_init 函数
linux
律宏阔10 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔10 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴10 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千11 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei3711 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei3711 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei3711 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化