![igmpproxy 不在接口之间路由 SSDP](https://linux22.com/image/221044/igmpproxy%20%E4%B8%8D%E5%9C%A8%E6%8E%A5%E5%8F%A3%E4%B9%8B%E9%97%B4%E8%B7%AF%E7%94%B1%20SSDP.png)
我有 hostapd 在隔离和桥接模式下的两个无线设备上运行:wlp1s0
位于网桥后面wan
和wlp5s0
位于网桥后面iot
。每个桥的确切配置如所描述的那样这里。wan
有子网192.168.2.0/24
n 和iot
子网192.168.3.0/24
。
我正在尝试设置从wan
到 的SSDP 转发,以便我可以使用 上的控制器iot
连接到 Sonos 播放器。我正在跟进iot
wan
本指南。请注意,它是在考虑两个不同的 VLAN 的情况下编写的,但我认为同样的方法应该适用于两个不同的网桥。
因此,我使用以下配置设置了 igmpproxy 实例
phyint wan upstream ratelimit 0 threshold 1
phyint iot downstream ratelimit 0 threshold 1
出于测试目的,我在防火墙上的两个网桥之间完全禁用了数据包过滤。
我希望这个设置足够了,但是 上的控制器wan
看不到 上的玩家iot
。玩家确实正确注册到 IGMP 代理(192.168.3.29
是玩家之一):
igmpproxy[13948]: SENT Membership query from 192.168.3.1 to 224.0.0.1
...
igmpproxy[13948]: RECV V2 member report from 192.168.3.29 to 239.255.255.250
igmpproxy[13948]: Should insert group 239.255.255.250 (from: 192.168.3.29) to route table. Vif Ix : 1
igmpproxy[13948]: Updated route entry for 239.255.255.250 on VIF #1
我可以使用 TCP 转储检查控制器确实发送 SSDP 数据包(192.168.2.67
是控制器):
> tcpdump -i wan port 1900
...
16:16:07.600003 IP 192.168.2.67.49628 > 239.255.255.250.ssdp: UDP, length 202
16:16:07.600003 IP 192.168.2.67.49628 > 255.255.255.255.ssdp: UDP, length 202
...
igmpproxy 似乎正确接收了这些:
igmpproxy[13948]: Vif bits : 0x00000002
igmpproxy[13948]: Setting TTL for Vif 1 to 1
igmpproxy[13948]: Adding MFC: 192.168.2.67 -> 239.255.255.250, InpVIf: 2
...
igmpproxy[13948]: Current routing table (Insert Route):
igmpproxy[13948]: -----------------------------------------------------
igmpproxy[13948]: #0: Src0: 192.168.2.67, Dst: 239.255.255.250, Age:2, St: A, OutVifs: 0x00000002, dHosts
igmpproxy[13948]: -----------------------------------------------------
但我没有看到这些数据包通过 tcpdump 转发。我期望一些数据包的iot
目的地是注册多播的IP 239.255.255.250
(特别是sonos播放器)。因此我认为这就是导致发现失败的原因。
为什么我看不到 SSDP 数据包被转发?我应该如何更改 Sonos 控制器才能通过 SSDP 发现播放器?
答案1
问题实际上出在防火墙方面。
我只在桥接层禁用了数据包过滤,因为我的理解这个答案网桥之间的流量仅通过防火墙的网桥层。但似乎如果两个网桥不同,那么流量仍然通过 IP 层,这是有道理的。
因此,解决方案是在 IP 系列的转发挂钩中(而不是在网桥系列中)打开两个网桥之间的必要端口。