使用 UCARP (VRRP) 的 KEMP 负载平衡器 - 未获取多播 MAC 地址

网络工程 cisco催化剂 多播 虚拟现实 电源连接 igmp
2021-07-13 19:26:59

好吧 - 已经连续至少 20 小时与此抗争了.. 对不起,如果这看起来像是一个长篇大论或一篇博文,但我快要精疲力竭了。

所以,这是交易。我们正在使用 KEMP 负载平衡器,它利用 UCARP(CARP 的 Linux 克隆,它是 VRRP 克隆)用于 HA 心跳和持久状态。我们希望在我们的环境中利用 IGMP 来防止数据中心泛滥。

我们有两个运行 SW 5.1.1.7 的 Dell PowerConnect 8124F 交换机作为架顶式交换机。这两个连接到堆叠的一对 Cisco 3750-X,这是我们的核心。

当我们升级到 PowerConnect 5.1.x 时,问题就开始了,除非您另有说明,否则它们显然默认保持 IGMP 侦听。瞧——我们的负载均衡器进入了裂脑状态,造成了各种温暖的模糊乐趣。

  • 如果我在负载均衡器执行多播的 VLAN 上禁用 IGMP 侦听,则不会发生任何事情,多播仍然无效
  • 如果我在我们的核心上设置 IP PIM,PowerConnect 交换机会在同一个 VLAN 上看到它,但仍然没有多播流量
  • 如果我启用所有未注册的多播流量的泛洪,它仍然什么都不做。
  • 如果我在 PowerConnect 交换机上全局禁用 IGMP 侦听,则所有多播流量都有效。它工作得非常好,以至于我们将多播流量淹没到每个带有相同 VLAN 标记的端口。精彩的。

我注意到我们核心的 VLAN 上有一些奇怪的 MAC 地址条目:

coresw#sh mac address-table vlan 367 | include 5e00
 367    0000.5e00.0101    DYNAMIC     Po13   seq_no:0

我想……那不是多播地址吗?为什么这不在“sh mac 地址表多播”中?

coresw#sh mac address-table multicast vlan 367
Vlan    Mac Address       Type        Ports
----    -----------       ----        -----
coresw#

然后我在 PowerConnect CLI 指南中读到了这个:

多播流量是发往主机组的流量。主机组由目标 MAC 地址标识,即范围 01:00:5e:00:00:00-01:00:5e:7f:ff:ff:ff 用于 IPv4 多播流量或 33:33:xx:xx :xx:xx 用于 IPv6 多播流量。

似乎我们在 MAC 地址的开头缺少一个“01”,不是吗?上面的动态 MAC 条目以“00”开头。在这一点上,我正在考虑致电 KEMP,并让他们知道他们的产品配置严重错误。但后来我去阅读了 VRRP 的 RFC - 看哪:

与虚拟路由器关联的虚拟路由器 MAC 地址是以下格式的 IEEE 802 MAC 地址:

IPv4 案例:00-00-5E-00-01-{VRID}(十六进制,互联网标准位顺序)

好的 - 所以交换机通常不会为 VRRP 选择多播 mac 地址范围。好的,让我们在戴尔交换机上配置一个静态主机组。不。

无效输入:多播 MAC 地址必须为 01XX:XXXX:XXXX 格式

OK然后..下一步,尝试添加一个静态mac条目:

osl-sys-swrack03(config)#mac address-table multicast ?

forbidden                forbid adding specific multicast addresses to
                         specific ports.

osl-sys-swrack03(config)#

所以 - 无法配置静态多播 MAC 条目。如果我尝试对常规静态 MAC 条目执行相同操作,则只能将其绑定到一个端口 - 此负载平衡集群跨 4 个不同的 10gig 端口运行。

更新:关于 MAC 地址似乎有些混乱。172.30.1.0/24 是前置负载均衡器网络。172.30.1.6 是集群的默认共享 VIP,.7 是第一个负载均衡器的管理 IP,.8 是第二个负载均衡器的管理 IP。所有其他地址(30、40、70、80 等)都是具有不同服务的 VIP。当发生故障转移时,所有 VIP 将其 MAC 地址更改为第二个 LB 的物理 MAC 地址。底表中的组播地址不会改变。

coresw#sh ip arp vlan 367
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.30.1.6             78   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.40           204   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.80           167   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.70            38   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.66            12   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.35           185   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.60            97   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.30            80   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.61            33   0050.56b4.5004  ARPA   Vlan367    <- VIP - Loadbalancer1 physical MAC
Internet  172.30.1.7             27   0050.56b4.5004  ARPA   Vlan367    <- Management - Loadbalancer1 physical MAC
Internet  172.30.1.8             21   0050.56b4.08c2  ARPA   Vlan367    <- Management - Loadbalancer2 physical MAC

osl-sys-coresw#sh mac address-table dynamic vlan 367
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
 367    0000.5e00.0101    DYNAMIC     Po13   seq_no:0   <- multicast HA mac (UCARP)
 367    0050.56b4.08c2    DYNAMIC     Po13   seq_no:0   <- Loadbalancer1 physical MAC
 367    0050.56b4.5004    DYNAMIC     Po13   seq_no:0   <- Loadbalancer2 physical MAC

这就是故事。我到底要怎么办?

2个回答

我能够解决这个问题。在 Kemp(带有 HA 对)上,您可以选择使用“虚拟 MAC 地址”。如果未选中此框,则负载平衡器 VIP 的 MAC 是活动 Kemp 单元的物理接口的 MAC。如果选中此框,则 VIP 的 MAC 地址是 VRRP MAC。如上所述,VRRP RFC 指出 MAC 为“00:00”{blah},最后一个八位字节是路由器 ID。默认的 Kemp HA [路由器] ID 是 01。在我使用固件 5.1.xx 的 Powerconnects 上,我没有使用 VRRP,但我运行了一些跟踪并确定如果路由器 ID 与自身相同,Powerconnect 将丢弃 VRRP 帧。即使未配置 VRRP,他们也会这样做,并且在该模式下,他们默认为 01。因此,将 Kemp HA 路由器 ID 更改为 22 (0x16) 之类的内容会导致一切正常。

您要查找的多播地址是 224.0.0.18 [mac: 01005e.000012]。这是所有 VRRP 节点的控制通道。[编辑] 除非 KEMP 更改代码,否则 CARP (UCARP) 会使用 VRRP 单播 MAC [00005e.0001xx] 发起流量——这就是交换机自然会学习它的地方。

如果您在网络上没有查询器(大概在每个网段中),那么您的交换机最终会忘记哪些组在哪里——除非被要求,否则主机不会发送定期成员资格。[编辑:根据配置,交换机可能会丢弃未知多播,而不是泛洪。] 这可以是一个专用查询器(它发送数据包,它不关心任何答案),或者更常见的是基础设施中的多播路由器. 在这种简单的情况下,只需要一个查询器,因为 VRRP 消息无论如何都被禁止跨段。

我不熟悉戴尔交换机,所以我不知道您需要什么 cli 命令。

[更新]

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
367    0000.5e00.0101    DYNAMIC     Po13   seq_no:0   <- multicast HA mac (UCARP)

那不是多播mac。这是多播流量的单播 MAC组播 mac 不会出现在 mac 地址表中。那是在多播组表中。Cisco IOS 具有show mac-address-table multicast(在我的路由器上未显示任何内容)和show ip igmp groups(显示 3 个组)。该路由器设置为 pim 稀疏模式;北电和思科交换机将其视为查询器。

KEMP 方法存在严重缺陷,因为它使用主机 NIC MAC 作为虚拟地址。在您的情况下,5004 属于网卡。当 5004 消失时,每个人的表中仍然会有“IP:6 == MAC:5004”;他们将继续尝试与死主机对话,直到该条目被替换。KEMP 显然是在赌 gratuitous-arp 被网络中的一切所尊重。出于这个原因,HSRP、VRRPOpenBSD 设计的 CARP使用虚拟 MAC。(他们似乎未能破解 UCARP 在传输多播流量时使用 nic mac 而不是 VRRP 虚拟 mac。)

鉴于他们对 UCARP 的攻击,你确定它甚至使用多播吗?