NAT / PortForwarding / TCP / IP如何工作?


11

我最近读了一篇标题为NAT如何工作的文章。我仍然不清楚一些事情。如果有人可以解释我将不胜感激。

以下是有关DynamicNAT的文章中最令人困惑的部分:

存根域上的计算机尝试连接到网络外部的计算机,例如Web服务器。

路由器从存根域上的计算机接收数据包。路由器将计算机的不可路由IP地址保存到地址转换表中。路由器用唯一IP地址范围之外的第一个可用IP地址替换发送计算机的不可路由IP地址。现在,转换表具有计算机的不可路由IP地址与唯一IP地址之一匹配的映射。

当数据包从目标计算机返回时,路由器将检查数据包上的目标地址。然后,它在地址转换表中查找该数据包属于存根域中的哪台计算机。

1)NAT如何知道数据包“返回”到目标计算机?

2)如果局域网中的其他计算机连接到同一服务器怎么办?NAT如何知道哪个数据包应该在哪里“返回”?

3)数据包头修改是否允许执行Internet攻击,即用受害者的IP替换“源IP”,应答服务器将向受害者发送不需要的数据包?

我猜可能需要涉及多个攻击者...

4)StaticNAT是否等效于所有端口的PortForwarding?

Answers:


10

NAT(网络地址转换)和PAT(端口地址转换)之间存在一个普遍的误解,这是我们在家用路由器中经常使用的概念。

NAT
假设我们有一个具有以下拓扑的网络:

专用网络 <-------> 路由器 <-------> The_Internet

连接到Private_Network路由器的接口具有私有IP地址,即,在The_Internet中不是唯一的IP地址。另一方面,对于NAT路由器具有连接到The_Internet的多个接口。每个接口在The_Internet中都有一个唯一的IP地址。现在让我们假设HOST_AHOST_B都在Private_Network,他们都希望访问Website_XThe_Internet在同一时间。Host_A的IP和端口的数据包将是:

源IP:Host_A的专用IP
源端口:Host_A上的端口
目标IP:Website_X的公共/唯一IP
目标端口:Website_X服务器正在侦听的端口

对于来自Host_B的数据包也以相同的方式进行。
如果源IP保持不变,则Website_X将回复私有的IP地址,即不是唯一的IP地址,因此数据包将永远无法找到它的返回路径。为了解决该问题,路由器检查是否未使用其连接到The_Internet的唯一IP地址之一。如果是这种情况,它将执行以下映射:

Host_A的专用IP ======= 路由器的_unique_IP_K

现在,从Host_AWebsite_X并离开路由器The_Internet连接的接口的数据将具有以下形式:

源IP:路由器的_unique_IP_K
源端口:Host_A上的端口
目标IP:Website_X的公共/唯一IP
目标端口:Website_X服务器正在侦听的端口

因此,您可以理解,从私有IP到公共IP有一对一的关联。因此,当一个数据包从到达Website_X路由器,该协会进行检查,目的IP地址改回私人之一,并成功地传递到正确的主机。
如您所见,此方法非常简单,但是有一个很大的缺点:每个专用主机都必须保留一个唯一的IP地址,这很昂贵,因此我们选择的唯一IP地址要比专用网络中的主机少。因此,如果所有专用主机都尝试同时访问The_Internet,则仅其中一个子集等于路由器可用的可用公共IP地址的数量。拥有,将有权使用,其余的将被拒绝。
为了解决这个问题,我们创建了PAT

PAT
PAT是我们绝大多数家用路由器所使用的。基本限制是路由器具有一个唯一的IP地址,用于连接The_Internet,但是我们仍然希望允许来自私有网络的多个主机同时访问The_Internet
我们这样做的方式与NAT的方式“相似”,但有一个主要区别:路由器没有持有IP地址池,而是拥有端口号池。更确切地说,在一个到达的分组路由器HOST_APrivate_Network注定Website_XThe_Internet将具有以下格式:

源IP:Host_A的专用IP
源端口:Host_A上的端口
目标IP:Website_X的公共/唯一IP
目标端口:Website_X服务器正在侦听的端口

现在,路由器将执行两项任务:

  1. 它将源IP更改为路由器的唯一公共IP AND
  2. 它将源端口更改为路由器正在维护且尚未使用的池中的端口,例如Port_Z

现在,从Host_AWebsite_X并离开路由器The_Internet连接的接口的数据将具有以下形式:

源IP:Router's_unique_IP_K
源端口:Port_Z
目标IP:Website_X的公共/唯一IP
目标端口:Website_X服务器正在侦听的端口

路由器将继续下面的映射:

Host_A的专用IP Host_A上的端口======= Port_Z

为什么这样做?
现在,当数据包返回时,路由器只需检查目标端口号并根据前面提到的映射更改目标IP地址和目标端口号,即可成功交付数据包。

如果我在同一主机上运行多个应用程序该怎么办?
根据定义,不同的应用程序将具有不同的端口,因此它们将映射到与Router不同的端口。

如果多个主机尝试同时访问The_Internet且它们都使用同一应用程序怎么办?
根据定义,不同的主机将具有不同的私有IP地址,因此它们将映射到路由器的不同端口。

PAT在跨层的灰色空间中处于危险的平衡状态。端口号是传输协议的一部分,而路由器则可以按照Internet协议运行。因此,从技术上讲,协议不允许这样做。因此,至少在理论上存在潜在的危险:端口池受到限制。因此,如果我的专用网络由1000个主机组成,并且每个主机都在运行port_pool / 10应用程序,则路由器上的映射表将用尽所有可用条目,并且将拒绝对应用程序的访问。

这个答案大大超出了我的预期长度,但是我希望它会有所帮助。


2
一些注意事项:首先,您使用术语“ NAT”来表示RFC所称的“基本NAT”,使用“ PAT”来表示RFC所称的“ NAPT”。RFC通常使用“ NAT”作为涵盖“基本NAT”和“ NAPT”的总称。其次,即使“基本NAT”也必须修改TCP / UDP标头,因为TCP / UDP标头包含一个覆盖IP地址的校验和。
彼得·格林

@PeterGreen但答案的主旨是否正确?
lpydawa

6

路由器知道数据包所属的位置,因为The router saves ... an address translation table.它会记住它进行了哪些内部-外部地址转换。这样,一个内部地址等于一个外部地址,并且Internet上的目的地无关紧要。当然,这实际上忽略了每个NAT路由器中存在的防火墙,该防火墙跟踪完整的连接:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT可以更改ip和/或端口的任何组合。

#3是完全不同的主题:欺骗

#4“静态NAT”或“一对一”是仅地址映射。因此,端口(甚至协议:tcp,udp,gre等)均无关紧要。


2)如果局域网中的其他计算机连接到同一服务器怎么办?NAT如何知道哪个数据包应该在哪里“返回”?
user2449761 2014年

1和2的答案是相同的:因为它正在跟踪连接/翻译。两个内部主机不会映射到相同的外部地址。因此,任何到达映射的外部地址的数据包都会自动只有一个内部目标。如果您只有一个外部(公共)地址,则不是“ NAT”,而是PAT(端口转换)
Ricky Beam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.