Alterar o IP de origem do pacote de entrada

Alterar o IP de origem do pacote de entrada

Como posso alterar o IP de origem de um pacote recebido antes que ele chegue ao serviço em execução?

Tenho dois aparelhos, um Gerenciador e um Servidor, conectados via VPN e possui NAT entre eles.

IP da interface do gerenciador: A IP da interface do servidor: B

O gerente se conecta ao servidor usando NAT IP Y e o servidor vê o IP X quando o gerente se conecta

Como configuro o iptables no servidor de forma que quando o pacote chegar com o IP X de origem, altere-o para IP.

Eu sei que isso não deve ser um problema em uma rede e um produto bem projetados, mas precisamos de uma solução alternativa por enquanto, até que seja corrigido no lado do software.

Até agora, as regras do iptables abaixo não têm ajudado:

iptables -t nat -A POSTROUTING -s <X> -o eth0 -j SNAT --to <A>

Qualquer ajuda será apreciada.

Responder1

NAT depende de serviços "solicitados" portabelas de ipe fornecido peloconexãosubsistema. O SNAT não é disponibilizado antes da decisão de roteamento ser tomada, mas ainda está disponível quando o pacote foi escolhido para ser roteado para o host: no raramente usadonat/ENTRADAcadeia, conforme documentado nopágina de manual:

SNAT

Este alvo só é válido na tabela nat, no POSTROUTINGe INPUTcadeias e cadeias definidas pelo usuário que são chamadas apenas a partir dessas cadeias. [...]

Portanto, desde que o servidor esteja recebendo o tráfego (sem roteá-lo posteriormente), ao receber um pacote do endereço IP de origem <X> no endereço IP de destino do servidor <B> através da interfaceeth0, pode ser SNATed para aparecer como endereço de origem <A> (que era o endereço de origem IP original, mas esta informação é perdida), com isto:

iptables -t nat -A INPUT -s <X> -d <B> -i eth0 -j SNAT --to <A>

Ou usando uma versão mais simples:

iptables -t nat -A INPUT -s <X> -j SNAT --to <A>

Você poderia adicionar mais restrições como -p tcp --dport XXXX(XXXX para o serviço real alcançado), e provavelmente deveria: se você encontrar o problema descrito abaixo, poderá impedir o acesso ao sistema através da VPN. Tenha um método de acesso de backup ou não faça isso remotamente, a menos que tenha certeza.

A regra acima pode não ser suficiente devido ao roteamento. Se o endereço IP <A> não estiver em uma rota conhecida para o Servidor (isso aconteceria apenas se o Servidor não tivessepadrãorota). Embora o sistema nunca envie um pacote de volta (IP ou mesmo ARP) para este destino (as respostas não são SNAT), uma rota para ele ainda é necessária para um manuseio correto pela pilha de roteamento que não sabe que o SNAT aconteceu.

Então se otabelas de ipregra acima não for suficiente (provavelmente se o servidor não tiver rota padrão), você pode adicionar:

  ip route add <A>/32 dev eth0

informação relacionada