NAT(Network Address Translation,网络地址转换)是一种**在网络边界把 IP 地址“换来换去”的技术,最常见的作用就是:让很多内网设备共享一个公网 IP 上网

一、为什么需要NAT

IPv4 总共只有约 43 亿个地址,但设备数量远远超过这个数。

解决办法之一就是:

  • 内网使用 私有 IP
  • 出口路由器使用 少量公网 IP
  • 通过 NAT 把两者“转换”

常见的私有 IP 段:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16 这些地址 不能直接在公网使用

二、NAT 在干什么

NAT 就是在路由器上,把“内网地址”改成“公网地址”,再在回包时改回来


三、最常见的工作流程

假设:

  • 你电脑:192.168.1.100:50000
  • 路由器公网 IP:1.2.3.4
  • 访问网站:8.8.8.8:80

内网发请求

192.168.1.100:50000 → 8.8.8.8:80

路由器做 NAT

  • 源 IP 改成 1.2.3.4
  • 可能顺便改一个 端口号
  • 记录一条 NAT 表
1.2.3.4:40001 → 8.8.8.8:80

服务器回包

8.8.8.8:80 → 1.2.3.4:40001

路由器查 NAT 表,转回内网

8.8.8.8:80 → 192.168.1.100:50000

四、NAT 的几种常见类型

SNAT(源地址转换)

  • 源 IP
  • 内网 → 公网

DNAT(目的地址转换)

  • 目标 IP
  • 公网 → 内网
    常见用途:端口转发 / 内网服务器对外提供服务

PAT / NAPT(端口地址转换)

  • 不只改 IP,还改 端口
  • 一个公网 IP 可以给成百上千设备用
    家用路由器基本都是这个

五、NAT 表是怎么维护的

一条典型的 NAT 表项大致是这样:

协议: TCP
内网: 192.168.1.100:50000
公网: 1.2.3.4:40001
外部: 8.8.8.8:80
状态: ESTABLISHED
超时: 300s

核心就是 五元组 + 状态 + 超时

  • 协议(TCP / UDP / ICMP)
  • 内网 IP:端口
  • 公网 IP:端口(映射后的)
  • 对端 IP:端口
  • 状态 & 剩余时间 其中五元组是指(内网源 IP,内网源端口,目的 IP,目的端口,协议)

根据nat类型的不同,创建nat和匹配nat的规则都会不一样

类型常见叫法建表时是否绑定外部地址回包匹配条件
NAT1Full Cone不绑定只看公网端口
NAT2Restricted Cone不绑定公网端口 + 外部 IP
NAT3Port-Restricted Cone不绑定公网端口 + 外部 IP + 外部端口
NAT4Symmetric NAT绑定完全五元组
从 NAT1 NAT4,匹配条件越来越严格

假设内网主机发包:

内网: 192.168.1.100:50000

公网出口 IP:

1.2.3.4

NAT1(Full Cone NAT)

NAT1创建规则

第一次出站

192.168.1.100:50000 → 8.8.8.8:80

NAT建表:

192.168.1.100:50000 ↔ 1.2.3.4:40001
  • 表项 不关心你访问的是谁
  • 只要是这个内网端口 → 就映射到这个公网端口
  • 只要是内网IP,内网端口和协议三元组相同,就不会创建新的NAT

NAT1匹配规则

任何外部主机:

X.X.X.X:any → 1.2.3.4:40001

都会被转发到:

192.168.1.100:50000

NAT1又叫全锥形NAT

NAT2(Restricted Cone NAT)

NAT2创建规则

出站包:

192.168.1.100:50000 → 8.8.8.8:80

NAT表:

192.168.1.100:50000 ↔ 1.2.3.4:40001
允许外部IP: 8.8.8.8
  • 只要是内网IP,内网端口和协议三元组相同,就不会创建新的NAT

NAT2匹配规则

回包必须满足:

  • 目标端口 = 40001
  • 源 IP = 8.8.8.8 端口不限制。
8.8.8.8:any → 1.2.3.4:40001  PASS
9.9.9.9:any → 1.2.3.4:40001  REFUSE

NAT2又叫受限制形NAT

NAT3(Port-Restricted Cone NAT)

NAT3创建规则

出站包:

192.168.1.100:50000 → 8.8.8.8:80

NAT表:

192.168.1.100:50000 ↔ 1.2.3.4:40001
允许外部: 8.8.8.8:80
  • 只要是内网IP,内网端口和协议三元组相同,就不会创建新的NAT

NAT3匹配规则

回包必须 完全匹配外部二元组

8.8.8.8:80 → 1.2.3.4:40001  PASS
8.8.8.8:81 → 1.2.3.4:40001  REFUSE

NAT3又叫端口受限形NAT

NAT4(Symmetric NAT)

NAT4创建规则

每个 目的地址 都会生成 不同的映射

192.168.1.100:50000 → 8.8.8.8:80
→ 1.2.3.4:40001

192.168.1.100:50000 → 9.9.9.9:80
→ 1.2.3.4:40002

192.168.1.100:50000 → 8.8.8.8:81
→ 1.2.3.4:40003
  • 同一个内网端口,会映射出不同公网端口
  • 只要NAT五元组不同,就会生成一个新的NAT规则

NAT4匹配规则

回包必须 完全匹配建表时的外部地址

8.8.8.8:80 → 1.2.3.4:40001  PASS
9.9.9.9:80 → 1.2.3.4:40001  REFUSE
  • 回包的五元组也必须完全一致,否则就会被拒绝

NAT4又叫对称形NAT

NAT1–NAT4 的优缺点对比表

类型好处坏处典型场景
NAT1 Full Cone- 最容易穿透- NAT 表最少- 端口利用率高- 安全性差- 容易被扫描/反向连接早期路由器、实验环境
NAT2 Restricted- 限制来源 IP- 仍可打洞- 仍较宽松少见
NAT3 Port-Restricted- 更安全- 扫描更难- 打洞成功率下降家用路由常见
NAT4 Symmetric- 隔离最强- 映射不可预测- 抗扫描/滥用- NAT 表多- P2P 几乎失败企业防火墙、运营商 CGNAT