Tabela de roteamento com dois mesmos IPs estáticos na rede

1

Precisamos de uma maneira de inserir um dispositivo entre um dispositivo de destino e a rede, de preferência sem precisar alterar nenhum endereço IP.

Atualmente, a situação é (por favor, desculpe a arte ASCII)

-----------       -------------
| x.x.x.5 | ----- | x.x.x.10  |
-----------       -------------

O que estamos tentando fazer é inserir um dispositivo com duas interfaces de rede, e o que gostaríamos de fazer é organizar os IPs para que cada lado pense que está falando com o dispositivo original. Nós vamos cuidar de mover os dados de uma interface para outra.

-----------     --------------------------------    ------------
| x.x.x.5 | --- | eth0 x.x.x.10   x.x.x.5 eth1 |--- | x.x.x.10 |
-----------     --------------------------------    ------------

Existe uma maneira de configurar a tabela de roteamento de tal forma que uma solicitação para x.x.x.10 que vem da eth0 seja enviada para a eth1, e as requisições para x.x.x.5 que chegarem pela eth1 sejam enviadas eth0?

A caixa do meio está executando o Linux.

    
por DougN 13.05.2017 / 21:30

3 respostas

4

Você pode fazer isso com uma VPN que pode funcionar na Camada 2, como a ponte ethernet OpenVPN. Consulte o link

Outra maneira de fazer isso é com o túnel MPLS. Consulte: link

Se quiser apenas uma inspeção de pacotes, como um IDS , você pode usar, por exemplo, snort Veja: link

    
por 27.05.2017 / 17:26
3

Talvez você possa configurar uma ponte usando bridge-utils. Dessa forma, você nem precisa configurar esses endereços IP na caixa do meio.

Isso, obviamente, depende do motivo pelo qual você precisa ter essa caixa no meio.

    
por 13.05.2017 / 21:37
2

Não está claro por que você deseja fornecer esses endereços específicos à sua caixa do meio. Se você só precisa passar pacotes para o outro lado, não há necessidade para isso, você pode usar o bridging (ou opcionalmente o proxy-arp).

Um caso de uso válido se você quiser que o tráfego de uma das extremidades seja direcionado para um aplicativo em execução localmente na caixa do meio , gerando opcionalmente uma nova solicitação de aplicativo no outro lado, subindo e descendo pilha de rede completa (por exemplo, digamos, um proxy HTTP userland). Se é isso que você quer, continue lendo.

Você não pode configurar a caixa do meio assim como está, porque a caixa do meio não será capaz de distinguir sua interface local de um lado, da interface remota do outro lado.

A maneira que eu tentaria configurá-lo, seria o primeiro a escolher dois novos endereços para a caixa do meio, dividindo um lado em uma sub-rede separada. por exemplo, x.x.x.6/30 (que bloqueia .4 e .7 como endereços de rede, da caixa do meio, e permite .5 para o lado remoto) e x.x.x.11 para o outro lado.

Em seguida, ative o proxy-ARP para as duas interfaces relevantes, adicionando o seguinte aos seus scripts de inicialização da interface:

 echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp

para eth0 e

 echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp

para eth1. Você também pode usar all em vez do nome da interface, se não houver outras interfaces na caixa. Isso fará com que sua caixa do meio responda agora com seu próprio endereço MAC para solicitações arp direcionadas a endereços roteáveis conhecidos do outro lado.

Em seguida, use essas quatro regras de NAT para tornar a caixa invisível:

iptables -t nat -A PREROUTING -i eth0 -s x.x.x.5 -d x.x.x.10 -j DNAT --to-destination x.x.x.6
iptables -t nat -A POSTROUTING -o eth0 -d x.x.x.5 -s x.x.x.6 -j SNAT --to-source x.x.x.10
iptables -t nat -A PREROUTING -i eth1 -s x.x.x.10 -d x.x.x.5 -j DNAT --to-destination x.x.x.11
iptables -t nat -A POSTROUTING -o eth1 -d x.x.x.10 -s x.x.x.11 -j SNAT --to-source x.x.x.5

Dessa forma, você pode usar endereços diferentes internamente para identificar as interfaces da sua caixa do meio, mas elas não aparecem do lado de fora. O processo será parecido com:

  • x.x.x.5 faz uma solicitação direta de ARP para x.x.x.10. Esta requisição chega na caixa do meio na eth0.
  • caixa do meio percebe que x.x.x.10 é roteável em eth1, então respostas com seu próprio endereço MAC
  • o pacote IP para x.x.x.10 é entregue na caixa do meio em eth0
  • A regra DNAT em PREROUTING eth0 inicia e reescreve o destino para x.x.x.6
  • o aplicativo local manipula a solicitação para x.x.x.6, emite uma solicitação separada para x.x.x.10, a solicitação é roteada para eth1
  • A regra
  • SNAT em POSTROUTING eth1 entra em ação, altera o endereço de origem para x.x.x.5
  • x.x.x.10 vê a solicitação da caixa do meio chegando de x.x.x.5.
  • x.x.x.10 deseja responder, emite a solicitação ARP para x.x.x.5
  • o proxy-arp entra em ação na eth1, pois x.x.x.5 é roteável em eth0
  • a resposta vai para a caixa do meio, a regra DNAT na eth1 entra em ação, reescreve o destino para x.x.x.11
  • aplicativo local lida com a resposta, o processo original emite uma resposta de x.x.x.6 para x.x.x.5
  • A regra de
  • SNAT para eth0 entra em ação, altera o endereço de origem para x.x.x.10
  • a resposta final é emitida para x.x.x.5
por 02.06.2017 / 15:19