NAT 系列:认识 NAT

一文概览 NAT

NAT(Network Address Translation,网络地址转换)是一种在 IP 数据包通过路由器或防火墙时重写源 IP 地址或目的 IP 地址的网络技术。这种技术被广泛应用于拥有多台主机但只使用一个公有 IP 地址访问互联网的私有网络中。

NAT 可以分为两大类:

  • 静态 NAT:由管理员手动创建和维护映射,通常用于需要固定公网IP的服务器
  • 动态 NAT:由路由器根据需要自动创建和维护映射,通常用于普通客户端的出站连接

每个 TCP/IP 数据包都包含四个关键信息:

  • 源 IP 地址(Source IP)
  • 源端口(Source Port)
  • 目的 IP 地址(Destination IP)
  • 目的端口(Destination Port)

NAT 设备会基于这些信息创建和维护映射表。

示例:假设内部主机(IP: 192.168.0.1)通过端口 56876 访问外网服务器时:

  • 原始数据包:
    • 源:192.168.0.1:56876
    • 目标:2.2.2.2:80
  • NAT 转换后:
    • 源:3.3.3.3:56876(公网IP)
    • 目标:2.2.2.2:80(保持不变)

当服务器响应时,NAT 设备会根据映射表将数据包转发给正确的内部主机。

全锥型 NAT 示意图

全锥型 NAT 是最简单且限制最少的 NAT 类型:

  • 特点
    • 一旦建立映射,允许任何外部主机访问内部服务
    • 映射规则固定且持久
    • 外部主机无需事先与内部主机通信

示例:内部 Web 服务器配置

  • 内部服务器:192.168.0.1:80
  • NAT 映射:
    • 外部:1.1.1.1:80(公网IP和端口)
    • 内部:192.168.0.1:80(私网IP和端口)
  • 任何访问 1.1.1.1:80 的请求都会被转发到内部服务器
受限锥型 NAT 示意图

受限锥型 NAT 增加了来源 IP 限制:

  • 特点
    • 只接受已知外部主机的数据包
    • 外部主机可以使用任意端口
    • 需要内部主机先发起连接建立映射

示例:游戏服务器连接

  • 内部客户端:192.168.0.1:56723
  • 游戏服务器:56.45.34.78(任意端口)
  • 映射规则:
    • 只允许来自 56.45.34.78 的数据包
    • 服务器可以使用任意端口回复
端口受限锥型 NAT 示意图

端口受限锥型 NAT 进一步增加了端口限制:

  • 特点
    • 只接受已知外部主机和端口的数据包
    • 需要完全匹配源IP和源端口
    • 提供更好的安全性

示例:P2P 应用场景

  • 内部客户端:192.168.0.1:56723
  • 外部节点:56.45.34.78:33456
  • 映射规则:
    • 只允许来自 56.45.34.78:33456 的数据包
    • 其他端口的数据包将被丢弃
对称型 NAT 示意图

对称型 NAT 是最严格的 NAT 类型:

  • 特点
    • 为每个连接创建唯一的映射
    • 随机化源端口
    • 提供最高级别的安全性
    • 可能导致 P2P 应用问题

示例:多目标连接

  • 内部客户端访问不同服务器时:
    • 连接A:192.168.0.1:567231.1.1.1:80 映射为 3.3.3.3:62000
    • 连接B:192.168.0.1:567232.2.2.2:80 映射为 3.3.3.3:62001
  1. 地址节约

    • 有效缓解 IPv4 地址短缺
    • 允许多个设备共享一个公网 IP
    • 降低 ISP 的地址分配成本
  2. 安全性提升

    • 提供天然的防火墙功能
    • 阻止未经请求的入站连接
    • 保护内部网络免受直接攻击
    • 有助于防御网络蠕虫和恶意扫描
  1. 连接限制

    • 无法支持真正的端到端通信
    • 部分网络协议可能无法正常工作
    • 需要特殊配置才能支持入站连接
  2. 架构影响

    • 违背了 Internet 端到端通信的设计理念
    • 部分 ISP 仅提供私有 IP,影响服务质量
    • 可能导致连接建立延迟增加
  3. 可靠性问题

    • NAT 设备故障会影响所有连接
    • 需要维护状态表,增加了复杂性
    • 可能影响网络性能和延迟