第 8 章. 组播路由

FIXME: 编辑职位空缺!

Multicast-HOWTO(相对而言)已经很旧了,并且因此在某些地方可能不准确或具有误导性。

在进行任何组播路由之前,您需要配置 Linux 内核以支持您想要执行的组播路由类型。反过来,这需要您决定您希望使用的组播路由类型。基本上有四种“常见”类型 - DVMRP(RIP 单播协议的组播版本)、MOSPF(相同,但用于 OSPF)、PIM-SM(“协议无关组播 - 稀疏模式”,它假设任何组播组的用户都是分散的,而不是聚集的)和 PIM-DM(相同,但为“密集模式”,它假设同一组播组的用户将有大量的聚集)。

在 Linux 内核中,您会注意到这些选项没有出现。这是因为协议本身是由路由应用程序处理的,例如 Zebra、mrouted 或 pimd。但是,您仍然需要清楚地了解您将要使用哪种协议,以便在内核中选择正确的选项。

对于所有组播路由,您肯定需要启用“组播”和“组播路由”。对于 DVMRP 和 MOSPF,这已经足够了。如果您要使用 PIM,您还必须启用 PIMv1 或 PIMv2,具体取决于您连接的网络使用的是 PIM 协议的第 1 版还是第 2 版。

一旦您完成了所有这些设置,并编译了新的 Linux 内核,您将看到在启动时列出的 IP 协议现在包括 IGMP。这是一种用于管理组播组的协议。在撰写本文时,Linux 仅支持 IGMP 版本 1 和 2,尽管版本 3 确实存在并且已被记录在案。这对我们影响不大,因为 IGMPv3 仍然足够新,以至于 IGMPv3 的额外功能不会有太多用处。由于 IGMP 处理组,因此将仅使用整个组中最简单版本的 IGMP 中存在的功能。在大多数情况下,这将是 IGMPv2,尽管仍然会遇到 IGMPv1。

到目前为止,一切顺利。我们已经启用了组播。现在,我们必须告诉 Linux 内核实际用它做一些事情,这样我们就可以开始路由了。这意味着将组播虚拟网络添加到路由器表

ip route add 224.0.0.0/4 dev eth0

(当然,假设您正在通过 eth0 进行组播!为此,请替换您选择的设备。)

现在,告诉 Linux 转发数据包...

echo 1 > /proc/sys/net/ipv4/ip_forward

此时,您可能想知道这是否会起作用。因此,为了测试我们的连接,我们 ping 默认组 224.0.0.1,看看是否有任何主机处于活动状态。您局域网上所有启用组播的机器应该都会响应,但仅此而已。您会注意到,响应的机器都没有 IP 地址 224.0.0.1。多么令人惊讶!:) 这是一个组地址(对订阅者的“广播”),并且该组的所有成员都将使用他们自己的地址而不是组地址进行响应。

ping -c 2 224.0.0.1

此时,您已准备好进行实际的组播路由。当然,前提是您有两个网络需要进行路由。

(未完待续!)