Differenza tra DNAT e REDIRECT in IPTABLES


14

Ok, potrebbe essere perché sono denso o forse non trovo la fonte giusta, ma non riesco a capire perché una di queste configurazioni IPTABLES sarebbe migliore dell'altra.

Ecco la mia configurazione:

Ho una scatola che funge da proxy trasparente e router o sorta. Ha due interfacce su di esso, ETH0 ed ETH1, e il seguente schema di indirizzi:

ETH0 = DHCP ETH1 = 192.168.5.1/24 che serve DHCP per la rete 192.168.5.0/24 ai client dietro di essa nella LAN

Ho installato privoxy e l'ascolto sulla porta 8080 come proxy trasparente. Quello che sto realizzando con questa configurazione è riuscire a rilasciare questa casella in una rete esistente con una configurazione minima e client collegati al proxy.

Ecco il mio file IPTABLES originale

*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

Questa configurazione funziona bene e il traffico scorre avanti e indietro senza problemi. Ottengo l'indirizzo IP dei client di origine nei file di registro privoxy e la vita è buona.

La mia confusione arriva quando inizio a guardare le configurazioni di altre persone e vedo che stanno usando DNAT invece di REDIRECT, e sto cercando di capire il vero vantaggio dell'uno rispetto all'altro. Ecco un esempio di configurazione:

*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

Ancora una volta, anche questa configurazione funziona e mi dà tutto ciò di cui ho bisogno dal punto di vista della registrazione ...

Qual è giusto o forse PIÙ giusto dell'altro?

Grazie per aver dedicato del tempo a leggere così lontano ...

Risposte:


14

REDIRECTmodifica l'indirizzo IP di destinazione da inviare alla macchina stessa. In altre parole, i pacchetti generati localmente vengono mappati all'indirizzo 127.0.0.1. Serve per reindirizzare i pacchetti locali. Se desideri solo reindirizzare il traffico tra i servizi sul computer locale, sarà una buona scelta.

DNATè la traduzione effettiva dell'indirizzo di rete . Se si desidera che i pacchetti destinati al di fuori del sistema locale subiscano un'alterazione della destinazione, è la scelta migliore delle due, poiché REDIRECTnon funzionerà.


ok, quindi se ho un client dietro il proxy, dì 192.168.5.234 e voglio "elaborare" le sue richieste HTTP attraverso il proxy su 192.168.5.1, stai suggerendo che dovrei DNAT il traffico della porta in uscita 80 a 192.168 .5.1: 8080 sul proxy. Posso comprarlo, ma PERCHÉ ???? Ha a che fare con il modo in cui viene gestito il traffico una volta che il proxy ETH0 è uscito attraverso il gateway predefinito a Internet? Ho bisogno di lamentarmi o la mia testa esploderà
QWade,

2
DNAT modifica l'indirizzo mentre il pacchetto passa attraverso il firewall in modo che arrivi all'host desiderato e sul retro sembra provenire dal firewall. DNAT non si applica quasi mai al traffico in uscita, gestito dalla regola MASQUERADE. Se il privproxy si trovava su un altro host, DNAT sarebbe appropriato, con un'eccezione appropriata per quell'host.
BillThor,

Bill, grazie. È lì che andava il mio cervello rettiliano, ma è sempre bello avere una convalida. Quindi, se invio un pacchetto destinato a google.com da 192.168.5.234 e ha il suo predefinito gw impostato come 192.168.5.1 (eth1 sul proxy), dovrei "REDIRECT" quel pacchetto alla porta 8080 sul proxy e lasciare privoxy fare il riposo. La ragione di ciò è perché privoxy vive su 192.168.5.1 e non su un altro host. Sto fumando qualcosa che non dovrei?
QWade,

9

REDIRECTaltera l'indirizzo IP di destinazione da inviare alla macchina stessa come ha risposto Warner @. Ma direi che la risposta non è del tutto corretta, o un po 'fuorviante.

REDIRECTnon è solo per reindirizzare i pacchetti locali. È davvero DNATin cui l'indirizzo IP di destinazione da utilizzare è implicito, 127.0.0.1 se si tratta di un pacchetto locale o dell'indirizzo IP dell'interfaccia macchina, altrimenti 192.168.5.1 nel caso dell'OP.

Quindi in questa domanda, indipendentemente dalla destinazione finale, i pacchetti dovrebbero prima raggiungere il proxy, quindi REDIRECTè perfettamente adatto.

Poiché con REDIRECTte non è necessario specificare l'indirizzo IP, prenderà solo quello giusto, ha alcuni vantaggi rispetto a DNAT:

  • Se l'indirizzo IP della macchina cambia per qualsiasi motivo, non è necessario modificare le regole e, in particolare DNAT, non funzionerà per le interfacce controllate da DHCP.

  • È possibile scrivere e mantenere le stesse regole per diversi sistemi (ad esempio diverse istanze proxy) senza mantenere versioni leggermente diverse a causa degli indirizzi IP specifici.


in qualche modo piace snat / masquerade.
Jichao,

@Hod, ho sentito che REDIRECT è un caso speciale di DNAT, ma uso REDIRECT e TOR conosce la destinazione effettiva di un pacchetto, quindi concludo che daddr e dport di strutture iphdr e tcphdr sono intatti e il pacchetto è appena tornato a destinazione REDIRECT da kernel. DNAT modificherà effettivamente le strutture. Ho sbagliato?
stoppino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.