网络地址转换最初在端点路由器是如何工作的

网络工程 路由 纳特
2022-02-26 15:03:03

我遇到了一个我似乎无法得到高质量答案的问题。我了解收到回复数据包时 NAT 的工作原理,以及它如何从全局 IP 地址映射回内部 IP 地址。但我仍然不清楚它最初是如何工作的。为了使我的问题更清楚,我将使用本教科书第 512 页上显示的示例网络。当 Alice 最初尝试与 Bob 通信时,Bob 的路由器如何将来自 Alice 的数据包映射到他的本地 IP 地址,而不是他 LAN 上的其他两台计算机?我很困惑,因为我不明白 Bob 路由器上的全局 IP 地址如何知道如何将这些数据包路由给他。 在此处输入图像描述

2个回答

您问题中的图表没有显示 NAT 的任何使用,因此这不是一个好的选择。如果我们假设 R2 使用源 NAT/NAPT,而 R7 使用目标 NAT 即端口转发,那么

  1. Alice 将该数据包寻址到 Bob 的公共路由器 R7。Bob 的私人地址对 Alice 来说是未知的并且无用。
  2. R2 将其公共 IP 地址(其中之一)替换为 Alice 的私有源 IP(并且通常也会更改源 TCP 端口)。
  3. 数据包通过 Internet/公共 IP 空间转发。
  4. 根据其 DNAT 映射表,R7 将 Bob 的私有 IP 地址替换为它自己的公共目标 IP(它也可能更改目标 TCP 端口)。
  5. 数据包被转发给 Bob。

当鲍勃回复时,

  1. R7 根据其 NAT 表(也可能是源端口),将其自己的公共 IP 替换为 Bob 的私有源 IP。
  2. 数据包通过 Internet 转发。
  3. 根据其 NAT 表,R2 将 Alice 的私有 IP 替换为它自己的公共目标 IP。
  4. 数据包被转发给 Alice。

[编辑] 请注意,Alice 无法直接与 Bob 联系,因为两者都存在于不同的私有地址网络中。TCP/IP 的正确端到端设计需要在端节点之间有一个公共的、明确的地址空间——公共地址和私有地址的混合打破了这一空间。SNAT 和 DNAT 在某种程度上是解决该问题的补救措施,尽管方式有限。

另一种选择是在 R2 和 R7 之间创建一条隧道,允许它们共享一个通用的私有寻址方案。

相比之下,IPv6 的设计要好得多,允许同时使用公共的、明确的和私有的、本地使用的地址,因此不再需要 NAT。

从照片中很难理解场景中发生的 NAT 或 PAT 类型。这使得准确回答您的问题变得困难。

有四种类型的翻译: 静态 NAT静态 PAT动态 PAT动态 NAT

在这四个中,动态 PAT 是单向的这意味着只有在流量由内部主机发起时,连接才会流经转换。

其他三种类型的转换是双向的,这意味着 NAT 操作或配置方式固有的,路由器具有用于双向启动的连接的映射。

我在这个答案中讨论了动态 PAT 是单向的(引用如下):

地址转换有四种方式:

  • 静态 NAT – 仅转换 IP 地址,管理员在转换后明确定义 IP 地址
  • 静态 PAT
    – IP 地址和端口的转换,管理员在 转换后明确定义 IP 地址和端口
  • 动态 PAT – IP 地址和端口的转换,路由器在转换后确定新的 IP 地址和端口
  • 动态 NAT – 仅转换 IP 地址,路由器在转换后确定新的 IP 地址

根据您正在阅读的供应商文档,这些名称不同)

除了其中一种类型的转换之外,所有类型的转换都是双向的——无论是从内部主机还是外部主机启动,流量都可以通过转换进行处理。

不是(动态 PAT)的一个是单向的——只有当内部主机启动流量时,流量才会流动。

您没有明确指出您指的是哪种类型的翻译,但我认为可以肯定地说您正在谈论动态 PAT。为此,您实际上要问的问题是...

为什么动态 PAT 是单向的?

要理解,您必须首先了解动态 PAT 是如何处理流量的。首先,让我们看一下出站流量:

实用网络 :: Dynamic PAT :: Outbound

当内部主机通过配置了动态 PAT 的设备发送流量时,设备会转换源 IP 和源端口,然后将数据包发送出去。

原始数据包属性和转换后的数据包属性记录在转换表中。

在返回的路上,返回的数据包与转换表进行匹配,以确定如何“未转换”数据包并将其发送到正确的发起主机:

实用网络 :: 动态 PAT :: 入站响应流量

请注意,原始请求的响应流量被允许通过转换设备(在这种情况下为路由器,但许多设备可以执行动态 PAT)返回,因为转换表中的条目存在

但是,如果从外部向动态 PAT IP 地址发起流量:

实用网络 :: 动态 PAT :: 入站初始流量

路由器在转换表中没有条目,因此不知道将数据包发送到哪个内部主机(A、B 或 C)。因此,路由器所能做的就是丢弃数据包。