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に細心の注意を払ってください。マルチキャストに関するよくある質問最後に。

答え2

まあ、それは次のようになりますiptables ホロこれは行く道ではありません。

Ubuntuリポジトリから試したりsmcrouteダウンロードしたりします。pimdこれまで、私はこれらのどれも機能させませんでした。

smcrouteを使用してください:


iptables

-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 -p igmp -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 PREROUTING -d 239.255.100.100/32 -j TTL --ttl-set 64

smcroute 2.3.1穴居人から。

次に抽出/opt

./configureデフォルトのオプションを使用してください。

構成ファイルは次の場所にあります。

/usr/local/etc/smcroute.conf

#phyint olan1 enable ttl-threshold 1
phyint olan1 enable ttl-threshold 5
phyint slan1 enable ttl-threshold 5
mgroup from olan1 group 239.255.100.100
mgroup from slan1 group 239.255.100.100
mroute from olan1 group 239.255.100.100 to slan1
mroute from slan1 group 239.255.100.100 to olan
  • ttl-threshold - これは最小しきい値ですか?
  • 私のパケットのTTLが1の場合、phyintはそれを無視するという意味ですか?もしかして5に変えました。

sudo smcrouted

sudo smcroutectl show groups

GROUP (S,G)                        INBOUND                                                                                                    
(*, 239.255.100.100)               slan1
(*, 239.255.100.100)               olan1

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND                                                                
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(10.10.10.154, 239.255.100.100)    slan1                  2      344  olan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.101, 239.255.100.100)    slan1                  1       32  olan1
(192.168.2.101, 239.255.100.100)   olan1                  1       32  slan1
(10.10.10.1, 239.255.100.100)      slan1                  2       64  olan1

まさにみんなではありません...

WinXPマルチホームコンピュータでは、ルーティングを変更する必要があります。

route add 224.0.0.0 mask 240.0.0.0 10.10.10.153

ネットワークカードのIPアドレスの代わりにインターフェイス番号を使用する必要があります...

  • インジケーターが1になります。 TTLの問題ですか...

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.153, 239.255.100.100)    slan1                  1       32  olan1

LAN Messenger 1.2.32 network preferences

  • 接続タイムアウト(秒) - 最大出力値
  • 最大再試行回数 - 最大出力値

Upstartを使用してUbuntu 14でsmcrouteをデーモンに設定する

/etc/init/smcroute.conf

# Upstart for custom compiled smcroute
## jc 2017 08 24
description "SMCRoute, a static multicast router"
author      "jc"
# Stanzas
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
# start on runlevel [2345]
start on (local-filesystems and net-device-up IFACE!=lo) or runlevel [2345]
# When to stop the service
#stop on runlevel [016]
stop on runlevel [!2345]
# Automatically restart process if crashed
expect fork
respawn
exec /usr/local/sbin/smcrouted -N -f /usr/local/etc/smcroute.conf -d 10 -l notice

すべてがうまくいくようです。ランダムな再起動、断続的なネットワークの中断、通常のタスクなど、しばらくの間タスクを実行します。

太陽

  • smcrouteをデーモンにする
  • 継続的なルートの作成
  • iptablesルールの確認...が必要です。
  • Win7コンピュータでサブネットを表示できるようにする

関連情報