web-dev-qa-db-ja.com

ブラインド送信者用にRHEL / CentOSでマルチキャストルートを作成する必要がありますか?

CentOS 5システムは、マルチキャストトラフィックのルートがすぐに使用できるようには見えません。それがすることが行うように見えるのは、構成されている場合、デフォルトのルートを使用することです。つまり、次のようなルーティングテーブルです。

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.42.128.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         10.42.128.1     0.0.0.0         UG        0 0          0 eth0

私のJavaベースのマルチキャストクライアントアプリケーション(または以下のテストケース)で動作します。これは、サイトローカルマルチキャストアドレスに送信できることを期待しています。

この設定は機能します。デフォルトルートがない場合、例:.

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.42.128.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

my Javaアプリケーションは送信しようとすると失敗します。マルチキャストルートを追加することでこれを修正できます。

# route add -net 224.0.0.0/4 via eth0

上記を永続的に行うには:

# echo 224.0.0.0/4 via eth0 >>/etc/sysconfig/network-scripts/route-eth0

とにかくこのルートを作成する必要がありますか?デフォルトルートがなくなった場合に機能を停止するという事実以外に、デフォルトルートにマルチキャストトラフィックを処理させることに害はありますか?


これは、javac Sender.Java; Java Senderを実行することで実行できる短いテストケースです。 0バイトのUDPパケットをサイトローカルアドレス239.192.0.1に送信します。デフォルトルートが設定されていない場合、失敗します

Exception in thread "main" Java.io.IOException: Network is unreachable
        at Java.net.PlainDatagramSocketImpl.send(Native Method)
        at Java.net.DatagramSocket.send(DatagramSocket.Java:629)
        at Sender.main(MulticastSender.Java:7)

ただし、デフォルトルート(または上記のマルチキャストルート)が存在する場合は、パケットを239.192.0.1に正常に送信します。

Sender.Java

import Java.net.*;

class Sender {
    public static void main(String[] args) throws Throwable {
        MulticastSocket socket = new MulticastSocket();
        InetAddress groupAddress = InetAddress.getByName("239.192.0.1");
        socket.send(new DatagramPacket(new byte[0], 0, groupAddress, 9999));
    }
}
3
zigg

この問題を解決するために、2つのシステム間に仮想ネットワークを作成しました。 224.0.0.0/4ルートが必要かどうかの答えは、アプリケーションとネットワーク構成によって異なります。

これらの回答は、ブラインド送信者である私のアプリケーションに有効です。トラフィックの受信には関心がないため、マルチキャストグループには参加しません。送信先のグループに参加している他のシステムにのみ送信します。したがって、特定のマルチキャストグループに参加するための要件を評価しませんでした。

シナリオは次のとおりです。

  1. アプリケーションは、送信する前にソケットを特定のインターフェースに設定します(たとえば、Javaの setNetworkInterface メソッドを使用)。これには、224.0.0.0/4ネットワークのルーティングテーブルカバレッジは必要ありません。マルチキャストパケットは、バインドされたインターフェイスで送信されます。

  2. アプリケーションは送信前にソケットを特定のインターフェースに設定せず、デフォルトルートが存在します。マルチキャストパケットは、デフォルトルートで指定されたインターフェイスで送信されます。

  3. アプリケーションは送信前にソケットを特定のインターフェイスに設定せず、デフォルトルートは存在しませんが、ルーティングテーブルにはマルチキャストグループアドレスのカバレッジがあります。マルチキャストパケットは、マルチキャストグループアドレスをカバーするルートで指定されたインターフェイスで送信されます。

  4. アプリケーションは送信前にソケットを特定のインターフェイスに設定せず、マルチキャストグループアドレスをカバーするルートが存在しません。アプリケーションは「ホストへのルートがありません」で失敗します。

  5. ボーナスシナリオ:アプリケーションはソケットを特定のインターフェイスに設定せず、1つのインターフェイスのデフォルトルートと別のインターフェースが存在し、後者はマルチキャストグループアドレスをカバーします。マルチキャストパケットは後者のインターフェースで送信されます。

答えは、アプリケーションが送信するインターフェイスを選択しない場合、マルチキャストルートが実際に必要であるということのようです。また、後から見ると意味のあるデフォルトルートも優先します。ルートのインターフェース部分のみが使用されているように見えます。

0
zigg

通常、マルチキャストルートを設定する必要はありません。必要ありません。

netstat -gn 公演?結合は、デフォルトで最小番号のインターフェースeth0から出て行く必要があります。

私がメモした手順を参照してください: マルチキャストはRHEL 5.5で動作していないようです

0
ewwhite

ホストにマルチホームのルートを追加する必要があるだけです。

見る:

http://sourceforge.net/apps/trac/ganglia/wiki/Ganglia%203.1.x%20Installation%20and%20Configuration

それ以外の場合は、デフォルトのルートが正しいことを行います。

0
dmourati