Redirecionar um IP público para outro IP público, diferentes sub-redes e servidores

1

Essa é a minha primeira pergunta aqui, então espero estruturá-la corretamente.

Como é um caso para um amigo, eu aprecio a orientação para uma configuração adequada porque não conseguirei acessar o ambiente.

Em resumo - existe o Servidor A com um ip público (31.x.x.x) em eth0. Ele estava executando um serviço na porta específica, ouvindo as conexões do udp. O serviço público foi movido para o Servidor B, que tem novamente eth0 novamente com ip público, mas em sub-redes completamente diferentes. (93.x.x.x).

O objetivo é redirecionar todas as conexões que chegam ao ip antigo no servidor A para o novo ip no servidor b. O servidor B precisa conhecer o ip de origem original do pacote.

Nós tentamos algumas configurações com o iptables no Servidor A, usando dnat para pré-criação e snat / masquerade para pós-saída e ele funciona, mas o serviço no Servidor B vê os pacotes como eles estão vindo do ip público no servidor A.

Eu li que o postrouting deveria ser removido e o servidor b deveria usar o servidor a como padrão gw ao retornar tais pacotes, mas eu não acho que seja possível, porque eles estão em redes completamente diferentes.

Qualquer ajuda sobre como podemos alcançar o objetivo é bem-vinda.

Obrigado antecipadamente!

    
por Anton 29.11.2015 / 12:25

1 resposta

1

Solução potencial 1

O que eu tentaria fazer (deveria funcionar, mas não testei):

  1. Obtenha um segundo IP disponível no novo servidor. Configure-o usando outro namespace de rede (você pode usar algo como o Docker para ele).
  2. Crie um túnel (usando o GRE é provavelmente o mais fácil, mas você pode fazer qualquer coisa, incluindo IPSEC, OpenVPN, etc.) entre os dois atendimentos.
  3. Para o novo namespace de rede que você criou, use o encapsulamento como rota padrão.
  4. Configure o TPROXY na origem / máquina antiga e o NAT no segundo IP.

Agora, tudo é um pouco complicado, porque também é UDP. Você precisará mexer muito com o rastreamento de conexão.

Possível solução 2

Outra coisa que você pode fazer, muito mais fácil: escrever um aplicativo de tunelamento personalizado, aproveitando esse UDP. Deve fazer algo assim:

  1. A parte de origem do aplicativo ouviria no UDP no servidor antigo.
  2. A parte dest do aplicativo ouviria o TCP no novo servidor.
  3. A parte de origem do aplicativo envia cada pacote UDP, incluindo os cabeçalhos IP através da conexão TCP que ele possui para o servidor dest.
  4. A parte dest do aplicativo, enquanto recebe dados no fluxo TCP, reconstrói o pacote UDP, incluindo os cabeçalhos IP, e os envia para a porta UDP no host local. O spoofing de IP deve funcionar bem no host local.

Claro, isso causaria alguma latência nos pacotes UDP, mas faria o trabalho.

    
por 29.11.2015 / 14:27