使用 smcroute 的路由器在一段时间后停止路由多播

使用 smcroute 的路由器在一段时间后停止路由多播

我在“从头开始”(Debian,不是 LFS ;))Linux 路由器/防火墙上遇到了多播路由问题。我在家里设置了一个用户网络和一个服务器网络。两者之间是一个路由器/防火墙(APU2E4 板),除其他功能外,它还应将媒体数据(UPnP)从媒体服务器(Proxmox VE 服务器上的容器)路由到客户端。我为此使用了 smcroute。几个月来,它一直运行良好 - 但它却时不时地停止工作(没有更改任何配置)。(我之前遇到过两三次类似的问题,但只需重新启动防火墙就可以“解决”它们。)

启动 smcroute 一段时间后,tcpdump 在防火墙 ( ) 上不再检测到任何预期的多播数据包tcpdump -i enp1s0 host 239.255.255.250 and port 1900。在此之前,数据包确实会从该接口进入。(我还检查了其他接口,但也没有找到这样的数据包 - UPnP。但这是预期的行为,因为客户端应该并且只能连接到 enp1s0。)

有问题的数据包的 TTL 大于 1(在客户端主机上检查)。如果此类数据包的值为 1,我甚至让路由器上的 iptables 增加 TTL。

当 enp1s0 上似乎不再有数据包进入时,ip maddress 仍然会将该接口列为该组的成员:

    2:  enp1s0
        link  33:33:00:00:00:01
        link  01:00:5e:00:00:01
        link  33:33:ff:54:2b:98
        link  01:00:5e:7f:ff:fa
        inet  239.255.255.250
        inet  224.0.0.1
        inet6 ff02::1:ff54:2b98 users 2
        inet6 ff02::1
        inet6 ff01::1

ip mroute不再列出(动态设置的)路线:

前:

root@gw-srv:~# ip mroute
(10.0.0.20,239.255.255.250)      Iif: enp2s0     Oifs: enp1s0  State:
resolved
(192.168.0.20,239.255.255.250)   Iif: enp1s0     Oifs: enp2s0  State:
resolved
(192.168.0.2,239.255.255.250)    Iif: enp1s0     Oifs: enp2s0  State:
resolved
(192.168.0.1,239.255.255.250)    Iif: enp1s0     Oifs: enp2s0  State:
resolved

后:

root@gw-srv:~# ip mroute
(10.0.0.20,239.255.255.250)      Iif: enp2s0     Oifs: enp1s0  State:
resolved

当我在 smcroute.conf 中指定源地址(如 192.168.0.2)时,相应的路由不会“消失”(10.0.0.20 是另一个子网上的媒体服务器)。但问题仍然存在。

我还使用路由器上的 iperf 测试了两个主机之间的多播是否有效:

路由器:iperf -s -u -B 239.255.255.250 -i 1

客户:iperf -c 239.255.255.250 -u -T 32 -t 3 -i 1

smcroute 刚启动时,服务器会接收数据包。几分钟后,没有任何数据包进入(直到我重新启动 smcroute 或手动离开多播组)。当我使用任何其他多播地址(例如 239.255.255.249)时,数据包确实会到达防火墙(iperf 服务器)。当 smcroute 根本没有运行时,问题不会发生(使用 239.255.255.250)。

总而言之,在我看来,当几分钟后建立多播路由时,路由器根本无法再接收到相应地址的多播流量。

你能理解这一点吗?到目前为止,我找不到有关此类问题的提示。

非常感谢您的建议。

相关内容