同一 VLAN 上的两个 NLB 多播群集处理相同的流量

同一 VLAN 上的两个 NLB 多播群集处理相同的流量

我有一个基于 ISA2006 的旧 NLB 群集,计划将其迁移到新的 TMG2010 NLB 群集。我需要在迁移期间让两个群集都处于活动状态一段时间(当然,使用不同的 IP)。

两个 NLB 群集均以多播模式运行,并且数据包通过物理网络在相应 VLAN 的所有端口上泛洪,就像 NLB 的情况一样。

这里以下是逻辑网络布局的概述:

我现在面临的问题是,当我在新群集上启用 NLB 时,它还会处理发往当前活动的其他 NLB 群集的流量,即使帧的目标 MAC 不属于它。这会导致很多麻烦,例如重复的数据包转发(例如,我收到单个 DNS 查询的 4 个回复)或新群集上数据包的大量日志被丢弃为 TCP 状态异常。

考虑以下情况:两个 NLB 都处于活动状态,并且主机 A 向 NLB 群集另一端的主机 B 发送 IP 数据包。将发生以下情况:

  1. 主机 A 将检查其路由表,并注意到它必须将数据包转发到其默认网关 192.168.1.6(旧 NLB)
  2. 主机 A 广播 IP 的 ARP 请求,并使用旧集群的相应虚拟 NLB-MAC 进行应答
  3. 主机 A 发送数据包,其目标 IP 为 B,目标 MAC 为旧集群
  4. 数据包在 VLAN 的所有端口上泛洪,因为目标 MAC 地址在任何地方都未获知,并且是多播目标 MAC 地址,也没有 IGMP 监听或任何其他操作
  5. 该帧按计划到达旧 NLB 的集群成员,它们对其进行相应的处理和转发
  6. 该帧也到达了新 NLB 群集的群集成员(因为它已被淹没),但由于目标 MAC 与自己的任何 MAC 都不匹配,因此它不会在第 2 层丢弃该帧,而是也会处理相同的数据包并转发它

同样的事情也发生在来自其他网络的数据包上。这真的让我很困惑,因为我认为操作系统第 2 层网络堆栈应该在帧转发到应用程序层之前立即丢弃它们。

一旦我在新集群上禁用 NLB,它将停止处理发往其他集群的流量。
有人知道如何防止这种行为吗?或者这是否真的是它应该如何工作的?

相关内容