Eu gostaria de fazer alguns NAT
em iptables
. Assim, todos os pacotes que chegam a uma 192.168.12.87
porta 80
serão encaminhados para a 192.168.12.77
porta 80
.
Como fazer isso com o iptables?
Ou
Alguma outra forma de conseguir o mesmo?
Eu gostaria de fazer alguns NAT
em iptables
. Assim, todos os pacotes que chegam a uma 192.168.12.87
porta 80
serão encaminhados para a 192.168.12.77
porta 80
.
Como fazer isso com o iptables?
Ou
Alguma outra forma de conseguir o mesmo?
Essas regras devem funcionar, supondo que
iptables
esteja sendo executado no servidor192.168.12.87
:Você precisa fazer o DNAT do tráfego de entrada na porta 80, mas também precisará SNAT do tráfego de volta.
Alternativa (e melhor abordagem IMHO):
Dependendo do seu servidor Web (Apache, NGinx), você deve considerar um proxy HTTP em seu servidor front-end (192.168.12.87):
mod_proxy (Apache)
proxy_pass (NGinx)
A razão pela qual um aparentemente óbvio
iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
não funcionará é como os pacotes de retorno serão roteados.Você pode configurar regras que farão com que os pacotes enviados para 192.168.12.87 sejam simplesmente NAT para 192.168.12.77, mas 192.168.12.77 enviará respostas diretamente de volta ao cliente. Essas respostas não passarão pelo host onde sua regra iptables está fazendo NAT, portanto, os pacotes em uma direção são traduzidos, mas os pacotes na outra direção não.
Existem três abordagens para resolver este problema.
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
Cada uma dessas três soluções tem desvantagens, portanto, você precisa considerar cuidadosamente se realmente precisa fazer esse encaminhamento específico.
Das três abordagens, acho que a primeira é a que tem mais probabilidade de funcionar. Então, se você não precisa saber os endereços IP do cliente, esse é o que eu recomendaria.
Você também pode optar por esquecer completamente o NAT e não tentar resolver o problema na camada MAC ou IP. Você pode ir até a camada HTTP e procurar uma solução lá. Nesse caso, a solução que você encontrará é um proxy HTTP. Se você instalar um proxy HTTP em 192.168.12.87 e configurá-lo adequadamente, poderá fazer com que ele encaminhe as solicitações para 192.168.12.77 e encaminhe as respostas de volta. Além disso, pode inserir um cabeçalho X-Forwarded-For preservando o IP do cliente original. O servidor em 192.168.12.77 precisa ser configurado para confiar no cabeçalho X-Forwarded-For de 192.168.12.87.