我们正常上网时使用的 IP 地址通常是: 192.168.x.x、10.10.x.x ,这些 IP 地址在局域网内有用,但是在公网上没有用,这时候我们就需要为我们的局域网找一个代理,作为我们上网的公网 IP 地址, NAT 就起到了这样的作用,通过 NAT 技术我们就实现了 私网 IP 和公网通信的功能。

NAT

网络地址转换 NAT:在专用网连接到因特网的路由器上安装 NAT 软件,安装了 NAT 软件的路由器称为 NAT 路由器,它至少有一个有效的全球 IP 地址

NAT - 图1

NAT 通过重写 Ip PacketSource IP或者 Destination IP技术,来解决私有地址和外部通信.

现在我们假设:

Source IP Destination IP
192.168.2.2 9.9.9.9

SNAT

SNAT : 源地址转换,即重写的是 Ip PacketSource IP

重写后如下:

Source IP Destination IP
1.1.1.1 9.9.9.9

DNAT

DNAT: 目标地址转换,重写的是 Destination IP

重写后如下:

Source IP Destination IP
192.168.2.2 2.2.2.2

PAT

PAT: 端口地址转换, 通过重写传输层的 Source Port或者 Destination Port的技术

原始数据包:

Source IP Source Port Destination IP Destination Port
192.168.2.2 6666 9.9.9.9 80
重写 <font style="color:rgb(50, 50, 50);">Destination Port</font>后如下:
Source IP Source Port Destination IP Destination Port
192.168.2.2 6666 9.9.9.9 8080

NAPT

即 NAT 和 PAT 的混合体.

最常见的是重写私有地址端口192.168.2.2:6666为公网的IP和端口1.1.1.1:7777,以此可以实现私有地址访问公网的目的。重写后如下 :

Source IP Source Port Destination IP Destination Port
1.1.1.1 7777 9.9.9.9 80
或者重写目标地址的IP和端口号。比如把发往 9.9.9.9:80 的数据重写为发往 2.2.2.2:8080,以此可以可以实现数据包转发的目的
Source IP Source Port Destination IP Destination Port
192.168.2.2 6666 2.2.2.2 8080

Cone NAT

Source 方发送数据包触发,根据 Source IP:Source Port 为唯一标识,在NAPT中建立映射关系(即使 Destination 不同也只会建立一个映射关系)。

Full Cone NAT

映射建立后,允许外部的 Any IP : Any Port 访问映射的 NAT IP:NAT Port

NAT - 图2

Address Restricted Cone NAT

映射建立后,允许外部的 Destination IP : Any Port 访问映射的 NAT IP:NAT Port
NAT - 图3 ### Address Port Restricted Cone NAT 映射建立后,允许外部的 Destination IP : Destination Port 访问映射的 NAT IP:NAT Port

NAT - 图4

Symmetric NAT

Source方发送数据包触发,根据 Source IP:Source Port Destination IP:Destination Port 为唯一标识,在NAPT中建立映射关系。 映射建立后,允许外部的 Destination IP : Destination Port 访问映射的 NAT IP:NAT Port

NAT - 图5