为什么使用多个NAT层是一个坏主意?


19

组织的计算机网络具有NAT,其192.168 / 16 IP地址范围。有一个部门,其服务器的IP地址为192.168.xy,此服务器使用IP地址范围为172.16 / 16的另一个NAT处理该部门的主机。

因此有2层NAT。他们为什么没有子网划分。这将允许简单的路由。

我觉得多层NAT可能会导致性能损失。您能否帮助我比较这两种设计策略。

更新:

@Jon更多信息

与朋友讨论时,我们意识到子网划分会导致以下问题。计算机的ARP请求将淹没整个组织的网络。如果路由器不转发这些请求,则一个部门中的PC将无法连接到其他部门中的PC,如果它们位于不同的NAT之后,则无论如何都无法实现。通过数据包嗅探器,我们看到存在大量ARP请求,因为该部门中的大多数计算机都启用了Windows上的文件共享。

如何解决这个问题呢?

同样,如果两台计算机位于不同的NAT之后,则它们将无法相互连接。


请将您的问题更改为:“为什么使用多个NAT层是个坏主意?”

2
另一项家庭作业...
乔恩·罗德斯

1
没有。这是一个实际问题。我总是提作业。
罗希特·邦加

3
@Jon(和他的支持者),在这里提问作业没有问题。在meta.stackoverflow.com上,这个主题已经讨论了数十次,尽管我个人没有发现任何指向硬件的问题。
马克·亨德森

@Farseeker-整个问题是抽象的。他似乎没有任何改变的余地,他希望我们没有明确的目标“比较这两种设计策略”-闻起来像是作业而不是现实世界中的问题。当然,我很乐意接受我的错,并且有人确实有这种疯狂的设置-在这种情况下,请问他们为什么他们必须有充分的理由。
乔恩·罗德斯

Answers:


6

进行多层NAT转换的唯一真正问题是,它会使您的网络拓扑混乱。如果使用多层NAT,则将浪费组织中所有主机之间的对称路由,并且还可能会在网络内部重叠专用地址空间。想象一下,如果您在n + 1 NAT层中使用了n + 1 NAT层中的地址范围。这些网络将永远无法相互路由,但是n + 1层中的主机可能具有与n层相同的地址,从而使服务器的身份令人困惑。

如果要布置大型网络的拓扑,则在任何子网上的主机仅使用10. *或172.16-24。*地址。然后,如果某个部门或个人希望将NAT加倍,则可以(使用192.168。*网络)了解自己对NAT主机后面的网络负责。我也更倾向于创建更多的子网,而不是让任何双重NAT网络变得太大。


9

多层NAT的问题与单层NAT基本上相同,但更为复杂。如:

  1. 由于在数据包生命周期中需要进行额外的工作而导致的延迟(尽管在大多数情况下这不太可能造成重大影响)

  2. 知道一切从何而来。如果您试图跟踪某些请求的来源(也许您的传出防火墙已记录了看起来像一台受感染的计算机,试图散播垃圾邮件或搜索其他感染目标),则NAT使此类诊断变得更加困难。

  3. 如果需要传入连接,传入连接端口转发将更易于设置和维护。

  4. 端口数量有限。NAT通过在不同端口上将源地址转换为其自身来工作,例如:

    • 机器1使用端口1024与外部Web服务器进行对话,因为其源被转换为端口10000上的NAT框的地址。
    • 同一台机器使用源端口1025同时向该Web服务器(或另一个Web服务器)发出两个请求(这很正常)(两个并发连接需要具有不同的源端口)。NAT框将其转换为“我在源端口10001上”
    • 另一台机器正在与外部服务器建立三个连接。很好,NAT框将它们转换为“端口10002、10003和10004上的我”
    • 当数据包以外部计算机的形式返回时,NAT盒知道将目的地为端口10000的东西确实应该转到端口1024上的计算机1,以此类推,以进行其他活动连接。

    直到您有许多传出连接为止(这是大型网络或小型网络,而这些计算机具有进行许多连接的机器(如实现bittorrent协议的P2P应用程序可以创建许多并发连接)),这一切都很好。IP协议中只有65536个端口,少于保留的1024个端口。尽管60,000个听起来可能很多,但可以很快被消耗掉,但NAT框需要确定可以删除哪些旧映射,这通常不如“删除最旧的映射”那么简单。这可能会导致奇怪的错误(由于难以诊断的原因而导致的随机连接断开)或机器暂时无法建立新连接。

  5. 在NAT盒上加载。如果您使用小的低功耗设备(例如,支持路由器的现成NAT,而不是带有CPU的完整PC)来进行NAT,则额外的转换工作(与按照基本路由表简单地转发数据包相比) )可能会降低通过它们的传输速度。对于Internet访问,这不太可能成为问题(您的网络连接将成为瓶颈),但是当您在本地网段之间进行NAT转换时,它可能会变得非常明显。


要点4这个问题对于NAT的任何数量的层都应该相同!
罗希特·邦加

的确,第4点在单级NAT和多级NAT上都是相同的问题,但多级NAT加剧了确定哪些连接已死的问题(外部主机可能不了解内部主机那么多)并进行诊断。如果端口映射限制确实成为问题,则难度会更大。它还可能使公平的带宽分配和其他流量整形更加难以实现和监视(尽管有很多解决方法,简化网络拓扑通常是更好的选择)。
David Spillett 2012年

6

性能损失/速度实际上取决于您使用的路由器的质量。

至于好/坏主意,我反对在可能仅使用路由的情况下,但是,它实际上取决于环境以及您要实现的目标。

如果这些机器只需要运行在标准端口上共享的一些内容,则可以进入路由器/ nat-giving设备并设置一条规则以允许您想要的东西(1)。但是,如果您要执行大量的设备到设备任务,则每台机器都有自己的唯一IP(2),拥有正确的路由会容易得多。

(1)例如,一对多-一台计算机上有一个Web服务器,并且您想与其他服务器共享-您需要在路由器中将规则设置为该计算机的端口80,然后再从外部网络(或内部)设置任何计算机如果启用了nat-loopback),则只需访问http://router.ip即可访问。

(2)但是,如果每台机器都将要安装Web服务器,或者您将要使用大量服务,那么设置所有规则将是一场噩梦(但这并非不可能)。

至于您的情况-如果一个部门正在使用192.168.xx而另一个部门正在使用192.168.yx,则我将遍历设备,并且如果没有重叠,则可以将子网从/ 24更改为/ 16(或反之亦然),然后用交换机或类似设备替换路由器,并且不会造成服务损失。

如果不了解您的网络,真的很难提供帮助,只要正确设置双NAT,就不会出现任何“错误”。但是,除非您真的需要它,或者有充分的理由,否则我会考虑迁移您(个人意见)


@iamrohitbanga-回答您的问题(评论过多)。

比较很难-路由在每台机器都可以访问每台机器的专用网络上运行良好。Nat工作得很好,但是它主要用于不需要路由的网络,因为您通常必须手动设置传入的规则/路由。

例如,如果您具有Internet连接并禁用了NAT,则可以手动设置路由或桥接模式-您的计算机将直接位于Internet上-所有端口都可以访问,并且任何计算机都可以按照自己的意愿进行操作。

另一方面,如果您有一台具有NAT的路由器,它将使用外部IP并提供“ Nat-ed?”。(不确定术语...)互联网-所有内部计算机都具有无法从互联网访问的IP,但是,您可以设置手动规则-例如,将80端口连接到一台计算机...对于传出连接(防火墙)非常有效规则允许),但是如果您托管许多服务,则可能是设置传入规则的噩梦……如果您执行任何需要动态端口(ftp,Windows AD等)的操作,那将是一场噩梦。

希望这对您有所帮助,如果您想了解其他任何信息,请随时提出。


你能比较两种策略吗?该网络用于向主机提供Internet访问。
罗希特·邦加

@iamrohitbanga-更新答案
William Hilsum 2010年

5

NAT(通常是多层,具体来说是多层)的主要问题是很难进行故障排除。


4

NAT的最大问题是,当有过时的网络软件进行转换时,这会损害许多应用程序(FTP,VoIP等)。现代防火墙/网关具有翻译功能(以思科术语的修正),这使它变得更加容易。

我不明白为什么您的公司在专用子网之间使用NAT。为什么不只是路由呢?



1

要回答问题的新第二部分...

路由器破坏广播域-路由器不转发arp数据包,它们停留在子网内*。Windows文件共享(严重吗?)Netbios广播流量不会离开子网。

使用子网:

如果需要从子网外部访问Windows共享,则可以通过直接使用其IP地址或通过主机名设置DNS或WINS服务器来访问它。

使用NAT:

如果您的NAT是PAT类型的,因此不是一对一的映射,则您需要配置端口转发才能正常工作-这很不好。

正如先前所讨论的那样,NAT通常是一件坏事,因为它破坏了网络功能,我们只能使用,因为我们必须这样做。在IPv6上滚动。

*当然存在广播转发器/中继器/帮助器

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.