私はUDPマルチキャストデータを購読するためにCentOS 6.3サーバーを使用していますが、私のサーバーが接続されたスイッチから送信された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
rp_filter
このインターフェイスでは無効になっています。
[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth1.371/rp_filter
0
答え1
同じ症状が現れます。カーネルは明らかに無視します。IGMPグループメンバーシップクエリスレーブルーター - CentOS 5サーバーにあります。問題を「デフォルトで拒否」ファイアウォール構成に配置しました。
あなたはおそらく私のようにファイアウォールを実装するときにIGMPについて考えたことがないでしょう。 CentOSsystem-config-firewall
ツールは、IGMPパケットに対するファイアウォールの応答を設定する方法を提供するだけでなく、IGMPについても尋ねません。
問題は、明示的に許可されていないすべてを拒否するようにファイアウォールを構成すると、ファイアウォールがLANゲートウェイルーターおよび/またはLANゲートウェイルーターおよび/またはトラフィックをブロックすることです。IGMP認識スイッチ。カーネルはこれらのパケットを見るためにファイアウォールをバイパスすることはできないので、ファイアウォールを通過しないと応答しません。したがって、しばらくすると、スイッチ/ルーターはネットワーク回線の誰もがこのマルチキャストストリームを聞いていないと判断し、その回線への配信を停止します。
/etc/sysconfig/iptables
この問題を解決するには、ファイルの中間、上部の定義とREJECT
下部の規則の間に次の行を追加する必要があります。
-A INPUT -p igmp -j ACCEPT
これは、すべてのIGMPパケットが制限なく許可されることを意味します。
service iptables restart
新しいルールを適用することについて話してください。
私の解決策が動作しているかどうかをテストする簡単な方法は、service iptables stop
IGMPが突然正常に動作し始めていることを伝えて確認することです。明らかに、これは一時的にファイアウォールを削除しても重大なセキュリティリスクが発生しない平和なネットワークでのみ実行できます。