Diferença entre DNAT e REDIRECT em IPTABLES

Diferença entre DNAT e REDIRECT em IPTABLES

Ok, pode ser porque eu sou denso ou talvez simplesmente não encontre a fonte certa, mas não consigo entender por que uma dessas configurações de IPTABLES seria melhor que a outra.

Aqui está minha configuração:

Eu tenho uma caixa que está servindo como proxy transparente e um roteador ou algo assim. Possui duas interfaces, ETH0 e ETH1, e o seguinte esquema de endereços:

ETH0 = DHCP ETH1 = 192.168.5.1/24 servindo DHCP para a rede 192.168.5.0/24 para clientes atrás dela na LAN

Tenho o privoxy instalado e escutando na porta 8080 como um proxy transparente. O que estou conseguindo com esta configuração é poder colocar esta caixa em uma rede existente com configuração mínima e clientes conectados ao proxy.

Aqui está meu arquivo IPTABLES original

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Essa configuração funciona bem e o tráfego flui de um lado para outro sem problemas. Recebo o endereço IP dos clientes de origem nos arquivos de log privoxy e a vida é boa.

Minha confusão surge quando começo a observar as configurações de outras pessoas e vejo que elas estão usando DNAT em vez de REDIRECT, e estou tentando entender o real benefício de uma sobre a outra. Aqui está um exemplo de configuração:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Novamente, essa configuração também funciona e me dá tudo que preciso do ponto de vista de registro...

O que está certo, ou talvez MAIS certo, do que o outro?

Obrigado por reservar um tempo para ler até aqui...

Responder1

REDIRECTaltera o endereço IP de destino para enviar para a própria máquina. Em outras palavras, os pacotes gerados localmente são mapeados para o endereço 127.0.0.1. É para redirecionar pacotes locais. Se você deseja apenas redirecionar o tráfego entre serviços na máquina local, será uma boa escolha.

DNATé realTradução do Endereço da Rede. Se você deseja que os pacotes destinados fora do sistema local tenham o destino alterado, é a melhor escolha dos dois, pois REDIRECTnão funcionará.

Responder2

REDIRECTaltera o endereço IP de destino para enviar para a própria máquina conforme respondido por Warner@. Mas eu diria que essa resposta não está totalmente correta ou é um pouco enganosa.

REDIRECTnão serve apenas para redirecionar pacotes locais. É realmente DNATonde está implícito o endereço IP de destino a utilizar, 127.0.0.1 se for um pacote local ou o endereço IP da interface da máquina caso contrário, 192.168.5.1 no caso do OP.

Então nesta questão, não importa qual seja o destino final, os pacotes devem chegar primeiro ao proxy, então REDIRECTé perfeitamente adequado.

Como REDIRECTvocê não precisa especificar o endereço IP, basta escolher o correto, tem algumas vantagens sobre DNAT:

  • Se o endereço IP da máquina for alterado por qualquer motivo, você não precisará modificar suas regras e, em particular, DNATnão funcionará para interfaces controladas por DHCP.

  • Você pode escrever e manter as mesmas regras para vários sistemas (várias instâncias de proxy, por exemplo) sem manter versões ligeiramente diferentes devido aos endereços IP específicos.

Responder3

DNAT e REDIRECT são exatamente iguais, se você deseja enviar tráfego para a máquina local.

A documentação afirma assim: "[Redirecionamento] é um caso especializado de NAT de destino chamado redirecionamento: é uma conveniência simples que é exatamente equivalente a fazer DNAT para o endereço da interface de entrada."

https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2

informação relacionada