Skip to content

NAT 简介 ​

产生背景 ​

随着互联网的快速普及,IPv4 公网 IP 地址逐渐接近枯竭。为了解决这一问题,1994 年提出了 网络地址转换(NAT,Network Address Translation) 方案,并划分了专门的 私有 IP 地址网段(RFC 1918)供内部网络使用。这一方案极大缓解了公网 IP 地址的短缺问题,并促进了私有网络的广泛应用。

NAT 简介 ​

网络地址转换(NAT,Network Address Translation) 是一种在 IP 数据包通过路由器或防火墙时 重写源 IP 地址或目的 IP 地址 的技术。NAT 主要用于私有网络访问公网,或多个设备共享同一个公网 IP 进行通信。

NAT 的优缺点 ​

✅ 优点 ​

  • 缓解 IP 地址空间枯竭:多个私有 IP 地址可以通过一个或少量公网 IP 访问外网。
  • 提高安全性:内部私有 IP 地址对外不可见,一定程度上减少了外部攻击风险。
  • 简化网络管理:无需为每个设备分配公网 IP,降低运营成本。

❌ 缺点 ​

  • 增加交换延迟:NAT 需要对数据包进行修改,影响网络传输效率。
  • 破坏端到端 IP 连接:使得端到端的通信变得复杂,例如某些 P2P 应用需要额外配置。
  • 影响某些协议的兼容性:如 IPsec VPN 需要额外的 NAT 穿透机制。
  • 日志管理复杂:由于多个内部设备共享公网 IP,日志分析和溯源较困难。

NAT 的实现方式 ​

NAT 的实现方式主要包括以下几种:

1. 静态 NAT(Static NAT) ​

将一个私有 IP 地址 一对一映射 到一个公网 IP 地址,通常用于服务器对外提供服务。

2. 动态 NAT(Dynamic NAT) ​

从一个公网 IP 地址池中 动态分配 公网 IP 给私有 IP 地址,但每个私有 IP 仍然需要一个公网 IP。

3. 网络地址与端口转换(NAPT / PAT) ​

即 端口地址转换(Port Address Translation, PAT),多个私有 IP 地址通过 同一个公网 IP,但使用 不同端口 进行通信。

典型应用:家庭和公司路由器使用 NAT,让局域网内的多个设备共享一个公网 IP 访问互联网。

NAT 在 Linux 中的实现 ​

在 Linux 系统中,NAT 主要通过 iptables 实现,使用 nat 表进行地址转换。

详细参考:iptables NAT 配置

参考文献 ​

[^1]: RFC 2663 - IP Network Address Translator (NAT) Specification. 链接 [^2]: RFC 1918 - Address Allocation for Private Internets. 链接