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

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

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

因此有 2 层 NAT。为什么不采用子网划分呢?这样可以轻松进行路由。

我觉得多层 NAT 会造成性能损失。您能帮我比较一下这两种设计策略吗?

更新:

@Jon 更多信息

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

如何解决这个问题呢?

此外,如果两台计算机位于不同的 NAT 后面,那么它们就无法相互连接。

答案1

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

如果我要布置大型网络的拓扑结构,我将仅使用 10.* 或 172.16-24.* 地址作为我们子网上的主机。这样,如果某个部门或个人想要双重 NAT,他们可以(使用 192.168.* 网络)并理解他们要对其 NAT 主机后面的网络负责。我也更倾向于创建更多子网,而不是让任何双重 NAT 的网络变得太大。

答案2

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

  1. 由于数据包生命周期内需要完成额外工作而导致的延迟(尽管在大多数情况下这种情况并不严重)

  2. 了解任何内容的来源。如果您尝试追踪某些请求的来源(也许您的传出防火墙记录了看起来像是受感染的机器试图发送垃圾邮件或搜索其他感染目标的内容),NAT 会使此类诊断变得更加困难。

  3. 如果您需要传入连接,传入连接端口转发的设置和维护会更加麻烦。

  4. 端口数量有限。NAT 的工作原理是将源地址转换为不同端口上的自身地址,例如:

    • 机器 1 使用端口 1024 与外部 Web 服务器通信,因为它的源被转换为 NAT 盒的地址,例如端口 10000。
    • 同一台机器同时使用源端口 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 时,这可能会变得非常明显。

答案3

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

至于好主意/坏主意,当可以简单地使用路由时,我反对它,但是,这实际上取决于环境以及您想要完成的任务。

如果机器只需要运行一些通过标准端口共享的东西,你可以进入路由器/nat 设备并设置规则来允许你想要的东西 (1)。但是,如果你要执行很多设备到设备的任务,那么拥有一个合适的路由会容易得多,因为每台机器都有自己独特的 IP (2)。

(1)例如,一对多 - 一台机器有一个 Web 服务器,你想将它共享给其他人 - 你可以在路由器中为该机器的端口 80 设置一条规则,然后来自外部网络(或内部网络,如果启用了 nat-loopback)的任何机器都可以简单地转到http://路由器ip并可以访问。

(2) 但是,如果每台机器都要运行 Web 服务器,或者您要使用很多服务,那么设置所有规则将会非常困难(但并非不可能)。

至于您的情况 - 如果一个部门使用 192.168.xx,另一个部门使用 192.168.yx,我会检查这些设备,如果没有重叠,则可能简单地将子网从 /24 更改为 /16(或反之亦然),然后用交换机/或类似设备替换路由器,并且不会丢失服务。

如果不了解你的网络,很难提供帮助,只要设置正确,双重 NAT 没有什么“问题”。但是,除非你真的需要它,或者有很好的理由,否则我会考虑迁移到别处(个人意见)


@iamrohitbanga — 回答您的问题(太多评论了)。

很难进行比较 - 路由适用于私有网络,因为其中每台机器都能够访问每台机器。Nat 工作得很好,但它主要用于不需要路由的网络,因为您通常必须手动设置传入规则/路由。

例如,如果您有互联网连接并禁用 NAT,然后手动设置路由或桥接模式 - 您的机器将直接连接到互联网 - 所有端口均可访问,任何机器都可以对其进行操作。

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

希望这会有所帮助,如果您想了解其他任何事情,请随时询问。

答案4

NAT 的最大问题是使用过时的网络软件进行转换,这会使许多应用程序受到影响(FTP、VoIP 等)。现代防火墙/网关都有转换功能(思科术语中的修复程序),这会让转换变得容易得多。

我不明白为什么贵公司在私有子网之间使用 NAT。为什么不直接路由呢?

相关内容