Diferença entre DNAT e REDIRECT em IPTABLES


14

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

Aqui está a minha configuração:

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

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

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 clientes conectados 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 flui para frente e para trás 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 olhar para as configurações de outras pessoas e vejo que elas estão usando DNAT em vez de REDIRECT, e estou tentando entender o verdadeiro 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 fornece tudo o que preciso da perspectiva de log ...

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

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

Respostas:


14

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é a tradução real do endereço de 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á.


ok, então se eu tenho um cliente atrás do proxy, digamos 192.168.5.234, e quero "processar" suas solicitações HTTP através do proxy 192.168.5.1, você está sugerindo que eu deveria fazer o tráfego da porta de saída DNAT 80 para 192.168 .5.1: 8080 no proxy. Eu posso comprar isso, mas POR QUE ???? Tem algo a ver com a forma como o tráfego é tratado depois que o ETH0 do proxy está saindo pelo gateway padrão da Internet? Eu preciso Grokar isso ou a minha cabeça vai explodir
QWade

2
O DNAT altera o endereço à medida que o pacote passa pelo firewall para chegar ao host desejado e, ao contrário, parece ter vindo do firewall. O DNAT quase nunca se aplica ao tráfego de saída, tratado pela regra MASQUERADE. Se o privproxy estivesse em outro host, o DNAT seria apropriado, com uma exceção apropriada para esse host.
BillThor

Bill, obrigado. É para onde meu cérebro reptiliano estava indo, mas é sempre bom ter validação. Portanto, se eu enviar um pacote destinado ao google.com a partir de 192.168.5.234 e ele tiver seu gw padrão definido como 192.168.5.1 (eth1 no proxy), devo "REDIRECIONAR" esse pacote para a porta 8080 no proxy e deixar o privoxy o resto. A razão para isso é porque o privoxy vive em 192.168.5.1 e não em outro host. Estou fumando algo que não deveria?
QWade 8/09/10

9

REDIRECTaltera o endereço IP de destino a ser enviado para a máquina, conforme respondido por Warner @. Mas eu diria que a resposta não é totalmente correta ou um pouco enganadora.

REDIRECTnão é apenas para redirecionar pacotes locais. É realmente DNATem que o endereço IP de destino a ser usado está implícito, 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.

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

Como REDIRECTvocê não precisa especificar o endereço IP, ele será o correto, mas ele terá algumas vantagens 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 versões ligeiramente diferentes devido aos endereços IP específicos.


de alguma forma, como snat / mascarada.
Jichao

@Hod, eu ouvi dizer que REDIRECT é um caso especial do DNAT, mas eu uso REDIRECT e o TOR conhece o destino real de um pacote, então concluo que o daddr e o dport das estruturas iphdr e tcphdr estão intactos, e o pacote acabou de retornar ao destino REDIRECT por núcleo. O DNAT realmente modificará as estruturas. Estou errado?
wick
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.