web-dev-qa-db-ja.com

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

ユニット#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からポート6000の#2に送信されるすべての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インターフェースでマルチキャストとして送信します。

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

8

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
4
lsmooth

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

0
fadedbee