Eu gostaria fazer algumas NAT
em iptables
. Para que todos os pacotes que chegam 192.168.12.87
e port 80
sejam encaminhados para 192.168.12.77
port 80
.
Como fazer isso com o iptables?
Ou
Existem outras maneiras de conseguir o mesmo?
linux
iptables
port-forwarding
Sentou
fonte
fonte
192.168.12.87
. Então, preciso encaminhar toda a solicitação para192.168.12.77
.iptables
. E vi alguns exemplos. Mas, parece exigir dois ethernet. Link: revsys.com/writings/quicktips/nat.htmlRespostas:
Essas regras devem funcionar, supondo que
iptables
esteja em execução no servidor192.168.12.87
:Você precisa DNAT de tráfego de entrada na porta 80, mas também precisará SNAT o tráfego de volta.
Alternativa (e melhor abordagem IMHO):
Dependendo do seu servidor Web (Apache, NGinx), considere um Proxy HTTP no servidor front-end (192.168.12.87):
mod_proxy (Apache)
proxy_pass (NGinx)
fonte
O motivo pelo 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 NATted 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 em que a regra do iptables está executando o 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 esse 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ê deve considerar cuidadosamente se realmente precisa fazer esse encaminhamento específico.
Das três abordagens, acho que a primeira é a que provavelmente funcionará. Portanto, se você não precisar conhecer 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á encaminhar as solicitações para 192.168.12.77 e encaminhar as respostas novamente. Além disso, ele 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.
fonte
-j MASQUERADE
não ser mencionado aqui; não é a abordagem usual com o DNAT?SNAT
vez deMASQUERADE
, porque é isso que a documentação diz. A formulação exata na documentação é:It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.