四种不同类型的 Nat

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

对于外部报文,路由器并不关心报文的源 IP 和源端口号(即报文来自谁),只要收到匹配 NAT 表项的报文,都能发送到内网设备。所以,完全圆锥形 NAT 是最宽松的 NAT,打洞最方便。
2 受限圆锥形 NAT(Restricted cone NAT)
与完全圆锥形 NAT 相比,受限圆锥形 NAT,在内网设备向外发送报文时,路由器除了生成 NAT 表项,还会根据报文的目的 IP,记录下内网设备正在与哪些外部设备通信。
这样,只有内网设备先发送报文给外部设备,外部设备回应的报文,才会被转发到内网设备。而其他外部设备发送过来的报文,即使匹配 NAT 表项,也无法发送到内网设备。
这样的 NAT 安全性有一定的提高,但是也提高了打洞难度。两台内网设备需要互相给对方发送一个报文,才能打洞成功。

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

4 对称 NAT(Symmetric NAT)
前面的三种圆锥形 NAT,会根据内网设备发出去的报文的源 IP、源端口号两个信息建立 NAT 表项,将内网 IP 和内网端口号映射到外部 IP 和外部端口号。内网设备发出去的报文,无论目的 IP 和目的端口号如何变化,不管发给哪台外部设备,都会被映射为相同的外部 IP 和外部端口号。
而对称 NAT,会同时根据内网设备出方向报文的源 IP、源端口号、目的 IP、目的端口号四个信息来建立 NAT 表项。如果报文的目的 IP、目的端口号发生了变化,映射到的外部端口号也会发生改变。
对于对称 NAT,我们再来回顾一下前文中 NAT 打洞的过程。内网设备首先和第三方服务器通信,内网 IP 和内网端口号会被映射为一个外部 IP 和外部端口号。接下来,内网设备和另一台设备通信,相同的内网 IP 和内网端口号,又会被映射为另外一个外部端口号。这样,NAT 打洞就无法成功。
所以,在对称 NAT 下,很难进行 NAT 打洞。

本文作者:blanboom
来源:https://blanboom.org/2021/nat/#nat--4
via CC BY-NC-SA 4.0



