¿Es posible duplicar un flujo unicast UDP con iptables?

Tengo un sistema propietario que transmite un flujo de video udp de la unidad # 1 (192.168.1.1) a la unidad # 2 (.1.2). No puedo realizar cambios en este sistema, y ​​estoy intentando clonar este flujo de udp para poder acceder a él en un progtwig diferente. Este progtwig hará cosas con el video y lo enviará de nuevo como un flujo de multidifusión.

Estoy esperando hacer esto usando una máquina del linux (funcionando Ubuntu Server 12.04 ahora) con tres tarjetas de networking. Conectando las unidades # 1 y # 2 a dos de las tarjetas de networking (eth0 y eth1) en la máquina Linux y usando bridge, las tengo comunicando. Mi / etc / network / interfaces se parece a:

# 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 

Esto funciona, y usando tcpdump he confirmado que los packages udp están llegando desde # 1 y se dirigen hacia # 2 en el puerto 6000.

El siguiente paso que espero funcionará es usar iptables para clonar todos los packages udp que vienen desde 192.168.1.1 yendo al puerto 6000 en # 2. No estoy muy familiarizado con iptables, pero después de leer en línea y el manual pensé que esto funcionaría:

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

La regla se aplica correctamente, pero no funciona. Si utilizo tcpdump para monitorear eth3, no veo los packages allí.

Quisiera agarrar esta stream, trabajar en ella y enviarla hacia fuera como multicast en la interfaz .10.2.

¿Qué estoy haciendo mal? ¿Hay algo que he entendido mal?

Los packages nunca llegan a eth3 como 192.168.10.2 es la propia máquina. También los packages duplicates todavía tienen la destinación ip-address 192.168.1.2. Usted necesita TEE ellos a una máquina en 192.168.10.0/24 por ejemplo 192.168.10.254 de modo que los duplicates consigan en realidad encaminarse sobre eth3.

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

A continuación, también es necesario DNAT a 192.168.10.254, por lo que puede leer el flujo en 192.168.10.254 y enviarlo a través de multidifusión.

Ya sea en 192.168.10.254 en sí:

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

O aún en 192.168.10.2 antes de que los packages están dejando 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 

Tuve un problema similar y lo resolví con un pequeño progtwig que utiliza libpcap para leer el contenido de los packages UDP. Envió copys de estos packages a otro destino. (Que podría estar en la misma máquina.)