我正在尝试从具有四个网络接口的 Red Hat 计算机订阅多播组,每个接口位于不同的子网。只有当我将多播套接字绑定到网关与配置的默认网关匹配的网络接口上时,它才有效。
我的路线表(“route”命令的输出):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.37.0 * 255.255.255.0 U 0 0 0 eth2
10.1.39.0 * 255.255.255.0 U 0 0 0 eth3
10.1.38.0 * 255.255.255.0 U 0 0 0 eth1
10.1.33.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth3
link-local * 255.255.0.0 U 1003 0 0 eth0
link-local * 255.255.0.0 U 1004 0 0 eth1
link-local * 255.255.0.0 U 1005 0 0 eth2
default 10.1.33.1 0.0.0.0 UG 0 0 0 eth0
每个子网都有一个配置为网关的防火墙(在每个 ifcfg-ethX 配置文件上),在所有接口上它都有该子网上的 *.1 地址。
以下是我使用 Wireshark 进行的研究:
如果我在 eth0 上绑定套接字,操作系统将发送多播加入数据包,以太网层上的 Dst 字段设置为 01:00:5e:02:02:11(多播 MAC 地址)。防火墙接受该数据包并开始为该多播组中继数据包。
如果我在 eth2 上绑定套接字,操作系统将发送多播加入数据包,以太网层上的 Dst 字段设置为 84:b8:02:d2:cd:88,即防火墙的物理 MAC 地址。防火墙会丢弃该数据包,因为它没有有效的多播 MAC 地址。
如果我将默认网关更改为 10.1.37.1,则多播将开始在 eth2 上工作,但不在 eth0 上工作。
我的配置是否错误?有没有办法让不同的多播组同时在不同的网络接口上工作?