NAT(网络地址转换)详解
一、定义(Definition)
NAT(Network Address Translation,网络地址转换):
它在网络层(L3)或传输层(L4)对数据包的源 IP、目的 IP、端口号进行改写,以实现不同地址域之间的互通。
核心是维护一张 转换表(Translation Table / Conntrack Table),记录每个会话的映射关系,将“内外”两个五元组(协议、源 IP、源端口、目的 IP、目的端口)对应起来。
- 典型应用场景:一个内网(如
192.168.0.0/16)的多台主机通过一个公网 IP 访问互联网。 - 本质:通过端口复用,让多个私有地址共用一个公网地址,从而节省 IPv4 资源,并隐藏内部网络结构。
二、为什么需要 NAT(Why NAT Is Needed)
- IPv4 地址枯竭:32 位 IPv4 地址数量有限,无法分配给全球所有设备。
- 多主机共享上网出口:家庭或企业局域网共用一个公网 IP。
- 拓扑安全与隐藏:外部无法直接访问内部主机,增加安全性。
- 地址变更的缓冲机制:在网络重构或地址迁移中减少修改成本。
- 运营商级 CGNAT(Carrier-Grade NAT):ISP 使用 NAT444 架构延缓 IPv4 枯竭问题。
尽管 NAT 提供了实用的过渡方案,但它破坏了“端到端通信原则(End-to-End Principle)”,给某些协议带来了兼容性问题。
三、NAT 的主要类型(Types of NAT)
| 类型 | 说明 |
|---|---|
| SNAT(Source NAT) | 改写源地址/端口(内网主机访问外部网络时最常见)。 |
| DNAT(Destination NAT) | 改写目的地址/端口(外部访问内网服务器时使用)。 |
| NAPT/PAT(端口地址转换) | 基于端口复用实现多对一映射(家庭和企业出口常见)。 |
| 静态 NAT(Static NAT) | 一对一的固定映射,常用于内网服务器对外提供服务。 |
| ALG(应用层网关) | 针对如 FTP、SIP 等协议,在应用层也进行地址改写。 |
| NAT64 / NAT46 | IPv6 与 IPv4 网络间的互通技术。 |
| Hairpin NAT(环回 NAT) | 内部主机访问同网段“公网映射”服务时的折返处理。 |
| CGNAT / NAT444 | 运营商级多层 NAT,终端 → 家庭路由 → ISP NAT → 公网。 |
按外部行为划分,还可以分为 Full Cone、Restricted Cone、Port-Restricted Cone、Symmetric 四种类型。
其中 对称 NAT(Symmetric NAT) 最难穿透,对 P2P 通信影响最大。
四、NAT 的工作机制(How NAT Works)
- 建立映射表(第一次出站)
主机发送数据包:
10.0.0.5:52314 → 93.184.216.34:443 (TCP)
NAT 设备创建映射:
203.0.113.10:40001 → 93.184.216.34:443
``yaml - 报文改写与返回
- 出站时:改写源 IP 和端口 → 重新计算校验和。
- 入站时:查表还原为原始内网地址。
- 会话老化
- 每个连接有超时(TCP ESTABLISHED 可维持分钟级,UDP 较短)。
- 端口池管理
- 每个公网 IP 端口数有限(65535 个),大量并发时可能端口耗尽。
- 校验和重算
- NAT 修改了 IP/TCP/UDP 头部,需要重新计算校验和,通常由硬件加速。
五、Linux 下的 NAT 配置(Examples)
使用 iptables
# 1. 启用转发
sysctl -w net.ipv4.ip_forward=1# 2. 配置 SNAT 或 MASQUERADE(出站 NAT)
# 动态公网 IP 使用 MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 固定公网 IP 使用 SNAT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.10# 3. DNAT(端口映射)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 10.0.0.10:8080# 4. Hairpin NAT(内网访问公网映射)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d 10.0.0.10 -p tcp --dport 8080 \
-j MASQUERADE
六、NAT 的副作用(Side Effects)
破坏端到端可达性:外部无法主动连接内网主机(除非设置端口映射)。
应用层地址暴露问题:FTP、SIP、RTSP 等协议需要 ALG 协助。
P2P 和实时通信困难:需要 STUN/TURN/ICE、UPnP 等穿透机制。
共享日志与合规复杂:多个用户共用同一公网 IP,审计需端口级记录。
性能限制:高并发连接会使 NAT 表爆满或过早超时。
安全协议兼容性问题:如 IPsec 需要 NAT-T(UDP 4500)。
调试复杂度上升:问题排查需同时跟踪 NAT 表、端口映射及回程路由。
七、NAT 穿透与协作技术(NAT Traversal)
技术 功能
STUN 探测 NAT 类型及公网映射端口
TURN 中继所有流量(用于对称 NAT)
ICE 综合候选地址选择与连通性检测
UPnP / PCP / NAT-PMP 主机主动向路由器申请端口映射
反向代理或隧道(SSH、WebSocket 等) 用于穿越 NAT 或防火墙
八、与 IPv6 的关系(NAT and IPv6)
IPv6 拥有足够大的地址空间,不再需要 NAT44 的地址复用机制。
仍存在 NPTv6(Network Prefix Translation),用于网络前缀重映射,但不改端口。
在 IPv4/IPv6 过渡阶段,会使用 NAT64、DNS64、464XLAT 等方案实现互通。