目標:
Iptablesを使用してLinuxゲートウェイによって分離された2つのLANで動作するには、lmcまたは "LAN Messenger" が必要です。
情報:
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はマルチキャストトラフィックを転送しますかic?
pimd
やsmcroute
などのマルチキャストルーティングデーモンまたはプロキシを使用する必要がありますか?
2つのネットワーク名前空間と2つのsmcroute
ペアで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
Debian smcroute
パッケージはバージョン2.0.0であり、仮想ethをサポートしていないようです。そのため、 smcrouteホームページ からバージョン2.3.1をインストールしました。 smcroute
の- マルチキャストルートhowto も非常に役立ちます。
ssmping
パッケージを使用してマルチキャストをテストしました。 ns1からssmping -4 -I veth0b 10.0.1.1
を使用してpingを実行しているときに、ns2でssmpingd
を実行しました。これらは、グループ232.43.211.234
を使用したソース固有のマルチキャスト(SSM)です。asmping
を使用して、任意のソースマルチキャスト(ASM)をテストすることもできます。 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に注意してください。最後にある マルチキャストFAQ を参照してください。
さて、iptables
aloneは進むべき道ではないようです。
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 troglobitから。
/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
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では、マルチホームPCはルートを変更する必要がありました:
route add 224.0.0.0 mask 240.0.0.0 10.10.10.153
nic ipアドレスの代わりにインターフェース番号を使用する必要があります...
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
Ubuntu 14でUpstartを使用して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
すべてが機能しているようです。ランダムな再起動と時々のネットワーク停止、通常のものでしばらくの間物事を実行させます。
[〜#〜] todo [〜#〜]