☰
上网第三十二课:NAT——让 IPv4 地址“够用“的魔法
2026/10/2 5:53:51 网站建设 项目流程

前几天帮一位同事查网络故障,他打开百度搜"我的 IP",页面上赫然显示一个陌生的公网地址。他很困惑:“我家路由器分给我的是 192.168.1.x,怎么到了外网就变成另一个号了?”

我说:“这就是 NAT 干的事。你家里十几台设备共用一个公网 IP 上网,全靠 NAT 在路由器里当’翻译官’。没有它,IPv4 早就不够分了。今天就来拆解这个让 43 亿地址’够用’了三十年的魔法。”

一、先说问题:IPv4 地址为什么不够分

上一课讲子网掩码时提到,IPv4 总共 2³² ≈ 43 亿个地址。听起来不少,但去掉 A/B/C 类保留、组播、私有地址等,真正能全球路由的公网地址只有约 33 亿。

而全球联网设备早就突破百亿——手机、电脑、电视、摄像头、智能音箱……每台都需要 IP。33 亿对百亿,三倍缺口,怎么填?

答案就是NAT(Network Address Translation,网络地址转换):让一批设备共用一个(或少量)公网 IP,在家里用"私有地址"互相区分,出门时由路由器统一翻译成公网 IP。

二、NAT 的核心类比:“前台代收快递”

把公司想象成一栋大楼:

  • 大楼里每间办公室有内部分机号(192.168.1.x),这是私有 IP;
  • 大楼对外只有一个门牌号(比如 114.114.x.x),这是公网 IP;
  • 所有快递送到大楼门口,前台(NAT)负责登记:哪间办公室收的、什么时候收的,然后转交给你;
  • 你往外寄快递也一样,前台把你的"内部分机号"换成"大楼门牌号"发出去,对方只看到大楼地址,不知道你具体在哪间办公室。

这个"前台"就是路由器上的 NAT 模块。它维护一张转换表,记录每一笔"谁对应谁"的映射关系。

三、NAT 怎么工作:地址 + 端口一起翻译

NAT 不只是换 IP 这么简单,它还要靠端口号来区分同一台路由器后面的不同设备。

一次完整的 NAT 转发过程:

  1. 你的手机(192.168.1.105)访问网站,发出数据包:源 IP 192.168.1.105,源端口 50001 → 目标 IP 93.184.216.34,目标端口 443;
  2. 路由器收到后做 SNAT(源地址转换):把源 IP 改成公网 IP(比如 114.114.1.1),同时分配一个新源端口(比如 30001),记入转换表;
  3. 数据包到了外网,对方只看到 114.114.1.1:30001 → 93.184.216.34:443;
  4. 网站回包给 114.114.1.1:30001,路由器查转换表发现"30001 对应 192.168.1.105:50001",做反向翻译,把包送回你的手机。

关键点:NAT 用端口号区分设备。一个公网 IP 有 65535 个端口,理论上一个公网 IP 可以同时供几万台设备上网(实际受硬件性能限制,家用路由器通常支持几百到一两千条并发会话)。

步骤源 IP:端口目标 IP:端口说明
手机发出192.168.1.105:5000193.184.216.34:443私有地址出门
路由器 SNAT114.114.1.1:3000193.184.216.34:443翻译成公网地址
网站回包93.184.216.34:443114.114.1.1:30001回包到公网地址
路由器反向93.184.216.34:443192.168.1.105:50001翻译回私有地址

这种"地址+端口一起换"的模式叫NAPT(Network Address Port Translation,也叫 PAT)。日常说 NAT 基本都指 NAPT。

四、三种 NAT:谁翻译、往哪翻译

按翻译方向,NAT 分三种:

① SNAT(源地址转换)——最常见,就是上面讲的过程。出口方向把源 IP 从私有换成公网。家用路由器做的就是这个。

② DNAT(目标地址转换)——入口方向把目标 IP 从公网换成内网。典型场景是端口映射:你在路由器上配"外网 8080 → 内网 192.168.1.100:80",外面访问你的公网 IP:8080,路由器把目标地址翻译成内网服务器,内网服务器就收到请求了。远程访问 NAS、家庭监控、自建网站都靠 DNAT。

③ 双向 NAT——源和目标都翻译,企业网络偶尔用到,家用基本不碰。

一句话区分:SNAT 管"出门",DNAT 管"进门"。

五、装维实操:NAT 在现场的四件实事

① 判断"有没有公网 IP"——排查远程访问的前提。在路由器 WAN 口状态里看分配到的 IP,再去百度搜"我的 IP"对比。两个一样 → 你有公网 IP,可以做端口映射;不一样 → 运营商在前面又加了一层 NAT(CGNAT),你拿到的是中间层地址,端口映射大概率不生效。没有公网 IP 的用户想做远程访问 NAS,就得用内网穿透工具(frp、ZeroTier 等)绕过 CGNAT。

② 端口映射配置——DNAT 最常见的操作。在路由器"端口映射 / 虚拟服务器"页面:外部端口 8080 → 内部 IP 192.168.1.100 → 内部端口 80 → 协议 TCP。配好后外网就能通过"公网 IP:8080"访问内网服务。注意:没有公网 IP 的用户配了也白搭,外面到不了你。

③ NAT 会话数耗尽——"网页打不开但 Ping 通"的元凶。家用路由器 NAT 表容量有限(低端机几百到几千条)。P2P 下载、大量设备联网、被木马发起大量连接时,NAT 表会爆满,表现为"能 ping 通外网但网页打不开",重启路由器清空 NAT 表可临时恢复,根本解法是换带机量更大的路由器。

④ 游戏"类型"和 NAT 有关。游戏主机(PS5/Xbox)网络设置里会显示 NAT 类型:开放(NAT1,有公网 IP)> 中等(NAT2,端口映射可用)> 严格(NAT3,CGNAT 后面)。NAT3 联机经常失败,解法是找运营商要公网 IP 或用 UPnP 自动映射端口。

六、CGNAT:运营商的"套娃 NAT"

前面 Day30 讲过,运营商也不够公网 IP 分,于是搞了一层CGNAT(运营商级 NAT):你的路由器做第一层 NAT,运营商的 CGNAT 设备做第二层,两层翻译后才到公网。

这也是 100.64.0.0/10 这个地址段的由来——专门给 CGNAT 中间层用的"伪公网"地址,在全球不可路由,只在运营商内部有意义。

CGNAT 的影响:

  • 你的"公网 IP"其实是 CGNAT 后面的地址,不是真正的公网;
  • 端口映射不生效(运营商的 CGNAT 不会为你做端口映射);
  • 对方看到的你的 IP 是 CGNAT 出口的共享 IP,可能和邻居共享。

目前国内大部分家庭宽带都在 CGNAT 后面,想拿独立公网 IP 需要专门申请(部分运营商可免费改,部分要企业宽带套餐)。

七、NAT 的"原罪":为什么 IPv6 才是终局

NAT 拯救了 IPv4,但它不是完美的:

  • 端到端连接被打破:NAT 是"有状态"的翻译,只有内网主动发起的连接才能正确回包,外网主动访问内网默认不通——这破坏了互联网"任意两台设备可互通"的初心;
  • NAT 表是单点瓶颈:路由器重启,所有会话断开,在线视频、游戏掉线就是这个原因;
  • P2P 打洞困难:语音通话、P2P 下载需要复杂的 NAT 穿越技术(STUN/TURN/ICE),NAT 类型越严格越难打通;
  • CGNAT 进一步加剧问题:两层 NAT 后,很多端到端应用彻底无解。

所以业界共识是:NAT 是过渡方案,IPv6 才是正解——给每台设备分一个全球唯一地址,不需要翻译,端到端直接互通。

小结

  • NAT 让多台设备共用一个公网 IP,靠"地址+端口"翻译区分不同会话;
  • SNAT 管"出门"(私有→公网),DNAT 管"进门"(端口映射),家用路由器两者都做;
  • CGNAT 是运营商的二次 NAT,导致用户拿不到真公网 IP,端口映射失效;
  • NAT 表容量有限,耗尽会"ping 通但网页打不开";
  • NAT 是过渡方案,IPv6 才是最终答案。

思考题:你在家用手机访问公司内网 VPN,连接一直超时。你查了路由器发现 WAN 口 IP 是 100.64.x.x。问题出在哪?有什么临时解法?(提示:100.64.x.x 是 CGNAT 地址段,意味着你没有真公网 IP,VPN 的回包找不到你。)

下期预告

既然 NAT 是过渡方案,那"正版答案" IPv6 什么时候能接班?其实你的宽带很可能已经在用 IPv6 了——只是你没注意到。明天就来聊聊:IPv6——你的宽带其实早就用上它了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询