为什么对称 NAT 被称为“对称”?

网络工程 纳特 网络
2021-07-13 03:42:27

搜索了一段时间后,我仍然无法找到有关为什么将其称为对称 NAT的合乎逻辑的解释

对称 NAT每个请求都映射到唯一的外部源 IP 地址和端口之间的链接在哪里有吗?

2个回答

tl;dr它来自 STUN 并且是对称的,因为它标识了 NAT 映射和 L4 流之间的 1:1 关系。

据我所知,名称对称 NAT 是由原始 STUN RFC 3489引入的,其定义如下:

在对称 NAT 中,来自同一内部 IP 地址和端口到特定目标 IP 地址和端口的所有请求都映射到相同的外部 IP 地址和端口。如果同一主机发送具有相同源地址和端口的数据包,但发送到不同的目的地,则使用不同的映射。此外,只有接收数据包的外部主机才能将 UDP 数据包发送回内部主机。

如果您不太熟悉 NAT 和 STUN 的整个概念,这可能无法说明问题。让我试着建立这个。

第一个重要概念是 5 元组(protocol, host port, server port, host address, server address),其中协议最常见的是UDPTCP这个 5 元组用于标识 L4 协议流。我使用hostserver术语来简化一些事情并避免使用定向术语,例如源和目的地。

现在,设备的整个概念NA(P)T(host port, host address)(NAT port, NAT address)外部网络(外部)上的动态替换内部网络(内部)上的 。这种翻译的状态也称为NAT mapping最简单的 NAT 功能不关心protocol, server ip, 和server port在这种情况下,多个四层协议流可以使用相同的NAT映射,只要内部使用host iphost-port相同即可。这种多路复用/多路分解流到映射的 N:1 模型通常通过漏斗或锥体表示。

最大的选择是为每个新的 5 元组创建一个映射。因此,即使例如所有protocol, host ip, host port, 和server ip都相同但server port不同,也会创建一个新映射,结果NAT ip, NAT port也会有所不同。因此,在第 4 层流和 NAT 映射之间存在完整的 1:1 对称性。

与问题无关,但只是一些历史,为什么这个术语对 STUN RFC 实际上很重要,而不是作为实现细节留下。stun 的目标之一是在 NAT 后面的两个客户端之间启用 P2P 连接。这个想法是,对于许多应用程序(例如 VoIP),只有通过服务器进行初始通信,但所有剩余的通信都将是 P2P。要设置此 P2P,客户端将连接到 stun 服务器,该服务器执行三件事:

  1. 它告知他们 NAT 的类型,因为这仅适用于“完整锥体”版本。因此检测锥体与对称体在这里很重要(眩晕实际上有一些锥体变体)
  2. 如上所述,它会创建一个 NAT 映射。
  3. stun 服务器将映射的外部端口+IP 通知给客户端。

然后,客户端将通过应用程序(voip)服务器将学习到的端口+IP 发送到另一个客户端,现在可以用来建立 P2P 连接。

在实践中,这几乎不起作用,并且如所述的 stun 已过时并被RFC 5389取代此外,很多 NAT 实现都添加了应用级网关来直接解决某些协议。最重要的是,有一些特定的协议可以按需创建 NAT 映射,最突出的是UPnP IGDPCP但是,正如经常发生的那样,一些原始的 STUN 概念无论如何都会永远存在:)。

听起来/感觉像对称 NAT 应该是这样的

源IP:192.168.1.10 源端口:32567 --NAT--> IP:88.88.88.1 源端口:32567

路由器在 NAT 期间使用与设备相同的端口,这使得它看起来是对称的。(它不是!)

不要认为这是明智的结果,而是明智的 NAT 操作。它是对称的,因为 IP 地址和源端口都被转换为一个新的 IP 地址和一个新的端口,例如;

源IP:192.168.1.10 源端口:32567 --NAT--> IP:88.88.88.1 源端口:23447(Dest A)
源IP:192.168.1.10 源端口:56543 --NAT--> IP:88.88.88.1源端口:18234(Dest B)

如果您的家庭调制解调器没有进行对称 NAT

源IP:192.168.1.10 源端口:32567 --NAT--> IP:88.88.88.1 源端口:32567(Dest A)
源IP:192.168.1.10 源端口:56543 --NAT--> IP:88.88.88.1源端口:56543(Dest B)

那么这不是对称的。IP 地址已修改,但端口保持不变。
请注意,如果您有一个公共 IP 地址块,您可以选择 NAT 到此块并为每个连接选择不同的 IP 地址,例如;

源IP:192.168.1.10 源端口:32567 --NAT--> IP:88.88.88.3 源端口:23447(Dest A)
源IP:192.168.1.10 源端口:56543 --NAT--> IP:88.88.88.7源端口:18234(Dest B)

注意:在示例中,192.168.1.10 是您的 PC IP 88.88.88.1 是您的路由器公共 IP。