IPTABLES: processa um pacote localmente e envia uma cópia para outro host

5

Eu tenho um problema ao configurar o iptables para fazer isso: alguns clientes enviam mensagens para um servidor. Eu quero que o servidor host processe as mensagens localmente (host A, como normal) mas que adicionalmente para cada mensagem (pacote tcp) envie uma cópia do pacote para outro host (host B, que executa uma versão modificada do servidor e eu quero ver como está o comportamento com as mesmas mensagens, para que eu possa comparar os dois servidores). Isso deve ser feito com o iptables. Eu tentei com os seguintes comandos. Estes enviam o pacote para B, mas a mensagem não é processada pelo host A (deve ser feito pelo segundo comando?).

iptables -t nat -A PREROUTING -p tcp --dport 31090 -j DNAT --to-destination IP_HOST_B:32090
iptables -t nat -A POSTROUTING -p tcp --dport 32090 -j SNAT --to-source IP_HOST_A:31090

O que eu perdi na minha configuração para atingir meu objetivo?

Obrigado.

    
por Armando Contestabile 10.07.2017 / 09:11

2 respostas

2

Algumas notas:

  • O SNAT não funciona da maneira que você descreveu na descrição, o SNAT substitui o IP de origem, ele não altera o IP de destino. Depois que um pacote passa pelas suas duas regras, ele terá:
    • fonte: IP_HOST_A: 31090
    • destino: IP_HOST_B: 32090
  • nem os destinos DNAT ou SNAT são capazes de duplicar pacotes

Para duplicar pacotes, você pode usar o alvo TEE, cf man iptables-extensions :

TEE

   The TEE target will clone a packet and redirect this clone
   to another machine on the local network segment. In  other
   words, the nexthop must be the target, or you will have to
   configure the nexthop to forward it further if so desired.

   --gateway ipaddr
          Send the cloned packet to the host reachable at the
          given  IP  address.  Use of 0.0.0.0 (for IPv4 pack‐
          ets) or :: (IPv6) is invalid.

No seu caso, isso daria:

iptables -t mangle -A POSTROUTING -p tcp --dport 31900 -j TEE --gateway IP_HOST_B

No entanto, duvido que esse tipo de cópia de pacote funcione bem para o seu caso, devido ao fato de que o TCP é usado. O TCP é projetado para estabelecer uma conexão entre um cliente e um servidor. Aqui, você teria uma situação com um cliente e dois servidores: haverá problemas.

    
por 10.07.2017 / 10:21
0

Não é possível clonar tráfego para a rede externa, mas, como foi respondido acima, você pode usar o plugin VPN e Tipt iptables.

    
por 19.07.2017 / 10:27