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

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


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

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

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


1)NAT如何知道该数据包

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

3)数据包头修改是否允许进行Internet攻击,即用受害者的IP替换“源IP”,

我想需要多个攻击者参与...

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

#1 楼

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

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

Private_Network <------->路由器<-------> The_Internet

已连接的路由器的接口到Private_Network的IP地址具有一个私有IP地址,即在The_Internet中不是唯一的IP地址。另一方面,对于NAT,路由器具有连接到The_Internet的多个接口。每个接口在The_Internet中都有一个唯一的IP地址。现在,假设Host_A和Host_B在Private_Network中,并且它们都希望同时访问The_Internet中的Website_X。 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_A开始的数据包进入到Website_X,现在离开连接到The_Internet的路由器的接口,其格式为:

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

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

PATPAT是我们绝大多数家用路由器所使用的。基本限制是路由器具有一个唯一的IP地址,用于连接The_Internet,但我们仍希望允许来自私有网络的多个主机同时访问The_Internet。
我们这样做的方式与NAT的方式“相似”,但有一个关键的区别:它不是路由器持有IP地址池,而是拥有端口号池。更确切地说,从专用网络中的Host_A到达路由器在The_Internet中到达Website_X的数据包将具有以下格式:

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

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


它将源IP更改为路由器的唯一公共IP AND

它将源端口更改为路由器正在维护且尚未使用的池中的端口Port_Z


现在从Host_A到Website_X的数据包现在离开路由器连接到The_Internet的接口的数据包将具有以下格式:

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

路由器将保留以下映射:

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

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

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

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

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

此答案非常有用超出了我的预期长度,但希望对您有所帮助。

评论


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

– Peter Green
17-10-23在16:06

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

–lpydawa
20-2-13在16:43

#2 楼

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

NAT可以更改ip和/或端口的任何组合。 br />
#3是完全不同的主题:欺骗

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

评论


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

–user2449761
14-10-17在23:28

1和2的答案是相同的:因为它正在跟踪连接/翻译。两个内部主机不会映射到相同的外部地址。因此,任何到达映射的外部地址的数据包都会自动只有一个内部目标。如果您只有一个外部(公共)地址,那么它不是“ NAT”,而是PAT(端口转换)

–瑞奇
2014-10-17 23:33