Gerdchen03
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Ich habe einen Router, der als Standard-Gateway (IP 192.168.1.4) meines Netzes arbeitet. Die meisten meiner PCs sind mit DHCP online. Ich möchte, nun, dass mein Router Anfragen von egal welchem lokalen Rechner an einen bestimmten Port (8000) nicht über den Internetanschluss rausschickt, sondern an einen anderen Rechner (IP 192.168.1.6) im lokalen Netz umleitet. Soweit ich das überblicke, sollte das mit iptables möglich sein. Meine Idee war:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 8000 -j REDIRECT --to-source 192.168.1.6 Das scheint aber nicht zu gehen. Um Tips, welchen Fehle ich mache, wäre ich dankbar. Bearbeitet von sebix: Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!
|
Into_the_Pit
Ehemalige
Anmeldungsdatum: 25. Juni 2008
Beiträge: 9490
Wohnort: Bochum
|
Gerdchen03 schrieb: Um Tips, welchen Fehle ich mache, wäre ich dankbar.
Wenn die Pakete im lokalen Netz bleiben sollen, wird Dein Router da nichts routen. Du brauchst zudem auch nur die Ziel-IP angeben in Kombination mit dem Port, ein NAT wird da nicht funktionieren, da keine Adressübersetzung stattfindet. Vielleicht solltest Du Deinen Einsatzzweck etwas genauer beschreiben.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Gerdchen03 schrieb: Meine Idee war: iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 8000 -j REDIRECT --to-source 192.168.1.6
REDIRECT kann nur Ports auf die eigene Maschine umleiten. Du brauchst daher DNAT. Meine Idee wäre:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 8000 -j DNAT --to-destination 192.168.1.6
Nicht vergessen auch noch ein SNAT bzw.MASQUERADING einzurichten, da sonst die Antworten direkt zurückgeroutet werden, was natürlich nicht funktioniert.
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Ich versuch es detailliert zu beschreiben. Es ist etwas kompliziert, und ich wollte es nach Möglichkeit vereinfachen. Ich habe einen Server gemietet, auf dem VPN läuft. Mit diesem VPN kann ich von Rechnern aus, die an vollkommen unterschiedlichen Orten stehen, auf mein internes Netz zugreifen. Ich surfe auch über diesen VPN, d.h. alle Netzdaten gehen über den VPN.
Mein Computer auf der Arbeit hat beispielsweise auf dem VPN-Server die IP 10.3.4.3. Wenn ich auf das Webinterface meiner Heizungsanlage zugreifen möchte, gebe ich www.portal-meiner-heizung.de:50000 ein. Da das Portal mit dem VPN nicht richtig funktioniert (liegt ggf. an der Länderkennung), möchte ich hier die externe IP des VPN ausnahmsweise und vollkommen automatisch umgehen. Dazu wollte ich iptables auf dem VPN so einstellen, dass jede Anfrage aus dem Netz 10.3.4.0/24 auf dem Port 50000 nicht über den Internetanschluss des VPN ins Internet geht, sondern weitergeleitet wird zur Fritzbox (192.168.1.1) und mit meiner externen IP ins Netz geht. Sorry, wenn es umständlich erklärt ist, aber ich hoffe man kann es nachvollziehen. Nach dem was zuvor geschrieben wurde, müsste folgendes eigentlich funktionieren:
iptables -t nat -A PREROUTING -s 10.3.4.0/24 -p tcp --dport 50000 -j DNAT --to-destination 192.168.1.1 Ich hab es getestet, aber es klappt nicht. Zu Testzwecken habe ich mal ohne Porteinschränkung probiert:
iptables -t nat -A PREROUTING -s 10.3.4.0/24 -p tcp -j DNAT --to-destination 192.168.1.1 Nun müsste ja der komplette Verkehr von den Arbeits-PC zum VPN, zur Fritzbox und dann mit meiner externen IP zuhause ins Netz gehen.
Mit traceroute www.google.de habe ich versucht das zu überprüfen, aber der Umweg über die Fritzbox scheint nicht zu funktionieren.
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Hier mal noch meine bisherige iptables:
iptables -I FORWARD -i tun0 -j ACCEPT
iptables -I FORWARD -o tun0 -j ACCEPT
iptables -I FORWARD -s 10.3.4.0/24 -o tun0 -j DROP
iptables -t nat -A PREROUTING -s 10.3.4.0/24 -p tcp --dport 50000 -j DNAT --to-source 192.168.1.1
iptables -t nat -A POSTROUTING -o venet0 -s 10.3.4.0/24 -j SNAT --to-source "ext. IP VPN"
exit 0
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7658
|
Selbst wenn das Paket es bis zur Fritzbox schafft, wie gehts dann weiter...?
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Ich dachte, die Fritzbox nimmt es dann und schickt es weiter zum Provider. Das seh ich scheinbar falsch!? ☺ Dann müsste also abgesehen von meiner oben erläuterten Frage dem VPN noch beigebracht werden, dass in dem Falle die Pakete nicht nur an die Fritzbos weitergeleitet werden, sondern dass die Fritzbox Gateway ist?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Gerdchen03 schrieb: Wenn ich auf das Webinterface meiner Heizungsanlage zugreifen möchte, gebe ich www.portal-meiner-heizung.de:50000 ein. Da das Portal mit dem VPN nicht richtig funktioniert (liegt ggf. an der Länderkennung), möchte ich hier die externe IP des VPN ausnahmsweise und vollkommen automatisch umgehen. Dazu wollte ich iptables auf dem VPN so einstellen, dass jede Anfrage aus dem Netz 10.3.4.0/24 auf dem Port 50000 nicht über den Internetanschluss des VPN ins Internet geht, sondern weitergeleitet wird zur Fritzbox (192.168.1.1) und mit meiner externen IP ins Netz geht.
Das ist meines Erachtens der falsche Lösungsansatz. Das ist doch eigentlich ein simples Rounting-Problem, welches du auf dem Client folgendermaßen lösen kannst:
ip route add $IP_DES_PORTALS via 192.168.1.1
Nach dem was zuvor geschrieben wurde, müsste folgendes eigentlich funktionieren:
iptables -t nat -A PREROUTING -s 10.3.4.0/24 -p tcp --dport 50000 -j DNAT --to-destination 192.168.1.1
Nein, denn du schreibst ja die Zieladresse um. Das neue Ziel ist die Fritzbox, und da dort kein Dienst auf Port 50000 lauscht, wird das Paket verworfen. Umleitung =/= Routing.
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
OK, ich denke mein Ansatz ist nicht umsetzbar. Nun eine andere Idee.
An jedem Standort arbeitet ein Raspberry Pi als VPN Gateway. Er ist nur per LAN an die Fritzbox angeschlossen. Dadurch muss nicht auf jedem Rechner VPN installiert werden, das Netzwerk ist automatisch im VPN. Man könnte ja mit iptables auf dem Raspberry den Port 50000 für den Tunnel sperren. Der restliche Verkehr würde weiter in den Tunnel gelangen. Mit einer weiteren Regel würde man die Anfrage auf Port 50000 an das WLAN, wenn ich das auch mit der Fritzbox verbinde, des Raspberrys leiten. Denn per WLAN wäre er dann ohne VPN an die Fritzbox angeschlossen. Bisher lautet iptables auf dem Raspberry: -A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o tun0 -j MASQUERADE sorry, wenn meine Frage vielleicht dumm ist, aber ich würd gerne mehr davon verstehen. Das sperren sollte ja so funktionieren:
-I FORWARD -o tun0 --dport 50000 -j DROP
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o tun0 -j MASQUERADE
Wenn ich das richtig verstehe, routen POSTROUTE -o eth0 und POSTROUTE -o tun0 erst mal alles von eth0 in den Tunnel. Die FORWARD-Regel sollte nun ja alles, was an den Dest.-Port 50000 geht und über den Tunnel raus will, verwerfen. Nun noch das umleiten:
-A PREROUTING --dport 50000 --to-destination 192.168.1.7 (WLAN IP Raspberry)
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Gerdchen03 schrieb: Man könnte ja mit iptables auf dem Raspberry den Port 50000 für den Tunnel sperren. Der restliche Verkehr würde weiter in den Tunnel gelangen. Mit einer weiteren Regel würde man die Anfrage auf Port 50000 an das WLAN, wenn ich das auch mit der Fritzbox verbinde, des Raspberrys leiten. Denn per WLAN wäre er dann ohne VPN an die Fritzbox angeschlossen.
Deine Denkweise ist hier noch falsch. Dein Problem ist nicht mit iptables (zumindest nicht sinnvoll) lösbar. Wenn du einen Raspi hast, der als Gateway dient, ist doch alles super: Dann konfigurierst du die Route einfach dort, wie ich beschrieben habe.
sorry, wenn meine Frage vielleicht dumm ist, aber ich würd gerne mehr davon verstehen.
Dann will ich noch etwas Kontext geben: iptables ist ein Paketfilter. Mit diesem Filter kannst du einzelne Pakete filtern oder verändern. Wichtig ist zu verstehen, dass du wirklich nur die Pakete veränderst. Was danach damit passiert, also beispielsweise wohin die Pakete gehen, ist iptables egal . Grundsätzlich besteht ein IP-Paket aus einem Header-Bereich und dem Payload. Im Header eines IP-Pakets stehen einige Meta-Informationen, wie beispielsweise von welcher Quell-Adresse es kommt, und zu welcher Zieladresse es gehen soll. Wenn du jetzt eine Anfrage an www.portal-deiner-heizung.de:50000 stellst, wird das System den Name auflösen, und ein Paket generieren. Dieses Paket wird vom Kernel entsprechend seiner Routing-Tabelle verschickt. Auf deinem Client-Rechner heißt das also, das Paket wird zum Raspi geschickt, weil er das Default-Gateway ist. Der Raspi nimmt das Paket entgegen, sieht, dass es nicht für ihn bestimmt ist, und leitet es anschließend weiter. Wohin, das entscheidet wieder der Kernel. Entweder es existiert eine spezielle Route für das Ziel, oder er nimmt die Default-Route. Wenn die Default-Route durchs VPN geht, dann schickt er es eben zur weiteren Behandlung zum VPN-Server. Dein Ansatz war es jetzt, die Zieladressen der Pakete von $(host www.portal-deiner-heizung.de) auf 192.168.1.1 zu ändern. Was passiert anschließend? Richtig, der Raspi sieht, dass das Netz 192.168.1.1 direkt anliegt (und damit eine speziellere Route existiert), und schickt es zur Fritzbox. Diese sieht das Paket und nimmt an, dass es für sie als Endziel bestimmt ist. Die Information, dass es eigentlich zu einem ganz anderen Ziel soll, ist nicht mehr vorhanden. Da auf der Fritzbox der Port 50000 normalerweise nicht gebunden ist, wird sie das Paket verwerfen. Ein Destination-NAT ist also nicht zielführend. Was du verändern musst, ist der Weg, den das Paket nimmt. Und das machst du nicht per iptables, sondern mit der Routing-Tabelle.
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Danke!!!! Das hab ich verstanden und merke nun wo mein Denkfehler lag!!
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7658
|
Fritzbox als Endziel kann ja auch funktionieren, nur muss die Fritzbox dann den gleichen Kunstgriff machen und das wieder auf das Wunschziel umbrechen. Ich hab zwar selbst eine Fritzbox aber mache da nix anspruchsvolles, keine Ahnung ob man dort so eine Weiter-Weiterleitung überhaupt einstellen könnte. Solange du es mit Routen lösen kannst ist das definitiv vorzuziehen, der "Nachteil" von Routen ist - daß es in beide Richtungen klappen muss. Bei einer Route nur in einer Richtung, kommen die Pakete zwar zum Ziel, aber vom Ziel nicht mehr zurück. Also wenn bei der Fritzbox Pakete landen mit Absender einer VPN-internen IP die die Fritzbox nicht kennt, brauchst an der Fritzbox eine Route die das wieder zurück zum Raspi-VPN-Server schicken will.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
frostschutz schrieb: Fritzbox als Endziel kann ja auch funktionieren, nur muss die Fritzbox dann den gleichen Kunstgriff machen und das wieder auf das Wunschziel umbrechen.
Das ist richtig.
Ich hab zwar selbst eine Fritzbox aber mache da nix anspruchsvolles, keine Ahnung ob man dort so eine Weiter-Weiterleitung überhaupt einstellen könnte.
Also mit dem normalen FritzOS ist es meines Wissens nicht möglich. Es gibt auch alternative Firmware, beispielsweise Freetz, damit wäre das möglich. Ist aber wie gesagt ziemliches Gefummel.
Solange du es mit Routen lösen kannst ist das definitiv vorzuziehen, der "Nachteil" von Routen ist - daß es in beide Richtungen klappen muss. Bei einer Route nur in einer Richtung, kommen die Pakete zwar zum Ziel, aber vom Ziel nicht mehr zurück. Also wenn bei der Fritzbox Pakete landen mit Absender einer VPN-internen IP die die Fritzbox nicht kennt, brauchst an der Fritzbox eine Route die das wieder zurück zum Raspi-VPN-Server schicken will.
Da sowohl Raspi als auch Fritzbox MASQUERADING machen, sollte das kein Problem sein.
|
Gerdchen03
(Themenstarter)
Anmeldungsdatum: 25. Februar 2011
Beiträge: 97
|
Nun hab ich mal etwas zu Route im Netz gelesen, und ich versuche das auch etwas besser zu verstehen. Dein Vorschlag war:
ip route add $IP_DES_PORTALS via 192.168.1.1 Da die IP unter Umständen auch mal eine andere sein kann, wäre es vielleicht nützlich, wenn sich die Regel nach dem Port richten würde (ist jetzt bei mir nicht der Fall, geht mir nur ums Verständnis):
ip route add (Port 50000) via 192.168.1.1
(sowas gibt es nicht ich weiß, will nur meinen Gedanken verdeutlichen) Könnte man das so umsetzen? iptables -t mangle -A PREROUTING -p tcp –dport 50000 -j MARK –set-mark 0×1
in /etc/iproute2/rt_table eintragen:
100 wlan
ip rule add fwmark 0×1 lookup wlan
ip route add default via 192.168.1.1 table wlan
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Gerdchen03 schrieb: Könnte man das so umsetzen?
iptables -t mangle -A PREROUTING -p tcp --dport 50000 -j MARK --set-mark 0×1
in /etc/iproute2/rt_table eintragen:
100 wlan
ip rule add fwmark 0×1 lookup wlan
ip route add default via 192.168.1.1 table wlan
Ja. Das nennt sich dann policy-basiertes Routing. Die entsprechende Routing-Tabelle würde ich noch etwas eleganter nennen, aber sonst sollte es funktionieren 😉
|