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 地址枯竭:IPv4 的 32 位地址空间有限,难以覆盖全球所有设备。
- 多主机共享上网出口:家庭或企业局域网共用一个公网 IP 出口。
- 安全与隐藏:外部无法直接访问内网主机,提高安全性。
- 地址迁移缓冲:网络重构或更换地址时可减少配置修改量。
- 运营商级 NAT(CGNAT):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 → 公网。 |
按外部行为划分,NAT 可分为 Full Cone、Restricted Cone、Port-Restricted Cone、Symmetric 四种类型,其中 Symmetric NAT(对称 NAT) 最难穿透,对 P2P 通信影响最大。
四、NAT 的工作机制(How NAT Works)
1. 建立映射表(第一次出站)
主机发送数据包:
10.0.0.5:52314 → 93.184.216.34:443 (TCP)NAT 设备创建映射关系:
203.0.113.10:40001 → 93.184.216.34:4432. 报文改写与返回
- 出站时:改写源 IP 和端口 → 重新计算校验和。
- 入站时:根据 NAT 表查找并还原为原始内网地址。
3. 会话老化(Connection Timeout)
- 每个连接有独立超时:
- TCP(ESTABLISHED)可维持分钟级甚至更长;
- UDP 较短,通常几十秒。
4. 端口池管理
- 每个公网 IP 仅有约 65,535 个端口可用。
- 高并发时可能出现端口耗尽(Port Exhaustion)。
5. 校验和重算
- NAT 改写了 IP/TCP/UDP 头部,需要重新计算校验和。
- 一般由网卡或硬件 NAT 模块加速完成。
五、Linux 下的 NAT 配置示例(Examples)
使用 iptables
# 1. 启用 IP 转发
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 等机制穿透 NAT。 - 审计与日志复杂
多用户共享同一公网 IP,需记录端口级日志以区分责任。 - 性能瓶颈
大规模并发会导致 NAT 表爆满或连接过早超时。 - 安全协议兼容性问题
例如 IPsec 需使用 NAT-T(UDP 4500)进行封装。 - 调试复杂度上升
故障排查需同时跟踪 NAT 表、端口映射和回程路由。
七、NAT 穿透与协作技术(NAT Traversal)
技术 | 功能 |
STUN(Session Traversal Utilities for NAT) | 探测 NAT 类型及公网映射端口。 |
TURN(Traversal Using Relays around NAT) | 通过中继服务器传输所有流量(应对对称 NAT)。 |
ICE(Interactive Connectivity Establishment) | 综合候选地址测试与连通性检测。 |
UPnP / PCP / NAT-PMP | 主机主动向路由器申请端口映射。 |
反向代理 / 隧道(SSH、WebSocket、FRP 等) | 用于穿越 NAT 或防火墙限制。 |
八、NAT 与 IPv6 的关系(NAT and IPv6)
- IPv6 拥有 充足的地址空间,不再需要 IPv4 的 NAT44 地址复用机制。
- 但仍存在 NPTv6(Network Prefix Translation),用于前缀级地址重映射(不改端口)。
- 在 IPv4 / IPv6 过渡阶段,使用以下机制实现互通:
- NAT64 / DNS64
- 464XLAT
- Dual Stack(双栈)架构
九、总结(Summary)
- NAT 是 IPv4 时代的关键补丁,解决了地址不足与安全需求。
- 然而,它违背了互联网的端到端原则,增加了网络复杂性。
- 随着 IPv6 普及,NAT 将逐渐退出历史舞台,但短期内仍是企业与家庭网络的核心组件。
















