NAT
NAT(Network Address Translation,网络地址转换) 主要用于在不同网络(如私有网络和公共互联网)之间进行 IP 地址转换,解决IP 地址短缺问题,并提供一定的安全性。
- IPv4 地址是 32 位(最多
2^32 ≈ 43 亿
个地址),但全球设备数量远超这个范围。- 私有 IP 地址(如
192.168.1.0/24
)不能直接在公网使用,必须通过 NAT 转换成公网 IP。
NAT IP转换过程
当主机A私有IP地址访问服务器公有IP时,先把数据发给路由器,NAT 路由器将报文的源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;并在转换表中建立私有IP和公有IP的映射关系。
当服务器返回报文时,NAT 路由器收到外部的数据时, 再根据转变表的映射关系,把目标 IP 从 202.244.174.37 替换回10.0.0.10;
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;
NAPT
那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返
回的数据中, 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个
局域网的主机?这时候就不能但使用IP建立联系,要用IP+port。
在同一个子网中每个主机的私有 IP 是唯一的,即使端口号一样,也能保证唯一性。IP+端口号保证了在同一个子网中,每台主机以及主机上客户端的唯一性。
NAPT,转换的公网IP一样,但可以分配不同的端口号,也保证了唯一性。
这样映射双方都保证了唯一性。
再来想一下,同一子网中主机的私有IP不同,但不同子网的私有IP可能会相同。如果这两个子网有同一个路由器,在不同子网的两个主机私有IP相同,端口号也相同,访问同一个服务器,会怎么样?
即使不同子网的主机 IP + 端口号相同,NAPT 仍然能基于 NAT 端口号 + 子网信息(NAPT 设备用来区分不同子网的标识信息:入接口eth 源子网 VLAN 标识)唯一映射,确保数据包不会错误地送达另一台主机。
子网 A 的 192.168.1.100:5001 → 203.0.113.1:30001
子网 B 的 192.168.1.100:5001 → 203.0.113.1:30002
服务器返回数据时,NAPT 设备根据 NAT 端口号找到正确的原始子网,并正确转发回去。
其他 NAT 方案:
策略 NAT(Policy-Based NAT)
- 不同子网使用不同的 NAT 端口范围,确保 NAT 端口不重叠。
- 例如:
- 子网 A:NAT 端口
30000-31000
- 子网 B:NAT 端口
31001-32000
使用多个公网 IP
- 如果 NAT 设备支持多个公网 IP,可以为不同子网分配不同的公网 IP,避免 NAT 端口冲突:
- 子网 A →
203.0.113.1
- 子网 B →
203.0.113.2