更新

更新

我有两个相同的可信虚拟机,为 eth1 配置了 dhcp。我安装了 mgen 并配置了 mgen 脚本,让这两个虚拟机每秒交换 1 条多播消息,持续 360 秒。一个虚拟机在 260 秒后停止接收数据包(IGMP 侦听组超时)。第二个虚拟机在整个期间内继续接收消息。

如果我使用相同的 CentOS 6.5 VM,我会遇到同样的问题。

为什么其中一个能工作?为什么另一个会超时并且永远无法恢复?

设置;

  • 通过 havana 仪表板,我创建了一个子网为 10.16.1/24 的网络,禁用了网关,启用了 dhcp,范围为 10.16.1.100,10.16.1.120。

  • 启动了 2 个可信实例,每个实例都有两个 NICS;eth0 用于我的常规公共接口,eth1 用于 10.16.1/24 子网。

  • 登录到每个虚拟机并创建 eth1.cfg,配置为 dhcp

    auto eth1 iface eth1 inet dhcp

  • 每个虚拟机上的 ifup eth1

  • 在每个虚拟机上安装 mgen

  • 用此 mgen 脚本配置一个虚拟机

    0.0 JOIN 224.225.1.104 INTERFACE eth1 0.0 LISTEN UDP 5104 10.0 ON 1 UDP SRC 5002 DST 224.225.1.103/5103 PERIODIC [1 512] 370.0 LEAVE 224.225.1.104 370.0 OFF 1

  • 使用免费脚本配置另一台虚拟机

    0.0 JOIN 224.225.1.103 INTERFACE eth1 0.0 LISTEN UDP 5103 10.0 ON 1 UDP SRC 5002 DST 224.225.1.104/5104 PERIODIC [1 512] 370.0 LEAVE 224.225.1.103 350.0 OFF 1

  • 在每个虚拟机上设置路由

    ip route add 224.225.1/24 dev eth1

  • 同时在每个虚拟机上运行脚本

    mgen input mcast.mgn

当 mgen 运行时,它会打印出从另一个 VM 收到的消息。一个 VM 达到 260 秒,然后停止接收;

18:50:35.414601 RECV proto>UDP flow 1 seq 251 src 10.16.1.103/5002 dst 224.225.1.103/5103 sent 18:50:35.304360 size 512 
18:52:04.672731 OFF flow 1 srcPort 5002 dst 224.225.1.104/5104

另一个按预期完成;

18:52:04.563455 RECV proto UDP flow 1 seq 341 src 10.16.1.104/5002 dst 224.225.1.104/5104 sent 18:52:04.672341 size 512 
18:52:05.305505 OFF flow 1 srcPort 5002 dst 224.225.1.103/5103

是什么赋予了?

更新

在成功的 VM 上使用 wireshark 显示以下 IGMP 流量。

在成功的 VM 上进行 wireshark 捕获

请注意,成功的 VM 使用 IGMPv2,而失败的 VM 使用 IGMPv3。我不明白这一点,因为 VM 的创建方式相同 - 相同的基础映像 - 相同的配置命令 - 等等。

此外,还从发生故障的虚拟机执行了 wireshark 捕获。有趣的是,它没有捕获任何 IGMPv2 数据包。这可能解释了为什么它从不响应成员资格查询。

根据这个帖子,IGMPv3 应该向后兼容 v2。但是,我确实使用此信息强制故障 VM 也使用 IGMPv2,并执行了另一次 wireshark 捕获。结果是故障 VM 仍然没有收到 IGMP 成员资格查询。

答案1

可能是复制粘贴错误,但您发布的路由添加语句可能有错误。整个多播范围的路由是:224.0.0.0/4

您发布的路线声明也可以工作,但是声明的第一个八位字节是错误的(您有 225 而不是 224)。

答案2

需要添加防火墙规则以允许 IGMP 进入虚拟机。

在 Havana/Horizo​​n Access & Security 中,编辑默认规则并添加新规则;

  • 规则:其他协议
  • 方向:入口
  • IP 协议:2
  • 远程:CIDR
  • CIDR: 0.0.0.0/0

相关内容