![Como fazer SNAT com porta de destino alterada?](https://rvso.com/image/1595522/Como%20fazer%20SNAT%20com%20porta%20de%20destino%20alterada%3F.png)
Eu tenho um host Linux servindo como NAT de origem (SNAT). Recebe todos os pacotes da rota padrão da rede interna em uma interface interna com IP 192.168.2.1. O host SNAT possui vários endereços IP de saída (por exemplo, 3.3.3.3, 3.3.3.4, 3.3.3.5, ...).
Eu gostaria de configurar o iptables (ou alguma outra ferramenta no Linux - não precisa ser iptables - mas acho que é a ferramenta certa) de forma que a porta na qual um pacote chega no IP privado interno determine o IP em qual a solicitação é enviada e a porta de saída é constante (por exemplo, porta 80).
Por exemplo, o mapeamento abaixo pode ser prototípico (todos seriam recebidos em 192.168.2.1, mas com um IP de destino do IP listado primeiro no mapeamento... -> indica o dispositivo SNAT):
- (src) 192.168.xy:z (destino) 10.10.10.10:8001 -> (src) 3.3.3.3:r (destino) 10.10.10.10:80
- (src) 192.168.xy:z (destino) 11.11.11.11:8002 -> (src) 3.3.3.4:r (destino) 11.11.11.11:80
- (src) 192.168.xy:z (destino) 12.12.12.12:8003 -> (src) 3.3.3.5:r (destino) 12.12.12.12:80
- (src) 192.168.xy:z (destino) 13.13.13.13:8004 -> (src) 4.4.4.3:r (destino) 13.13.13.13:80
(192.168.xy pode ser qualquer host na rede privada. As portas z e r são quase certamente portas efêmeras e são obviamente diferentes para cada sessão, mas o SNAT obviamente precisa gerenciar esse estado para obter respostas ao solicitante correto)
Aqui está um exemplo concreto:
Um pacote pode ser originado de uma interface na rede privada (por exemplo, 192.168.2.5). O IP de origem será, portanto, “192.168.2.5”. O IP de destino pode ser “10.10.10.10” e a porta de destino pode ser “8001”. A tabela de roteamento informa ao roteador IP local para enviar todos os pacotes destinados a "0.0.0.0/0" para 192.168.2.1 e não há mais nenhuma entrada específica na tabela de rotas. Portanto, o pacote chega em 192.168.2.1 (o SNAT) com IP de destino 10.10.10.10 e porta de destino 8001. Se isso acontecer, quero que o NAT envie o pacote em 3.3.3.3:r com destino 10.10 .10.10:80 (o 3.3.3.3 obviamente teria que ser definido em um mapeamento e deveria ser baseado na porta de destino original 8001).
Eu acho que isso seria relativamente trivial com o iptables se não fosse pelo requisito de alterar a porta de destino - mas esse problema me deixa confuso.
Como posso conseguir isso?