アプリケーションはCentOS 7でマルチキャストパケットを受信できません。

アプリケーションはCentOS 7でマルチキャストパケットを受信できません。

VMwareゲストCentOS 7.2システムがあります。マルチキャストグループに参加し、予想したすべてのマルチキャストを表示しますが、私のアプリケーションではストリームのコンテンツを見ることはできません。 strace は select() システムコールを待っていることを示します。私は何を忘れましたか?

私がしたことは次のとおりです。

  • リモートホストでマルチキャスト送信者を起動します。
  • VMware ホストに CentOS 7.2 ゲストをビルドします。
  • ファイアウォールを停止して無効にし、yum erase filewalldゲストにいました。iptables -L示す:

-

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
  • 私は走る:socat UDP4-RECVFROM:65000,ip-add-membership=239.31.82.10:10.0.54.210,fork STDOUT
  • このコマンドの出力は表示されません。
  • netstat -gnマルチキャストグループに参加していることを示します。
  • selinuxが無効になっており、/etc/selinux/config以下が表示されますSELINUX=disabled。はい、設定して再起動しました。私も見ました:SELinux status: disabledfromsestatus
  • tcpdump -n -nn -i eth0 host 239.31.82.10この IP からインターフェイスに到着し、UDP ポート 65000 宛てのパケットを表示します。
  • 同じマルチキャストグループに参加している他のホストはデータを表示できます。
  • 今回はCentOS 6.4を使って別のVMゲストを構築しましたが、うまくいきました。マルチキャスト送信者の一般出力が表示されます。
  • CentOS 7.2を使って別のVMゲストを再構築しましたが、うまくいきました。しかし、今回は最小インストールを使用しています。

私の質問そうだまるでファイアウォールがパケットをブロックしているように見えますが、図のようにファイアウォールは有効になっていません。

動作していないホストと動作しているホストの間の顕著な違いの1つは、機能しないホストに2つのインターフェイスが設定されていることです。ただし、今回もマルチキャストグループに参加しているとマークし、インターフェイスに到着したパケットを表示します。また、2番目のインターフェイスを閉じましたが役に立ちません。

ありがとうございます。

答え1

あや!ことわざ、

働かないホストと働くホストの間の1つの重要な違いは...

…あそこに龍が横たわっているから!

あや!有名な仮説、

...しかし...

...これはすべての混乱の源であるからです!

問題は、Linuxのネットワークリバースパスフィルタリングにあります。問題は、パケットが1つのインターフェイスに入り、ルーティングテーブルから送信されたホストの送信者アドレスが別のインターフェイス(デフォルトのルータを持つインターフェイス)を通過する必要があることを発見することです。したがって、カーネルはパケットを自分のアプリケーションに送信するのではなく、パケットを破棄します。

どのインタフェースを使用すべきかをsocatに通知するため、IGMPレポートが送信されます。ルータとスイッチは、私が指示した場所に正確にアクセスできるようにマルチキャストを誠実に設定しました。最終的に不幸なのはカーネルです。

安価で安価な解決策はsysctlを使用してに変更することですがnet.ipv4.conf.all.rp_filter、注意しないと予期しない結果が生じる可能性があります(パケットが間違っている、不要なパケットが受信された、またはパケットが間違った方向に行く場合)。相互作用)。ルーティングテーブルが実行したい操作の現実を反映していることを確認するのが最善です。したがって、別の回避策は、特定のiface(つまり、ユーザーが持っている項目)のマルチキャスト送信者IP専用のソースまたはネットワークパスを設定することです。10/etc/sysconfig/network-scripts/route-ifaceeth1

関連情報