Lau*_*ent 5 centos multicast udp
我正在使用 CentOS 6.3 服务器订阅 UDP 多播数据,并且我注意到我的服务器不响应它所连接的交换机发送的 IGMP 查询。
结果,当我打开我的多播套接字时,我开始接收多播数据,但是当我的 IGMP 订阅超时时,这会停止。服务器不会更新其 IGMP 订阅,因此交换机会切断多播流。
(为了确保问题不是来自我的任何代码,我使用smcroute打开多播订阅。)
这是我服务器任何接口上 IGMP 通信的屏幕截图:
http://img521.imageshack.us/img521/9953/capture10y.png
正如我们所看到的,我的服务器首先发送了 2 个 IGMP 加入,但是几分钟后,当交换机发送 IGMP 组成员资格查询时,内核没有回答。
为受影响的接口设置的 IGMP 协议版本为 V2:
[root@localhost ~]# cat /proc/net/igmp
Idx Device : Count Querier Group Users Timer Reporter
1 lo : 0 V2
010000E0 1 0:00000000 0
2 eth0 : 5 V2
FB0000E0 1 0:00000000 1
010000E0 1 0:00000000 0
5 tap0 : 5 V3
FB0000E0 1 0:00000000 0
010000E0 1 0:00000000 0
7 eth1.371: 13 V2
414000E0 1 0:00000000 1
404000E0 1 0:00000000 1
3F4000E0 1 0:00000000 1
504000E0 1 0:00000000 1
524000E0 1 0:00000000 1
494000E0 1 0:00000000 1
4A4000E0 1 0:00000000 1
4B4000E0 1 0:00000000 1
FB0000E0 1 0:00000000 0
010000E0 1 0:00000000 0
Run Code Online (Sandbox Code Playgroud)
在rp_filter此接口上禁用:
[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth1.371/rp_filter
0
Run Code Online (Sandbox Code Playgroud)
我在 CentOS 5 服务器上看到了相同的症状 - 内核显然忽略了来自路由器的IGMP 组成员资格查询。我将问题归结为“默认拒绝”防火墙配置。
您和我一样,在实施防火墙时可能没有坐下来考虑 IGMP。CentOSsystem-config-firewall工具甚至不会询问 IGMP,更不用说为您提供配置防火墙对 IGMP 数据包的响应的方法。
问题是这样的:如果您将防火墙配置为拒绝所有未明确允许的内容,则防火墙将阻止来自 LAN 网关路由器和/或IGMP 感知交换机的入站 IGMP 组成员资格查询。内核无法绕过防火墙查看这些数据包,因此如果您不让它们通过,它永远不会响应它们。因此,在一段时间后,交换机/路由器决定您的网络线路上没有人正在侦听此多播流,因此它会停止转发到该线路。
要修复此问题,您需要将以下行添加到/etc/sysconfig/iptables文件中,位于文件中间的某个位置,位于顶部的定义和REJECT底部的规则之间:
-A INPUT -p igmp -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这表示允许所有 IGMP 数据包,不受限制。
说service iptables restart让新规则生效。
测试我的解决方案是否适合您的快速方法是说service iptables stop,并查看 IGMP 是否突然开始正常工作。显然,您只能在和平的网络上执行此操作,在这种情况下,暂时删除防火墙不会造成严重的安全风险。
| 归档时间: |
|
| 查看次数: |
3433 次 |
| 最近记录: |