iptablesでUDPユニキャストストリームを複製することは可能ですか?


8

ユニット#1(192.168.1.1)からユニット#2(.1.2)にudpビデオストリームを送信する独自​​のシステムがあります。このシステムに変更を加えることはできません。別のプログラムでアクセスできるように、このudpストリームを複製しようとしています。このプログラムはビデオを処理し、マルチキャストストリームとして再度送信します。

3つのネットワークカードを備えたLinuxマシン(Ubuntu Server 12.04を実行中)を使用してこれを実行したいと思っています。ユニット#1と#2をLinuxマシンの2つのネットワークカード(eth0とeth1)に接続し、ブリッジを使用して、それらを通信させます。私の/ etc / network / interfacesは次のようになります:

# The loopback network interface
auto lo
iface lo inet loopback

# The external interface
auto eth3
iface eth3 inet static
address 192.168.10.2
netmask 255.255.255.0

# The bridge interface
auto br0
iface br0 inet manual
  bridge_ports eth0 eth1

これは機能し、tcpdumpを使用して、udpパケットが#1から到着し、ポート6000で#2に向かっていることを確認しました。

次のステップは、iptablesを使用して、192.168.1.1から#2のポート6000に送信されるすべてのudpパケットを複製することです。私はiptablesにあまり詳しくありませんが、オンラインとマニュアルを読んだ後、これはうまくいくと思いました:

iptables -A PREROUTING -t mangle -p udp -s 192.168.1.1/32 --dport 6000 -j TEE --gateway 192.168.10.2

ルールは正常に適用されましたが、機能しません。tcpdumpを使用してeth3を監視すると、そこにパケットが表示されません。

このストリームを取得して処理し、.10.2インターフェイスでマルチキャストとして送信したいと思います。

何が悪いのですか?誤解したことがありますか?

回答:


4

192.168.10.2はマシン自体であるため、パケットはeth3に到達しません。また、複製されたパケットには、宛先IPアドレス192.168.1.2がまだあります。重複が実際にeth3経由でルーティングされるように、それらを192.168.10.0/24のマシン(たとえば、192.168.10.254)にTEEする必要があります。

iptables -t mangle -A PREROUTING -p udp --dport 6000 -j TEE --gateway 192.168.10.254

次に、それらを192.168.10.254にDNATして、192.168.10.254でストリームを読み取り、マルチキャストで送信できるようにする必要もあります。

192.168.10.254自体のいずれか:

iptables -t nat -A PREROUTING -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

または、パケットがeth3を出る前に、192.168.10.2のままにします。

iptables -t nat -A POSTROUTING -o eth3 -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

私がこれを正しく理解している場合、あなたが説明したことは、パケットを別のマシン(.10.254)に送信することになります。この余分なマシンを避けて、1台のマシンで内部的にこれを行うだけです。ゲートウェイを127.0.0.1に設定すると、それは機能しますか?
ホーコンK. Olafsen

ゲートウェイは単なるネクストホップであり、宛先は依然として192.168.1.2のままであり、マシンで複製されたパケットをDNATしてそれらを「ティーイング」することはできません。したがって、127.0.0.1も機能しません。
lsmooth 2013

そのため、1台のマシンで実行しようとしていることはできません。
ホーコンK. Olafsen

0

同様の問題があり、libpcapを使用してUDPパケットの内容を読み取る小さなプログラムで解決しました。これらのパケットのコピーを別の宛先に送信しました。(同じマシン上にある可能性があります。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.