Problema de roteamento complicado do linux

2

No trabalho, temos um sistema end-to-end que roteamos os pacotes para sair do outro lado e, em seguida, voltamos para onde eles se originaram. Você pode pensar nisso como uma pilha de comunicações normal.

Para testar a taxa de transferência, nos encontramos usando o iperf3 usando dois computadores externos para enviar tráfego para essa pilha. Nós nos encontramos usando três computadores no total porque não conseguimos resolver esse problema de rota, mas acho que deve haver alguma solução que não estamos vendo, já que tenho certeza de que isso aconteceu antes. Eu gostaria de usar apenas uma máquina, se possível.

Digamos que nosso ambiente seja assim:

Onde A é um cliente iperf3, B consiste em vários programas passando pacotes uns para os outros como pacotes ethernet (mantidos como uma caixa preta para simplificar) e C é o servidor iperf3.

Então, para recapitular, eu gostaria que os pacotes viajassem de A, para B, para C, e então de volta para B, e de volta para A.

ParafazerissousandooIperf,euteriaumclienteemAenviandopacotesparaC.

iperf3-c"C"

E eu também configurei um servidor em C usando

iperf3 -s

No entanto, sem nenhuma regra de roteamento neste ponto, esses pacotes irão ignorar B e ir direto entre A e C. Para impedir que isso aconteça, faço uma regra de roteamento para dizer algo como "Direcionar todo o tráfego destinado a C para B ".

route add "C" netmask 255.255.255.255 gw "B"

Além disso, temos que fazer a mesma coisa do outro lado para que o servidor não envie diretamente de volta para o A.

route add "A" netmask 255.255.255.255 gw "B"

Se você ainda não o pegou, isso causará um paradoxo e causará todo o tráfego destinado a A e C a B. Isso significa que quando B estiver processando e quiser enviar os dados para C, ele será processado enviar para si mesmo porque é isso que a tabela de roteamento dita *. Isso também acontecerá na direção oposta.

Alguém sabe alguma maneira de contornar isso? Não tenho certeza se isso pode ser feito com roteamento simples, mas eu não sei muito sobre roteamento para começar então talvez haja um truque para isso?

* Eu não tenho certeza se ele vai continuar enviando para si mesmo (eu não acho que vai, mesmo que isso não vai saber o que fazer com ele pela segunda vez), mas esta sou eu tentando digamos que não funcionará com essa configuração.

    
por briansrls 20.10.2017 / 04:26

2 respostas

4

Isso quase soa como algo que você poderia alcançar com o iptables. Algo parecido com isto poderia ser colocado em "B":

iptables -t nat -A PREROUTING -s "A" -p tcp --dport 5201 -j DNAT --to-destination C:5201

iptables -t nat -A PREROUTING -s "C" -p tcp --dport 5201 -j DNAT --to-destination A:5201
    
por 20.10.2017 / 07:13
1

Parece que você precisa de um proxy (transparente), tente analisar isso.

No entanto, se você realmente quiser usar o roteamento , já que somente esses dois clientes devem ser afetados, é necessário configurar alguns tipo de funcionalidade de roteamento em B primeiro (ou algum tipo de ip encaminhamento pelo menos) . Então você precisa adicionar a rota nos hosts, o que seria algo assim.

Em A

route add C netmask 255.255.255.255 gw B

Em C

route add A netmask 255.255.255.255 gw B

Por exemplo você diria A que, para chegar ao C, o próximo salto não seria o seu gateway padrão, mas a sua caixa B. O 255 em todos os quatro octs é necessário e significa apenas este IP. Portanto, isso não significa que todo o tráfego que tem o destino C vá para B, mas significa que todo o tráfego vai para C - ao invés do padrão gw - use B como seu gw. Portanto, não há paradoxo a menos que você não tenha configurado nada na caixa B. Então, é claro que a caixa B irá simplesmente soltar os pacotes e provavelmente olhar para você "por que diabos você está me enviando isso?)".

Outra alternativa é espelhar uma porta de um de seus hosts, se você tiver um comutador gerenciado, para que cada pacote enviado ou recebido nessa porta LAN também seja entregue à sua caixa B nessa porta espelhada. / p>

Existem muitas outras alternativas para cortar a comunicação entre esses dois clientes com o seu terceiro cliente. No entanto, com a descrição que você deu você realmente não tem nenhum requisito. Então tente qualquer coisa.

    
por 20.10.2017 / 10:07

Tags