NAT 四种类型可视化

全锥型 / IP 受限锥型 / 端口受限锥型 / 对称型 —— 原理、映射规则与 UDP 打洞穿透关系

NAT 工作原理

NAT 缓解了 IPv4 地址不够用的问题,同时也带来了限制:NAT 外部的主机无法主动跟位于 NAT 内部的主机通信。 NAT 内部主机想要通信,必须主动和公网的一个 IP 通信,路由器负责建立一条映射关系(内网 IP:Port ⇄ 公网 IP:Port),从而实现数据转发 —— 这就是 NAT 的核心工作原理。 不同的映射与过滤规则,造就了下面四种类型。
①

完全圆锥型 NAT Full Cone NAT / 全锥型

一个内网 socket ⇒ 一个固定公网端口,任何外部主机都能访问它
安全性:★☆☆☆(最低)
内网 / LAN
发起方
内网主机 A
192.168.1.10 : 5000
NAT路由器
公网 / Internet
外部主机 X
203.0.113.1 : 9000
从未被联系
外部主机 Z
198.51.100.7 : 7777
NAT 映射表
内网地址公网映射过滤规则
192.168.1.10:5000203.0.113.50:62000任意外部主机 → 均放行

映射规则

  • 内网主机建立 socket (LocalIP:LocalPort)
  • 第一次向外部发送数据时,NAT 分配一个公网映射 (PublicIP:PublicPort)
  • 以后用这个 socket 向任何外部主机发送,都使用同一对映射

过滤规则

  • 任何外部主机只要知道 (PublicIP:PublicPort)
  • 就可以发数据给该公网地址,内网主机即可收到
  • 无需内网主机先前联系过对方 ✔

交互演示

观察:先让 A → X 建立映射,再让从未被联系的 Z 主动打进来。
②

地址限制圆锥型 NAT Restricted Cone NAT

必须曾向对方 IP 发过数据,对方才能回打 —— 但端口不限
安全性:★★☆☆
内网 / LAN
发起方
内网主机 A
192.168.1.10 : 5000
NAT路由器
公网 / Internet
外部主机 X
203.0.113.1 : 9000
外部主机 Z
198.51.100.7 : 7777
NAT 过滤表(白名单按 IP)
公网映射允许进入的源 IP允许的源端口
203.0.113.50:62000203.0.113.1任意端口

映射规则

  • 与全锥型相同:一个 socket 复用同一个公网 (PublicIP:PublicPort)
  • 向任何外部主机发送都使用这对映射

过滤规则

  • 外部主机要打进来,需要满足两个条件:
  • ① 知道 (PublicIP:PublicPort)
  • ② 内网主机曾用该 socket 向这个外部 IP 发过数据
  • 满足后,对方可用自己的 (IP, 任意端口) 发送,内网即可收到

交互演示

联系过 X 的 IP 后,X 换一个端口也能打进来;但 Z 的 IP 从未被联系则被丢弃。
③

端口限制圆锥型 NAT Port Restricted Cone NAT

不仅要 IP 相符,端口也必须精确匹配 —— 最常见的家用 NAT
安全性:★★★☆
内网 / LAN
发起方
内网主机 A
192.168.1.10 : 5000
NAT路由器
公网 / Internet
外部主机 X
203.0.113.1 : 9000
外部主机 Z
198.51.100.7 : 7777
NAT 过滤表(白名单按 IP + 端口)
公网映射允许进入的源 IP允许的源端口
203.0.113.50:62000203.0.113.19000

映射规则

  • 仍是端点无关(Endpoint-Independent Mapping)
  • 同一 socket 复用一个公网 (PublicIP:PublicPort)

过滤规则

  • ① 知道 (PublicIP:PublicPort)
  • ② 内网主机曾向这个外部 (IP, Port) 发过数据
  • 两者同时满足,对方才能用相同的 (IP,Port) 发进来
  • 换了端口即使 IP 相同,也会被丢弃 ✘

交互演示

A 向 X:9000 发送后,只有 X:9000 能打回;X 换端口或 Z 打回均失败。
④

对称型 NAT Symmetric NAT

每个「目标 IP:Port」分配独立的公网端口,无法直接 UDP-P2P
安全性:★★★★(最高)
内网 / LAN
发起方
内网主机 A
192.168.1.10 : 5000
NAT路由器
公网 / Internet
外部主机 1 / X
203.0.113.1 : 9000
外部主机 2 / Z
198.51.100.7 : 7777
NAT 映射表(按目标端点分别映射)
内网地址目标 (外部 IP:Port)分配的公网映射
192.168.1.10:5000203.0.113.1:9000203.0.113.50:62000

映射规则

  • 同一个 socket 发往不同目标,会得到不同的公网映射
  • 发往外部主机 1 → 固定用 (PublicIP-1, Port-1)
  • 发往外部主机 2 → 固定用 (PublicIP-2, Port-2)
  • 若只有一个公网 IP,则 Port-1 ≠ Port-2(端点相关映射)

过滤规则

  • 外部主机必须先收到内网主机发给它的数据,才能回传
  • 否则即使知道某个 (PublicIP,Port) 也无法发送
  • 这种 NAT 无法实现 UDP-P2P 直接通信

交互演示

同一 socket 联系两个目标 → 生成两个不同公网端口,第三方用其中一个端口打进来往往失败。

不同 NAT 之间的 UDP 穿透属性

「对称 NAT 无法穿透」的说法并不准确。对称 NAT 与 Full Cone、对称 NAT 与 IP 受限 Cone 之间是可以穿透的; 而对称 NAT 与端口受限、对称 NAT 与对称 NAT 之间不可穿透。

① 全锥② IP 受限③ 端口受限④ 对称
可穿透 不可穿透 (对角线:两台主机各自处于同一种 NAT 之后)
序号相加判定法:把四种类型按序列号标定,若两类型序号之和 N ≤ 6 则可穿透。
① 全锥 = 1 ② IP 受限 = 2 ③ 端口受限 = 3 ④ 对称 = 4
示例:② + ④ = 6 → 可穿透;③ + ④ = 7 → 不可穿透。
安全性系数排序:对称型 > 端口受限锥型 > 受限锥型 > 全锥型。