我有一个基于 ISA2006 的旧 NLB 群集,计划将其迁移到新的 TMG2010 NLB 群集。我需要在迁移期间让两个群集都处于活动状态一段时间(当然,使用不同的 IP)。
两个 NLB 群集均以多播模式运行,并且数据包通过物理网络在相应 VLAN 的所有端口上泛洪,就像 NLB 的情况一样。
这里以下是逻辑网络布局的概述:
我现在面临的问题是,当我在新群集上启用 NLB 时,它还会处理发往当前活动的其他 NLB 群集的流量,即使帧的目标 MAC 不属于它。这会导致很多麻烦,例如重复的数据包转发(例如,我收到单个 DNS 查询的 4 个回复)或新群集上数据包的大量日志被丢弃为 TCP 状态异常。
考虑以下情况:两个 NLB 都处于活动状态,并且主机 A 向 NLB 群集另一端的主机 B 发送 IP 数据包。将发生以下情况:
- 主机 A 将检查其路由表,并注意到它必须将数据包转发到其默认网关 192.168.1.6(旧 NLB)
- 主机 A 广播 IP 的 ARP 请求,并使用旧集群的相应虚拟 NLB-MAC 进行应答
- 主机 A 发送数据包,其目标 IP 为 B,目标 MAC 为旧集群
- 数据包在 VLAN 的所有端口上泛洪,因为目标 MAC 地址在任何地方都未获知,并且是多播目标 MAC 地址,也没有 IGMP 监听或任何其他操作
- 该帧按计划到达旧 NLB 的集群成员,它们对其进行相应的处理和转发
- 该帧也到达了新 NLB 群集的群集成员(因为它已被淹没),但由于目标 MAC 与自己的任何 MAC 都不匹配,因此它不会在第 2 层丢弃该帧,而是也会处理相同的数据包并转发它
同样的事情也发生在来自其他网络的数据包上。这真的让我很困惑,因为我认为操作系统第 2 层网络堆栈应该在帧转发到应用程序层之前立即丢弃它们。
一旦我在新集群上禁用 NLB,它将停止处理发往其他集群的流量。
有人知道如何防止这种行为吗?或者这是否真的是它应该如何工作的?