iptablesを使用して2つの異なるLAN間でマルチキャストトラフィックを転送する方法は?

iptablesを使用して2つの異なるLAN間でマルチキャストトラフィックを転送する方法は?

ターゲット:

lmcが必要「ランメッセンジャー」iptablesを使用して、Linuxゲートウェイに分離された2つのLANで作業します。

情報:

  • 「LANメッセンジャー」プログラムでなければなりません。
  • Lmcはマルチキャストアドレス239.255.100.100:50000を使用してユーザーを確認し、チャット用のTCP接続を作成します。
  • lan1 = olan1 = 192.168.2.0/24: ゲートウェイはスマートスイッチ「Linksys Etherfast Router」で、フィルタマルチキャストは無効になります。
  • lan2 = slan1 = 10.10.10.0/24: ゲートウェイは Linux ボックスです。
  • ゲートウェイPC = Ubuntu 14サーバー。 iptablesはLAN間でいくつかのトラフィックを転送します。

IPtableルール:

フィルタテーブル:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i slan1 -o olan1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m iprange --src-range 192.168.2.100-192.168.2.254 -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 9696 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p igmp -j ACCEPT
-A FORWARD -i olan1 -o slan1 -j DROP

NATテーブル:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -j MASQUERAD

私の考えにマルチキャストトラフィックを転送する必要がある規則は次のとおりです。

-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p igmp -j ACCEPT

tcpdumpを使用してゲートウェイへのトラフィックを監視する場合、iptableルールを変更してもマルチキャストトラフィックはまったく表示されません。

iptablesはマルチキャストトラフィックを転送しますか?わかりますか?

pimdマルチキャストルーティングデーモンまたはプロキシ(たとえば、または)を使用する必要がありますかsmcroute

ベストアンサー1

smcroute2つのネットワークネームスペースと2つのペアを使用してテストvethしました。設定:

ns1         <-- main namespace -->    ns2
10.0.0.1 -- 10.0.0.254  10.0.1.254 -- 10.0.1.1
veth0b      veth0a          veth1a    veth1b

Debiansmcrouteパッケージはバージョン2.0.0で、仮想ethをサポートしていないようで、次からバージョン2.3.1をインストールしました。smcrouteホームページ。これマルチキャストルーティングガイドまた、非常に役立ちますsmcroute

私はこのssmpingパッケージを使ってマルチキャストをテストします。 ns1からpingを送信ssmpingd中にns2で実行されています。ssmping -4 -I veth0b 10.0.1.1これはグループを使用するソース固有のマルチキャスト(SSM)であり、232.43.211.234ASM(すべてのソースマルチキャスト)をテストするためにも使用できますasmping。 LANメッセンジャーが何を使用しているのかわかりません。

ユニキャスト ping 要求を許可するために、デフォルトの名前空間で転送を有効にしてから実行しました。

smcroutectl add veth1a 10.0.1.1 232.43.211.234 veth0a

みんな大丈夫です。smcroutectl joinスイッチがマルチキャストを正しく配信する必要があることをスイッチに通知する必要があるかもしれませんが、設定に合わせて調整すると機能することが期待されます。すべての関連インターフェイスのマルチターミナルウィンドウは、tcpdumpデバッグに非常に役立ちます。

次の情報が面白かったです。

マルチキャストパスを設定するには、プログラムをカーネルのマルチキャストルーティングソケットに接続する必要があり、ソケットが閉じると(UNIXプログラムが終了すると自動的に実行されます)、カーネルはすべてのパスを消去します。

これは、カーネルのマルチキャストルーティング機能を使用する場合〜しなければならないコマンドラインツールの代わりに悪魔を使用してください。

静的ルーティングと動的ルーティングの場合は、次のことを意味します。

smcrouteの目的は、ダイナミックマルチキャストルーティングが正しく機能しない状況を支援することです。ただし、ダイナミックマルチキャストルーティングプロトコルは、ほとんどすべての場合に好ましいソリューションです。その理由は、レイヤ3信号をレイヤ2信号に変換したり、その逆に変換したりすることができるためです(IGMPまたはMLD)。

最後に、LANメッセンジャーによって生成されたTTLに細心の注意を払ってください。マルチキャストに関するよくある質問最後に。

おすすめ記事