Ã?hm.. also erstmal wollte ich noch anmerken, dass ich bisher noch kein DNAT ausser lokalem gemacht habe. Mein Wissen ist da also rein "theoretisch"... :)
Folgendes Netz liegt vor:
192.168.0.250: Linux-Router mit DSL
192.168.0.249: Linux als DNS und Proxy
192.168.0.41: WinXP Pro als Client
Welche Netzmaske? Ich nehme an, /24, also 255.255.255.0?
Gehe ich also richtig in der Annahme, dass alle Rechner im selben Subnet sind und sich auch alle gegenseitig direkt erreichen können?
Code: Select all
iptables -t nat -A PREROUTING -i eth0 -p tcp -s ! 192.168.0.249 --dport 80 -j REDIRECT --to 192.168.0.249:3128
Würde das Sinn machen ?
Nein, absolut nicht, denn das ist ja schon syntaktisch falsch. Oder nimmt dein iptables das etwa ohne Murren an?
Aus meiner man-page von iptables:
REDIRECT
This target is only valid in the nat table, in the PREÂ
ROUTING and OUTPUT chains, and user-defined chains which
are only called from those chains. It alters the destinaÂ
tion IP address to send the packet to the machine itself
(locally-generated packets are mapped to the 127.0.0.1
address). It takes one option:
--to-ports <port>[-<port>]
This specifies a destination port or range or ports
to use: without this, the destination port is never
altered. This is only valid with if the rule also
specifies -p tcp or -p udp).
Du kannst also nicht REDIRECT in Verbindung mit -to und einer IP:Port Kombination verwenden. Ausser, es hätte sich da etwas von meiner iptables Version zu deiner geändert...
Mein Problem scheint nun zu sein, dass die Anfragen ja zuerst an den Router kommen. Der schickt Sie dann mit dem obigen Eintrag an den Proxy Port 3128 statt Router Port 80. Nur sendet der Proxy dann ja wieder an den Router und ich habe eine wunderbare Schleife, oder ?
Der Anfang ist korrekt, ja. Der letze Satz ist jedoch falsch. Wenn meine Annahmen von oben zutreffend sind, dann schickt dein Proxy die Antwort eben direkt an den Client und umgeht die NAT Box. Damit wird das NAT nicht mehr "zurückübersetzt" und der Client erkennt die Antwort nicht als "gültig" an. Genau dieses Problem ist in dem Link beschrieben, den ich oben schon gepostet habe. Bitte da mal nachlesen. Wenn was unklar ist, dann nachfragen. Wenn es mit Englisch hapert (ich nehme halt immer das Englische zum nachlesen, wenn ich die Wahl habe...), dann nimm die deutsche Ã?bersetzung, die es davon gibt.
Dort ist auch eine Lösung beschrieben: Die Source IP vom Client auf der NAT Box in der POSTROUTING Chain zusätzlich ändern und auf die NAT Box umschreiben. Somit gehen die Antworten vom Proxy wieder zuerst an die NAT Box und diese kann sie korrekt "zurück umschreiben" und an den Client weiterleiten.
Eine andere (dort nicht genannte) Alternative wäre (unter der Annahme, dass sowohl die NAT Box als auch der Proxy unter Linux laufen), den beiden Kisten noch ein zusätzliches virtuelles Interface in einem anderen Subnet zu spendieren und den Proxy dann nur an diese IP zu binden. Somit können sich Proxy und Client nicht direkt erreichen und du hast die ganzen Probleme nicht und kannst ganz "normales" DNAT machen, mit dem zu allerst genannten Befehl machen. (Das sollte dann eigentlich funktionieren...)
ch hoffe ich nerve nicht
Nee, da musst du dir schon noch mehr leisten...
(Was jetzt nicht heisst, dass du das unbedingt tun sollst...) :)
PS: Ich verschiebe das Ding mal komplett nach Security. Proxies und iptables gehören IMHO mehr dahin.