# 四种不同类型的 NAT 介绍

# **1 完全圆锥形 NAT（Full cone NAT）**

对于完全圆锥形 NAT，内网 IP 和内网端口号，被映射为外部 IP 和外部端口号。当路由器收到来自外部的报文时，只要报文的目的 IP 和目的端口号，匹配到 NAT 表项的外部 IP 和外部端口号，都会转换为对应的内网 IP 和内网端口号，转发到内网设备。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673630835622/821b68fc-bf72-456a-9f7f-af5417b2d92c.webp align="center")

对于外部报文，路由器并不关心报文的源 IP 和源端口号（即报文来自谁），只要收到匹配 NAT 表项的报文，都能发送到内网设备。所以，完全圆锥形 NAT 是最宽松的 NAT，打洞最方便。

# **2 受限圆锥形 NAT（Restricted cone NAT）**

与完全圆锥形 NAT 相比，受限圆锥形 NAT，在内网设备向外发送报文时，路由器除了生成 NAT 表项，还会根据报文的目的 IP，记录下内网设备正在与哪些外部设备通信。

这样，只有内网设备先发送报文给外部设备，外部设备回应的报文，才会被转发到内网设备。而其他外部设备发送过来的报文，即使匹配 NAT 表项，也无法发送到内网设备。

这样的 NAT 安全性有一定的提高，但是也提高了打洞难度。两台内网设备需要互相给对方发送一个报文，才能打洞成功。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673630869612/569cdc3d-3890-423f-8cb0-0d99ff716e45.webp align="center")

# 3 **端口受限圆锥形 NAT（Port-Restricted cone NAT）**

端口受限圆锥形 NAT 和受限圆锥形 NAT 类似，但增加了检查的严格程度：**受限圆锥形 NAT**，只会外部设备的 IP 地址，来检查内网设备与哪些外部设备通信过。而**端口受限圆锥形 NAT**，会同时根据 IP 地址和端口号来进行检查。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673630905740/78b998dc-db77-42bd-99c4-a839d43d28e7.webp align="center")

# **4 对称 NAT（Symmetric NAT）**

前面的三种**圆锥形 NAT**，会根据内网设备发出去的报文的源 IP、源端口号两个信息建立 NAT 表项，将内网 IP 和内网端口号映射到外部 IP 和外部端口号。内网设备发出去的报文，无论目的 IP 和目的端口号如何变化，不管发给哪台外部设备，都会被映射为相同的外部 IP 和外部端口号。

而**对称 NAT**，会同时根据内网设备出方向报文的源 IP、源端口号、目的 IP、目的端口号四个信息来建立 NAT 表项。如果报文的目的 IP、目的端口号发生了变化，映射到的外部端口号也会发生改变。

对于对称 NAT，我们再来回顾一下前文中 NAT 打洞的过程。内网设备首先和第三方服务器通信，内网 IP 和内网端口号会被映射为一个外部 IP 和外部端口号。接下来，内网设备和另一台设备通信，相同的内网 IP 和内网端口号，又会被映射为另外一个外部端口号。这样，NAT 打洞就无法成功。

所以，在对称 NAT 下，很难进行 NAT 打洞。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673630959760/3cbcb768-4868-4203-88d9-bce0d1e3cb4b.webp align="center")

> 本文作者：blanboom  
> 来源：[https://blanboom.org/2021/nat/#nat--4](https://blanboom.org/2021/nat/#nat--4)  
> via **CC BY-NC-SA 4.0**
