Eu tenho um sistema proprietário que transmite um fluxo de vídeo udp da unidade 1 (192.168.1.1) para a unidade 2 (.1.2). Não posso fazer alterações neste sistema e estou tentando clonar esse fluxo udp para acessá-lo em um programa diferente. Este programa fará coisas com o vídeo e o enviará novamente como um fluxo multicast.
Espero fazer isso usando uma máquina Linux (executando o Ubuntu Server 12.04 agora) com três placas de rede. Ao conectar as unidades 1 e 2 a duas das placas de rede (eth0 e eth1) na máquina Linux e usar bridge, eu as comunico. Meu / etc / network / interfaces é parecido com:
# 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
Isso funciona e, usando o tcpdump, confirmei que os pacotes udp estão chegando do ponto 1 e estão indo para o ponto 2 na porta 6000.
O próximo passo que espero que funcione é usar o iptables para clonar todos os pacotes udp que vêm de 192.168.1.1 e vão para a porta 6000 na segunda posição. Eu não estou muito familiarizado com o iptables, mas depois de ler on-line e o manual, pensei que isso funcionaria:
iptables -A PREROUTING -t mangle -p udp -s 192.168.1.1/32 --dport 6000 -j TEE --gateway 192.168.10.2
A regra é aplicada com sucesso, mas não funciona. Se eu usar o tcpdump para monitorar o eth3, não vejo os pacotes lá.
Eu gostaria de pegar esse fluxo, trabalhar nele e enviá-lo como um multicast na interface .10.2.
O que estou fazendo errado? Existe algo que eu não entendi?
fonte
Eu tive um problema semelhante e o resolvi com um pequeno programa que usava libpcap para ler o conteúdo dos pacotes UDP. Ele enviou cópias desses pacotes para outro destino. (Que pode estar na mesma máquina.)
fonte