Vários NICS na mesma solução IP necessários

2

Minha topologia de rede é a seguinte -

Meu problema é que os PCs Purple Red Green e Orange são na verdade sistemas industriais codificados, e eu não tenho nenhuma possibilidade de alterar qualquer configuração neles.

Eu preciso interceptar e manipular os pacotes UDP com a adição do PC de interceptação.

Exemplo - RED PC 192.168.0.20 envia um pacote UDP para o PC roxo. Isso realmente chega ao meu PC de Interceptação (Ubuntu 16.04) onde recebo e respondo ao pacote. Eu então construo uma mensagem diferente e entrego para o PC roxo.

O problema é que a rede está toda na mesma sub-rede, e o kernel não tem idéia de qual NIC enviar meu pacote de saída, já que eu já possuo o ip que estou tentando encaminhar.

Eu tentei criar namespaces separados para possuir o NICS e escrevi vários processos separados para se comunicar via Dbus entre os namespaces, antes de perceber que eles não podem se comunicar. Eu posso comprar mais hardware, se necessário, mas estou procurando sugestões sobre como eu poderia alcançar este resultado.

    
por Wharbio 13.04.2018 / 13:13

1 resposta

2

Sim, usar um namespace de rede para isolar as duas redes "iguais" funcionaria.

Por exemplo, você tem um namespace de rede para o lado direito, com todas as três interfaces nesse namespace e, além disso, você tem uma ponte no namespace e um toque para a interceptação e o encaminhamento de tráfego. Adicione o toque e as três NICs à ponte e atribua 192.168.0.10 apenas ao toque. Assim, nenhuma atribuição de IP às NICs; apenas para a torneira. A ponte cuidará de canalizar todo o tráfego para 192.168.0.10 no lado direito até a torneira e todo o tráfego para 192.168.0. {20,21,22} por meio das NICs apropriadas.

Escreva seu programa de interceptação para ler / escrever a torneira (Nível 2) e encaminhe os pacotes através de stdin / stdout (sem buffer). Escreva também um programa de transferência simples semelhante para canalizar pacotes stdin / stdout para / de um toque (outro toque), que você coloca no namespace global do lado esquerdo. Os programas devem encaminhar todos os pacotes, com sua interceptação aplicada a alguns deles.

O namespace do lado esquerdo (o namespace global) é organizado de maneira correspondente, com uma ponte para as NICs e um toque, e depois adiciona todos os endereços IP 192.168.0. {20,21,22} a a torneira.

Em seguida, use o programa dpipe do pacote vde2 (ou escreva seu próprio) para iniciar os dois conectores de toque de forma que seus stdin / stdout sejam mutuamente conectados. Com dpipe , o comando para isso seria algo como o seguinte:

# dpipe program1 tap1 = ip netns exec RHS program2 tap2

para o efeito que stdout de program1 vai para stdin de program2, e stdout de program2 vai para stdin de program1. (Incluí, na verdade, toquei em argumentos de nomes para os programas apenas para fins de ilustração)

Em suma, seria uma maneira de interceptar e transferir pacotes entre os dois namespaces sem precisar mexer nas traduções IP.

Observe que a configuração funcionaria igualmente bem com uma única NIC em cada lado, além de um interruptor à direita. Assim, não há necessidade de dois triplets de NICs, mas você pode sair com apenas dois: um para a esquerda e outro para a direita, além de um switch para a rede do lado direito, que possui 4 hosts físicos.

    
por 13.04.2018 / 15:15