É possível duplicar um fluxo de unicast UDP com iptables?

8

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 consigo fazer alterações neste sistema e estou tentando clonar esse fluxo do udp para que eu possa acessá-lo em um programa diferente. Este programa fará coisas com o vídeo e o enviará novamente como um fluxo de multicast.

Espero fazer isso usando uma máquina Linux (rodando o Ubuntu Server 12.04 agora) com três placas de rede. Conectando as unidades # 1 e # 2 a duas das placas de rede (eth0 e eth1) na máquina Linux e usando bridge, eu as comuniquei. Meu / etc / network / interfaces parece:

# 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 eu confirmei que os pacotes udp estão chegando de # 1 e estão indo em direção a # 2 na porta 6000.

O próximo passo que eu espero que funcione é usar o iptables para clonar todos os pacotes do udp que vêm de 192.168.1.1 para a porta 6000 em # 2. Eu não estou muito familiarizado com o iptables, mas depois de ler on-line e no manual eu 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á.

Gostaria de pegar esse fluxo, trabalhá-lo e enviá-lo como um multicast na interface .10.2.

O que estou fazendo de errado? Há algo que eu tenha entendido mal?

    
por Håkon K. Olafsen 22.02.2013 / 22:46

2 respostas

4

Os pacotes nunca alcançam eth3 como 192.168.10.2 é a própria máquina. Além disso, os pacotes duplicados ainda têm o endereço IP de destinação 192.168.1.2. Você precisa TEE-los para uma máquina em 192.168.10.0/24 por exemplo 192.168.10.254 para que as duplicatas realmente sejam roteadas sobre eth3.

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

Então você também precisa DNAT-los para 192.168.10.254, então você pode ler o fluxo em 192.168.10.254 e enviá-lo via multicasting.

Ou na própria 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

Ou ainda em 192.168.10.2 antes dos pacotes saírem da 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
    
por 23.02.2013 / 00:33
0

Eu tive um problema semelhante e resolvi com um pequeno programa que usava a libpcap para ler o conteúdo dos pacotes UDP. Enviou cópias desses pacotes para outro destino. (Que poderia estar na mesma máquina.)

    
por 22.06.2017 / 10:55