NAT(Network Address Translation,网络地址转换)是一种**在网络边界把 IP 地址“换来换去”的技术,最常见的作用就是:让很多内网设备共享一个公网 IP 上网。
一、为什么需要NAT
IPv4 总共只有约 43 亿个地址,但设备数量远远超过这个数。
解决办法之一就是:
- 内网使用 私有 IP
- 出口路由器使用 少量公网 IP
- 通过 NAT 把两者“转换”
常见的私有 IP 段:
10.0.0.0/8172.16.0.0/12192.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的规则都会不一样
| 类型 | 常见叫法 | 建表时是否绑定外部地址 | 回包匹配条件 |
|---|---|---|---|
| NAT1 | Full Cone | 不绑定 | 只看公网端口 |
| NAT2 | Restricted Cone | 不绑定 | 公网端口 + 外部 IP |
| NAT3 | Port-Restricted Cone | 不绑定 | 公网端口 + 外部 IP + 外部端口 |
| NAT4 | Symmetric 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 |