Diferença entre DNAT e REDIRECT em IPTABLES

12

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

Aqui está minha configuração:

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

ETH0 = DHCP ETH1 = 192.168.5.1/24 que serve o DHCP para a rede 192.168.5.0/24 aos clientes atrás dele no LAN

Eu tenho o privoxy instalado e escutando na porta 8080 como um proxy transparente. O que estou realizando com essa configuração é poder soltar essa caixa em uma rede existente com configuração mínima e anexar clientes ao proxy.

Aqui está o 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 está fluindo sem problemas. Eu recebo o endereço IP dos clientes de origem nos arquivos de log privoxy, e a vida é boa.

Minha confusão vem quando eu começo a olhar para as configurações de outras pessoas e vejo que elas estão usando DNAT ao invés de REDIRECT, e estou tentando entender o real benefício de uma sobre a outra. Aqui está uma configuração de amostra:

*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

Mais uma vez, essa configuração também funciona e me dá tudo o que preciso de uma perspectiva de logging ...

Qual é o certo, ou talvez MAIS certo, do que o outro?

Obrigado por ter tempo para ler até aqui ...

    
por QWade 08.09.2010 / 16:20

2 respostas

13

REDIRECT altera o endereço IP de destino a ser enviado 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ê quiser apenas redirecionar o tráfego entre os serviços na máquina local, será uma boa escolha.

DNAT é a conversão de endereços de rede real. Se você quiser que os pacotes destinados fora do sistema local tenham o destino alterado, é a melhor escolha dos dois, pois REDIRECT não funcionará.

    
por 08.09.2010 / 16:30
5

REDIRECT altera o endereço IP de destino a ser enviado para a própria máquina como respondido pela Warner @. Mas eu diria que a resposta não é totalmente correta ou um pouco enganosa.

REDIRECT não é apenas para redirecionar pacotes locais. É realmente DNAT em que o endereço IP de destino a ser usado é implícito, 127.0.0.1 se for um pacote local ou o endereço IP da interface da máquina, 192.168.5.1 no caso do OP.

Portanto, nessa questão, não importa qual seja o destino final, os pacotes devem primeiro alcançar o proxy, então REDIRECT é perfeitamente adequado.

Já que com REDIRECT você não precisa especificar o endereço IP, ele apenas terá o endereço certo, ele tem algumas vantagens sobre DNAT :

  • Se o endereço IP da máquina for alterado por algum 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 diferentes versões ligeiramente por causa dos endereços IP específicos.

por 07.09.2017 / 01:51