Apakah mungkin untuk menduplikasi aliran unicast UDP dengan iptables?

8

Saya memiliki sistem berpemilik yang mentransmisikan aliran video udp dari unit # 1 (192.168.1.1) ke unit # 2 (.1.2). Saya tidak dapat membuat perubahan pada sistem ini, dan saya mencoba mengkloning udp stream ini sehingga saya dapat mengaksesnya di program lain. Program ini akan melakukan hal-hal dengan video dan mengirimkannya kembali sebagai aliran multicast.

Saya berharap untuk melakukan ini menggunakan mesin Linux (menjalankan Ubuntu Server 12.04 sekarang) dengan tiga kartu jaringan. Dengan menghubungkan unit # 1 dan # 2 ke dua kartu jaringan (eth0 dan eth1) di mesin Linux dan menggunakan bridge, saya membuat mereka berkomunikasi. / Etc / network / interface saya terlihat seperti:

# 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

Ini berfungsi, dan dengan menggunakan tcpdump saya telah mengkonfirmasi bahwa paket udp datang dari # 1 dan menuju ke # 2 di port 6000.

Langkah selanjutnya yang saya harap akan berhasil adalah menggunakan iptables untuk mengkloning semua paket udp mulai dari 192.168.1.1 menuju port 6000 di # 2. Saya tidak terlalu terbiasa dengan iptables, tetapi setelah membaca online dan manual saya pikir ini akan berhasil:

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

Aturan berhasil diterapkan, tetapi tidak berhasil. Jika saya menggunakan tcpdump untuk memonitor eth3, saya tidak melihat paket di sana.

Saya ingin mengambil aliran ini, mengerjakannya dan mengirimkannya sebagai multicast pada antarmuka .10.2.

Apa yang saya lakukan salah? Apakah ada sesuatu yang saya salah pahami?

Håkon K. Olafsen
sumber

Jawaban:

4

Paket tidak pernah mencapai eth3 karena 192.168.10.2 adalah mesin itu sendiri. Paket duplikat masih memiliki destincation ip-address 192.168.1.2. Anda perlu TEE mereka ke mesin di 192.168.10.0/24 misalnya 192.168.10.254 sehingga duplikat benar-benar dialihkan melalui eth3.

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

Maka Anda juga perlu DNAT ke 192.168.10.254, sehingga Anda dapat membaca streaming di 192.168.10.254 dan mengirimkannya melalui multicasting.

Baik pada 192.168.10.254 sendiri:

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

Atau masih pada 192.168.10.2 sebelum paket meninggalkan eth3:

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
lsmooth
sumber
Jika saya mengerti ini dengan benar, apa yang Anda jelaskan akan mengirim paket ke mesin lain (.10.254). Saya ingin menghindari mesin ekstra ini, dan lakukan ini secara internal pada satu mesin. Jika saya mengatur gateway ke 127.0.0.1, apakah itu berfungsi =?
Håkon K. Olafsen
Gateway hanyalah hop berikutnya tujuan masih tetap 192.168.1.2 dan Anda tidak dapat DNAT paket duplikat pada mesin "teeing" mereka. Jadi 127.0.0.1 juga tidak akan berfungsi.
lsmooth
Jadi saya tidak bisa melakukan apa yang saya coba gunakan hanya satu mesin.
Håkon K. Olafsen
0

Saya memiliki masalah yang sama dan menyelesaikannya dengan program kecil yang menggunakan libpcap untuk membaca isi paket UDP. Ini mengirim salinan paket-paket ini ke tujuan lain. (Yang bisa di mesin yang sama.)

fadedbee
sumber