Hallo Liste, habe bei mir einen Router mit einem Script in IPTABLES laufen, in welchen auch ein transparenter Proxy eingebaut ist. Das ganze läuft für mein HOMENETZ auch sehr gut und es funktioniert alles. Jetzt möchte ich aber das sich einer meiner Rechner wenn er auf eine bestimmte IP und einen bestimmten PORT geht nicht über den PROXY geht sodern direkt auf die IP zugreift. Irgendwie klappt das aber nicht, was muss ich denn jetzt wo in meinem Script eintragen, irgendwas in dieser Art: iptables -t nat -A PREROUTING -p tcp -s 192.168.3.70:1098 -j DNAT --to-destination 123.456.789.012:1723 Hat jemand einen Tip? Gruß Sven
Hallo Sven, Du brauchst neben dieser Prerouting-Regel auch noch eine Forward-Regel, damit dein Vorhaben klappt, weil die Daten ja immer in zwei Richtungen gehen... Gruß, Sebastian www.wolfgarten.com
Hast Du zufällig einen Tipp wie die genau aussehen müsste? z.B. $IPTABLES -A FORWARD -s 192.168.3.70 -i ppp0 --to-destination 123.456.789.123 -j ACCEPT und sollte dies passen wo setze ich diese beiden Regeln denn hin? - vor oder hinter die Umleitung auf den transparenten Proxy Gruß Sven
Am Montag, 2. Dezember 2002 16:36 schrieb Sven Kröger:
Hast Du zufällig einen Tipp wie die genau aussehen müsste?
z.B.
$IPTABLES -A FORWARD -s 192.168.3.70 -i ppp0 --to-destination 123.456.789.123 -j ACCEPT
und sollte dies passen wo setze ich diese beiden Regeln denn hin? - vor oder hinter die Umleitung auf den transparenten Proxy
transparenter Proxy mit Squid Kurz und schmerzlos die Allerwelts-Lösung (funxt bei HTTP immer): IPT = /usr/sbin/iptables INT = (IP des internen Devices) EXT = (IP des externen Devices) p_high = 1024:65535 PROXY = 192.168.99.254:3128 # oder welche IP:Port auch immer, ggf. # sogal localhost ... $IPT -t nat -A PREROUTING -i $INT -p TCP \ --sport $p_high --dport 80 \ -j DNAT --to-source $PROXY Zur Erklärung: Alle von intern einkommenden Paketanfragen (Zielport: 80) werden unter Eintrag in eine NAT geroutet (also wie beim normalen Masquerading), aber nicht maskiert nach extern geschickt, sondern noch über eine Destination-NAT an den angebenen Proxy geschickt, der dann entsprechend reagieren muss. Das schöne ist, dass der Proxy noch nicht mal auf dem Router selbst liegen muss. Allerdings muss Squid noch entsprechend konfiguriert werden in der squid.conf: http_port 3128 http_accel_host virtual http_accel_port 80 http_accel_with_proxy on http_accel_uses_host_header on Ich nehme an, so hast du das bisher auch. Wenn du jetzt von einem bestimmten Host aus auf einen bestimmten Internet-Host am Proxy vorbei willst, musst du nur die entsprechende iptables-Regel _vor_ dem Prerouting eintragen (ich nehme mal an, dass er trotzdem maskiert werden soll): *ungetestet* INTSPEZ = (besonders berechtigter eigender PC) EXTSPEZ = (der spezielle Zielrechner) ... $IPT -t nat -A POSTROUTING -i $INT -s $INTSPEZ \ -o $EXT -d $EXTSPEZ -j MASQUERADE # kann man ggf. noch mit --sport und --dport ergänzen Ohne Masquerading wäre es nur eine einfache FORWARD-Regel (natürlich auch eingetragen _vor_ dem PREROUTING für den transparenten Proxy) ... $IPT -A FORWARD -i $INT -s $INTSPEZ -o $EXT -d $EXTSPEZ \ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # und die Rückrichtung: $IPT -A FORWARD -i $EXT -s $EXTSPEZ -o $INT -d $INTSPEZ \ -m state --state ESTABLISHED,RELATED -j ACCEPT # ggf. auch wieder beide regeln mit entsprechenden Port-/Protokollangaben # erweiterbar Alles ungetestet, aber es sollte klappen. -- Gruß MaxX
participants (3)
-
Matthias Houdek
-
Sebastian Wolfgarten
-
Sven Kröger