マルチキャストルーティングはユーザースペースには接続されません。

マルチキャストルーティングはユーザースペースには接続されません。

いいですね。マルチキャストトラフィックからデータを取得する必要があるユーザースペースアプリケーションがありますが、カーネルスペースからアプリケーションがデータを利用できるユーザースペースにトラフィックをインポートできないようです。 Redhatの場合、カーネルモジュールが欠落している可能性があるかどうか疑問に思います。以下に示すように、ユーザースペースへのパスを作成するためのすべての設定が完了したように見えますが、パスを作成すると実際には予想どおりにどのようなリンクも生成されません。

これまでに確認した内容は次のとおりです。

sysctl file
# Kernel sysctl configuration file for Red Hat Linux

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth2.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.icmp_echo_ignore_broadcasts = 0 #allow multicast through the kernel

したがって、私の言葉が正しい場合、カーネルはトラフィックをフィルタリングしないでください。ファイアウォールもオフになっていますが、INPUTチェーンを介したすべてのマルチキャストトラフィックを許可するようにiptableルールを変更しました。パスを生成するためにRoute-eth2ファイルを作成しました。

#create the persistent multicast route

224.0.0.0/4 via 0.0.0.0  dev eth2

また、マルチキャストトラフィックの宛先と送信元の間にルータがないため、ゲートウェイを0.0.0.0に設定しました。これが私がマルチキャストの経験を欠いている理由です。 eth2のソケットをポートに接続し、224.0.0.70のマルチキャストグループへのアクセスを要求するソフトウェアがあります。 (ちなみに、ソフトウェアは別のLinuxボックスで動作します。以前は動作しました。同じOSとすべてのデバイスでマルチキャストを使用します)を見たかったのですが、少なくとも今はそうではありません。この方法。プログラムを開く前のIP Route Showの内容。

10.50.100.0/24 dev eth2  proto kernel  scope link  src 10.50.100.3
192.168.11.0/24 dev eth3  proto kernel  scope link  src 192.168.11.3
//more stuff 
224.0.0.0/8 dev eth2
default via 149.97.48.3 dev eth0  proto static

プログラムを開いた後、ip maddrを見てみると、eth2に224.0.0.70が表示され、私が信じるグループにリクエストして参加したようですが、maddrでこれを見て、tcpdumpを使って私が正しいことを確認して確認しました。そのインターフェイスにマルチキャストトラフィックを送信すると、ユーザー側には何も表示されず、予想どおりにIPルートの表示に対する変更も表示されません。プログラムを開くと、IPルーティングが表示されます

224.0.0.0/8 dev eth2

また、興味深いのは、mroute、pimd、またはsmcrouteがないことです。私が見たものはかなり多く使われていましたが、Red Hat、特にRed Hat 6はそれをサポートしていないので、igmpが「考える」ことです。使用しようとしていますが、有効にせずにどのように使用できるかわかりません。 ifconfigを使って実行して確認しました。

もしそうなら、私のパスの作成に欠陥があるようです。または、パスをプログラムに接続するために必要なカーネルモジュールがインストールされていないようです。どんなアイデアや説明でもよろしくお願いします。ありがとうございます。

ベストアンサー1

私は実際にはネットワーキングの専門家ではありませんが、経験的にマルチキャストトラフィックを開始して実行するために必要なものは次のとおりです。

sudo route add -net XXX.0.0.0 netmask 255.0.0.0 IFACE

ここで、XXX はサブネット、IFACE はインターフェイスです。これがip route show前後の私の姿です。

今後:

default via 10.0.3.2 dev enp0s8 proto dhcp metric 109 
default via 192.168.14.1 dev enp0s3 proto dhcp metric 110 
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.15 metric 109 
169.254.0.0/16 dev enp0s8 scope link metric 1000 
192.168.14.0/24 dev enp0s3 proto kernel scope link src 192.168.14.146 metric 110 
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.102 metric 107

後ろに:

default via 10.0.3.2 dev enp0s8 proto dhcp metric 109 
default via 192.168.14.1 dev enp0s3 proto dhcp metric 110 
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.15 metric 109 
169.254.0.0/16 dev enp0s8 scope link metric 1000 
192.168.14.0/24 dev enp0s3 proto kernel scope link src 192.168.14.146 metric 110 
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.102 metric 107 
224.0.0.0/8 dev enp0s3 scope link 

また、pimd、smcroute、またはmrouteモジュールはインストールされていません。そのポートでトラフィックが予想される場合に転送できますsocat

これについて詳しく説明します... グループに参加する前に、プログラムでルーティングを正しく設定せず、マルチキャストを設定しないと、グループ(setsockopt( sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)))にメンバーシップを取得しようとするとエラーメッセージが表示されます。

グループに参加できる場合は、この要件が満たされています。

ソフトウェアでマルチキャストポートを設定するために特別に書かれたコードはありますか?

おすすめ記事