いいですね。マルチキャストトラフィックからデータを取得する必要があるユーザースペースアプリケーションがありますが、カーネルスペースからアプリケーションがデータを利用できるユーザースペースにトラフィックをインポートできないようです。 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))
)にメンバーシップを取得しようとするとエラーメッセージが表示されます。
グループに参加できる場合は、この要件が満たされています。
ソフトウェアでマルチキャストポートを設定するために特別に書かれたコードはありますか?