我有两个相同的可信虚拟机,为 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 使用 IGMPv2,而失败的 VM 使用 IGMPv3。我不明白这一点,因为 VM 的创建方式相同 - 相同的基础映像 - 相同的配置命令 - 等等。
此外,还从发生故障的虚拟机执行了 wireshark 捕获。有趣的是,它没有捕获任何 IGMPv2 数据包。这可能解释了为什么它从不响应成员资格查询。
根据这个帖子,IGMPv3 应该向后兼容 v2。但是,我确实使用此信息强制故障 VM 也使用 IGMPv2,并执行了另一次 wireshark 捕获。结果是故障 VM 仍然没有收到 IGMP 成员资格查询。
答案1
可能是复制粘贴错误,但您发布的路由添加语句可能有错误。整个多播范围的路由是:224.0.0.0/4
您发布的路线声明也可以工作,但是声明的第一个八位字节是错误的(您有 225 而不是 224)。
答案2
需要添加防火墙规则以允许 IGMP 进入虚拟机。
在 Havana/Horizon Access & Security 中,编辑默认规则并添加新规则;
- 规则:其他协议
- 方向:入口
- IP 协议:2
- 远程:CIDR
- CIDR: 0.0.0.0/0