我有三台运行 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