Debian 4を実行している約40のノードのクラスタで作業しています。各ノードは、マルチキャストIP上に座ってリッスンするデーモンを実行します。Linuxでのマルチキャスト時のインタフェースの選択
私は、クラスタ内の各ノードがパケットを受信して応答するように、クラスタと同じスイッチ上のクライアントコンピュータでLAN経由でマルチキャストを送信するクライアントソフトウェアを作成しました。
LANインターフェイスとWANインターフェイスの両方を持つコンピュータでクライアントソフトウェアを実行している場合を除いて、これはうまく動作します。 WANインターフェイスがある場合、マルチキャストは機能しません。明らかに、私はマルチキャストがLAN(eth1)ではなくWANインターフェイス(eth0)に間違って行き来していると考えます。したがって、SO_BINDTODEVICEソケットオプションを使用してマルチキャストソケットでeth1を使用するようにしています。
しかし、私は、カーネルのルーティングテーブルが、LAN(eth1)が明らかにマルチキャストのコストの低い宛先であると判断する必要があると考えました。 eth1を使用するようにソケットを明示的に強制しなければならない理由はありますか?そして、特定のインタフェースがLANかWANかをアプリケーションが自動的に判断できるようにする方法(おそらくioctl呼び出し)がありますか?
いいえ、カーネルもソケットAPIも自動的にこれを処理しません。人々のプログラムソケットとして役立ついくつかのコードを投稿することができれば。基本的には、各インタフェースを検査し、インターネットでルーティング不可能なIPアドレスを使用しているかどうかを判断する方法があります。あるいは、すべてのインターフェイスを送信することもできます。 – BobbyShaftoe