首页 > 解决方案 > linux会丢弃不在同一个子网中的多播数据包吗?

问题描述

想通过VXLAN组播搭建overlay网络,实现虚拟机之间的通信,但是发现组播包只能在同一个子网上传输。为了允许不在同一子网上的主机上的虚拟机进行通信,我正在考虑“捕获和转发数据包”是否可行。即在network1的hostA上抓取一个目的地址为239.1.1.1、端口为4789的UDP包,发给network2上的hostB,让hostB发送组播包。然后发现network2上的hosts都可以用wireshark抓到这个包,但是没有host对应。我想知道Linux是否有一种机制可以丢弃假的多播数据包?如果是这种情况,应该如何防止这种机制?

标签: linuxnetworkingmulticast

解决方案


未经处理,多播本质上是广播。对于 IPv4 多播,可以使用 IGMP 减轻广播效果。在具有半智能交换机的交换网络上,可能存在 IGMP 侦听功能以进一步帮助实现这一点。如果存在这种情况,终端设备必须通过为给定组发送 IGMP 加入来订阅多播组,以“取消过滤”向自身发送的流量。子网之间的路由多播可以通过 PIM 或 DVRMP 实现,甚至静态多播路由守护进程来完成。

此过滤的唯一例外是 224.0.0.x 范围,它保留用于链路本地通信,通常是 IETF 协议。绝不能以任何方式过滤到这些组的流量。

因此,为了防止过滤,终端设备要么加入组(推荐!),要么将流量发送到保留范围内的组,例如在 224.0.0.1 上的所有主机组。(这很丑陋,您可能会在 LAN 中的设备上触发丑陋的错误,但它确实有效。)


推荐阅读