
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
REDIRECT
altera 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 REDIRECT
não funcionará.
Responder2
REDIRECT
altera 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.
REDIRECT
não serve apenas para redirecionar pacotes locais. É realmente DNAT
onde 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 REDIRECT
você 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,
DNAT
nã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