socat 从未收到过多播数据包

socat 从未收到过多播数据包

我有三台运行 Manjaro 的机器,其中两台运行正常,但第三台(Raspberry Pi)似乎没有将多播数据包传递给注册应用程序。

这类似于这个问题

在有问题的机器上,我运行了:

socat UDP4-RECVFROM:6666,ip-add-membership=224.1.0.1:192.168.1.71,fork EXEC:hostname

在一台正常工作的机器上,我运行了:

socat STDIO UDP4-DATAGRAM:224.1.0.1:6666,range=192.168.1.1/24

然后我输入了一些垃圾邮件并发送了出去。果然,问题机器没有反应。

在有问题的机器(接收器)上,我运行tcpdump

nate@flere-imsaho:~$ sudo tcpdump -i eth0 host 224.1.0.1
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes

13:48:20.632215 IP hassipura-plyn-frie.fios-router.home.56318 > 224.1.0.1.6666: UDP, length 5

而在正常工作的机器(发送方)上:

nate@hassipura-plyn-frie:~$ sudo tcpdump -i wlan0 host 224.1.0.1
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), snapshot length 262144 bytes

13:48:20.627910 IP hassipura-plyn-frie.56318 > 224.1.0.1.6666: UDP, length 5

两者都看到同时发送的数据包,但没有响应。当我从另一台正常工作的机器接收时,发送方显示接收方的响应。

当我在问题机器上运行:

strace socat UDP4-RECVFROM:6666,ip-add-membership=224.1.0.1:192.168.1.71,fork EXEC:hostname

我发现它挂在对接pselect收到数据包后永不返回的调用上。

这看起来像是某种内核问题,也许是驱动程序错误,但我不清楚如何继续诊断它。

答案1

使用 ip all 检查接口的 MULTICAST 标志是否设置;如果没有,请设置它:

ip link 设置 eth0 多播开启

但是,即使没有此标志,我的测试仍然成功。

或者您的 WiFi 路由器需要配置为多播。

答案2

事实证明这是防火墙配置错误。虽然这对我的随机端口和地址不起作用,但我最初是为 mdns 这样做的,我是这样启用它的:

firewall-cmd --zone public --add-service mdns --permanent
sudo systemctl restart firewalld

相关内容