iptables Problem? Client1 <-> Wireguard-Server <-> Client2 (Router) <-> LAN hinterm Client

Schmidtie

New member
Hallo liebes Forum,

ihr seit eine große Hoffnung für mich mein Knoten im Hirn lösen zu können, denn alle Recherchen im Internet bringen mich blöderweise nicht mehr weiter. Dabei schafft das große WWW das für gewöhnlich.

Vielleicht kennt sich ja jemand mit dem Thema aus. Ich habe es bei "Firewall" einsortiert, weil ich vermute dass genau da das Problem ist.

Mal sehen ob mir die Beschreibung halbwegs verständlich gelingt:

Ich betreibe einen Server in einem Rechenzentrum mit einem Wireguard als Server drauf (VPN Netz: 172.31.0.0/24). Darauf greifen diverse Clients zu. Eine Kommunikation zwischen den Clients funktioniert auch super.

Hinter dem Server steht noch ein weiteres Netzwerk mit diversen Geräten (LAN Netz hier: 172.21.0.0/24). Auch darauf können alle Wireguard-Clients zugreifen.

Ein Wireguard-Client ist eine aktuelle Fritzbox 7590 AX mit aktueller Firmware und einem funktionierendem Wireguard. Hinter dieser Fritzbox befindet sich natürlich auch ein Netzwerk (das übliche 192.168.178.0/24).

Was mir ums verrecken nicht gelingt ist, das ein Wireguard-Client (Smartphone) über den Wireguard-Server auf Teilnehmer des FritzBox-LANs zugreifen kann.

Ich versuche das mal zu verdeutlichen:
* Client1 (Smartphone / 172.31.0.3) <-> Wireguard-Server (172.31.0.1): CHECK
* Client1 (Smartphone / 172.31.0.3) <-> Wireguard-Server (172.31.0.1) <-> Server-NetzClients (172.21.0.0/24): CHECK
* Client1 (Smartphone / 172.31.0.3) <-> Wireguard-Server (172.31.0.1) <-> Fritzbox als Wireguard-Client (172.31.0.2): CHECK
* Fritzbox (172.31.0.2) <-> Wireguard-Server: CHECK
* Fritzbox (172.31.0.2) <-> Wireguard-Server <-> Client1 (Smartphone / 172.31.0.3): CHECK
* Fritzbox (172.31.0.2) <-> Wireguard-Server <-> Server-Netzclients (172.21.0.0/24): CHECK
* Clients-Fitzbox (192.168.178.0/24) <-> FritzBox <-> Wireguard-Server <-> Client1 (Smartphone über VPN-IP-Adresse 172.31.0.3): CHECK
* Clients-Fitzbox (192.168.178.0/24) <-> FritzBox <-> Wireguard-Server <-> Server-NetzClients (172.21.0.0/24): CHECK
* Wireguard-Server <-> Fritzbox <-> Clients-Fritzbox (192.168.178.0/24): CHECK
* Client1 (Smartphone) <-> Wireguard-Server <-> Fritzbox <-> Clients-Fitzbox (192.168.178.0/24): FAILED

Client1 hat dabei natürlich als "AllowedIP" das Netz "192.168.178.0/24" konfiguriert bekommen. Auch der Wireguard-Server ist entsprechend konfiguriert, denn die Kommunikation vom Server aus in das Fritzbox-LAN geht grundsätzlich.

Ich habe nun nach diversen Recherchen auf dem Wireguard-Server entsprechende iptables-Befehle konfiguriert (die Wireguard selbständig setzt). Da ich da aber ein großer Nook bin und nur 10% verstehe, bin ich mir nicht sicher ob alle Regeln so notwendig sind, sich eventuell in die Quere kommen könnten und welche vielleicht fehlen.

Folgende Regeln haben mich ein klein wenig vorwärts gebracht (auf dem Server):

Bash:
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT
iptables -t nat -A PREROUTING -d 192.168.178.0/24 -j DNAT --to-destination 172.31.0.2
iptables -t filter -A FORWARD -s 172.31.0.0/24 -d 192.168.178.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.31.0.0/24 -d 192.168.178.0/24 -j MASQUERADE
iptables -t filter -A FORWARD -s 192.168.178.0/24 -d 172.31.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.178.0/24 -d 172.31.0.0/24 -j MASQUERADE

Vom Client1 ist zumindest ein PING zu einem Fritzbox-Client möglich. Das heißt, es gibt ein echo request, allerdings weiß ich nicht von wem wirklich, da ein tcpdump (ist ein Raspberry, den ich da versuche zu erreichen) auf dem Fritzbox-Client nichts ausspuckt bei einem PING vom Client1. Sehr wohl aber, wenn der PING vom Wireguard-Server kommt.

Auch SSH Zugriffsversuche vom Client1 zu dem Raspberry gelingen nicht.

Ich bin mir fast sicher, dass die iptables-Regeln so nicht ausreichend sind.

Hoffentlich ist meine Ausführung nicht zu verwirrend.

Danke schon mal für das Lesen und die Geduld dabei.

Schmidtie
 
Wenn überall ICMP aktiviert ist, könnte ein Traceroute (von beiden Richtungen) noch interessant sein und ggf. auch zur passenden "Idee" führen. Von NAT "innerhalb" eines VPN-Konstruktes halte ich persönlich aber mal so garnichts (sofern nicht unbedingt notwendig, weil manche Zielnetze der Gegenseite nicht bekannt sind (bzw. nicht bekannt sein "dürfen")).
 
Wenn überall ICMP aktiviert ist, könnte ein Traceroute (von beiden Richtungen) noch interessant sein und ggf. auch zur passenden "Idee" führen.

Hi :)

Danke für Deine Reaktion!

Also Traceroute verhält sich genau so merkwürdig wie ping und die nicht protokollierten ICMP Pakete auf dem Raspberry.
Konkret habe ich das traceroute vom Smartphone gestartet, 2 hops angezeigt bekommen, beide direkt die IP aus dem Fritzbox-LAN des Raspberry (192.168...). Keine Hops dazwischen. Merkwürdig, spiegelt aber wieder dass da etwas nicht passt.

Ich bin nun einen anderen Weg testweise gegangen:

Fritzbox rausgenommen, Raspberry hinter der Fritzbox als Client genutzt.

Auf dem Server und auf dem Raspi diese iptables Regeln setzen lassen:

Bash:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Bzw. auf dem Server mit der Schnittstelle eth1 aus Gründen ;). Keine weiteren Regeln. Durch die wg0.confs auf den beiden Geräten werden die Routen gesetzt. Die Fritzbox habe ich angewiesen Routen zum VPN (172.31.) und zum Servernetz (172.21.) direkt an den Raspi zu setzen.

Und alles läuft genau so wie ich es will.

Nutze ich die identische Config auf der Fritzbox selbst (wobei sich hier keine iptables cmds absetzen lassen ... die schluckt die Fritzbox einfach), habe ich den Zustand das bei einem traceroute ins 192er Netz als letzter Hop die VPN-IP-Adresse der Fritzbox (172.31.0.2) gesetzt wird. Danach hört es auf.

Die vielen iptables Regeln sind also per se gar nicht notwendig, aber ich kann der Fritzbox ums verrecken nicht beibringen Anfragen aus dem VPN ins Netz zu lassen. Kann man die Firewall-Regeln der Fritzbox irgendwo offiziell (über support.lua o.ä.) editieren? Ohne Custom-Firmware?

Raspi ist zwar eine Option, aber mir wäre es lieber direkt mit der Fritzbox abzuarbeiten. Der Raspi hat andere Aufgaben ;)

Von NAT "innerhalb" eines VPN-Konstruktes halte ich persönlich aber mal so garnichts (sofern nicht unbedingt notwendig, weil manche Zielnetze der Gegenseite nicht bekannt sind (bzw. nicht bekannt sein "dürfen")).

Was ich bisher nicht erwähnt habe (weil eigentlich unwichtig): Der Wireguard auf dem Server steckt in einem Docker-Container. Mittels Docker habe ich ein virtuelles Netz auf dem Server gespannt und weitere Container dort aufgenommen. Die haben allesamt keinen direkten Kontakt zum Internet, können aber innerhalb des virtuellen Netzes miteinander kommunizieren. Einziger Einstiegspunkt ist der Wireguard-Container.

Ziel meinerseits ist es alle "privaten" Geräte außerhalb des Servers und diese Container von bestimmten Clients erreichbar zu machen (meinen Admin-Geräten, wenn Du so willst). Dabei will ich unterwegs nur bestimmte Geräte nutzen (Tablet und Smartphone mit Mobilfunkverbindung/WLAN) und daheim (im Netz der Fritzbox) mit diversen PC/Notebooks. Ziele die ich erreichen will sind der Server, Container im dafür eingerichteten Netzwerk auf dem Server und bspw. den Raspi und ein NAS im Heimnetz. Habe also 3 private Netze die ich managen muss. Und u.U. kommt ein viertes (andere Fritzbox mit angepasster Netzwerkconfig) dazu.

Ich weiß, auch Docker ist kein Allheilmittel in Punkto Sicherheit, aber der Weg ist für mich sehr praktikabel.

Was sind Deine Bedenken konkret, wenn ich fragen darf? Würde das wirklich gerne wissen wollen um zu lernen :D

Danke noch Mals für die Geduld :giggle:
 
Noch mal ich. Ich schreibe das hier, falls jemand das interessieren sollte und so ein Forum lebt ja auch von solchen Infos.

Mein Vorhaben kann ich mir wohl so, wie ich es mir vorgestellt habe, abschminken. Dies habe ich in einem anderen Forum gelesen:

Die Fritzbox arbeitet nicht mit einem Transfernetz. Sie macht Proxy ARP für die VPN Clients. Man darf kein Transfernetz verwenden, sondern muss das jeweils lokale Netz der Fritzbox eintragen. Damit ist aber auch klar, dass man nur eine Fritzbox mit dem Server verbinden kann - spätestens bei der zweiten Fritzbox kann man diese Voraussetzung nicht mehr erfüllen.
Eine Idee kam dabei auf:
192.168.178er Netz zu wg0 auf dem Server, weitere Fritzbox (noch nicht bei mir im Plan) zu wg1 auf dem Server und für die restlichen autarken Clients ein weiteres VPN auf wg2. Und dann auf dem Server spielen ;).
Mal sehen ob ich darauf Bock habe das mal durchzuspielen. Wäre aber auf alle Fälle eine interessantere Lösung als Custom-Firmware auf die Fritzbox zu klatschen oder den Raspi zu missbrauchen.
 
Najo, Fritzboxen sind halt schon etwas merkwürdig - jedenfalls via IPSec (hat mir noch nie gefallen), was Du aber definitiv machen "kannst": Custom-VPN-Config erstellen und diese in der Fritzbox importieren, ist vielleicht eher etwas, als diese komischen Gedanken mit einer "custom Firmware" fortzuführen - wenn es denn "definitiv" via Fritzbox laufen "soll". Denke die eigens erstellte VPN-Config sollte Dich da schon weiter bringen. Allerdings: Das Netz 178 kann bzw. sollte es nur "einmal" geben, da muss dann ggf. an den Fritzboxen noch umgestellt werden (178->XXX).

Fakt ist aber, dass man sich - je nach Vorhaben - mitunter auch garnicht damit rumplagen sollte, denn die Fritzbox ist nach wie vor ein SOHO-Produkt und für derlei Spässe meist eher weniger geeignet (reicht die benutzerdefinierte VPN-Config nicht aus, ist man quasi am Ende mit den Möglichkeiten), da sollte man ggf. doch eher zu professionelleren Produkten greifen. Das nächst höhere Segment dürfte sich vermutlich in Richtung Draytek, Lancom, oder ähnlichem bewegen (als vollwertige Router-Lösung mit integriertem Modem).

...sondern muss das jeweils lokale Netz der Fritzbox eintragen. Damit ist aber auch klar, dass man nur eine Fritzbox mit dem Server verbinden kann - spätestens bei der zweiten Fritzbox kann man diese Voraussetzung nicht mehr erfüllen.
Ist aber schon klar, dass das "so" nicht richtig ist, oder? Netze der jeweiligen Router ändern und schon existiert das Problem garnicht mehr (danach müssen aber die automatisch generierten VPN-Configs neu erstellt werden). Wenn die Config händisch erstellt wird, kannst Du an Netzen und Regeln auch eintragen was Du willst bzw. ist das bei IPSec so, keine Ahnung, wie es bei Wireguard so läuft. Da der Server dann die zentrale Routing-Funktion übernimmt, wäre es dann halt am Server den Traffic zwischen den verschiedenen Fritzboxen/Clients zu regeln. Ist nur die Frage, ob Du Dir mit dem Einsatz der Fritzboxen einen Gefallen tust. Ist wie mit dem IPSec... hat man es einmal "richtig" durchgespielt, hat man eigentlich schon direkt keine Lust mehr auf die Fritzboxen (abgesehen von extrem vereinfachten Szenarien).

Kurz formuliert: Mach es Dir nicht unnötig komplizierter, als es ist.
 
OK, danke für das Feedback.
ggf. doch eher zu professionelleren Produkten greifen. Das nächst höhere Segment dürfte sich vermutlich in Richtung Draytek, Lancom, oder ähnlichem bewegen (als vollwertige Router-Lösung mit integriertem Modem).
Das ist keine wirkliche Option. Aus rein finanziellen Gründen und dem Hintergrund, dass die gesamte Geschichte rein privater Natur ist. Aber Du hast natürlich recht ... wenn man das im professionellen Umfeld aufziehen möchte/muss dann auch nur mit dafür konzipierter Hardware und nicht mit Consumer-Hardware.

Da alle meine bisherigen Versuche (bis auf einen) scheiterten, habe ich das nun so umgesetzt, wie ich es eigentlich nicht wollte.

Im LAN der Fritzbox fungiert nun der alte Raspi als WG-Client mit iptables Regeln und festen Routen zu meinen VPN/Server Netzen in der Fritzbox zum Raspi.

Wie ich nun die zweite Fritzbox anbinde überlege ich noch. Entweder auch so (müsste noch einen Raspi 2 rumliegen haben) oder ich baue ein weiteres VPN zwischen den FritzBoxen. Mir reicht die Erreichbarkeit des LAN der zweiten Fritzbox von daheim.
 
oder ich baue ein weiteres VPN zwischen den FritzBoxen.
Nur mal zum Verständnis: Du meinst damit die jeweils vorgelagerten Netze pro Standort? Die könnten einfach bei den übergebenen Routen mit angegeben werden, so dass jeweils beide Remote-Netze pro Standort über die VPN-Verbindung erreichbar wären. Wenn der Raspi im hinteren Netz liegt, kennt er halt auch den Weg ins vordere Netz (halt per default Gateway), oder hab ich Dich da falsch verstanden?

Nach der Umsetzung via Wireguard darfst Du mich allerdings nicht fragen, damit hab ich mich noch nicht wirklich beschäftigt 😅
 
Nur mal zum Verständnis: Du meinst damit die jeweils vorgelagerten Netze pro Standort? Die könnten einfach bei den übergebenen Routen mit angegeben werden, so dass jeweils beide Remote-Netze pro Standort über die VPN-Verbindung erreichbar wären. Wenn der Raspi im hinteren Netz liegt, kennt er halt auch den Weg ins vordere Netz (halt per default Gateway), oder hab ich Dich da falsch verstanden?

Nach der Umsetzung via Wireguard darfst Du mich allerdings nicht fragen, damit hab ich mich noch nicht wirklich beschäftigt 😅
Ich muss gestehen Deine Frage nicht so ganz verstanden zu haben 😬.

Die Konfigurationsmöglichkeiten von Wireguard an der Fritzbox (wenn man keinen SSH Zugang hat) ist sehr stark eingeschränkt. Wireguard kann per Default auf einem Linux-System (bei iOS klappt das auch, vermute auch Windows und Android sollte ganz genau so laufen) durch dort konfigurierte Direktiven selbständig die passenden Routen setzen und die Direktive "PostUp" bspw. noch zusätzlich dort definierte Shell bzw. OS abhängige Befehle ausführen (sofern das OS das zulässt).

Letzteres lässt die Fritzbox nicht zu und eine selbst konfigurierte Config-Datei verhält sich auf der Fritzbox meist so, dass er einfach nur meldet das sie einen Fehler enthält und nicht importiert werden kann. Oder sie "schluckt" ihr nicht passende Direktiven einfach.

Was ich nun gemacht habe und das Netz der zweiten Fritzbox zu erreichen:
* Netz auf 192.168.188.0/24 umgestellt
* Meine Fritzbox mit der Weboberfläche zu einem Wireguard-Server eingerichtet und mittels Assistent der Weboberfläche angegeben, das ich als "Client" einen anderen Route mit eigenem Netz verbinden möchte.
* Die von der Fritzbox generierte Config auf die zweite Fritzbox geladen

Beide Fritzboxen verbinden sich nun und die Netze 192.168.178.0/24 sowie 192.168.188.0/24 sind jeweils untereinander erreichbar.

Zusätzlich habe ich meiner Fritzbox (192.168.178.0/24) in den Netzwerkeinstellungen feste Routen für 172.21.1.0/24 und 172.31.0.0/24 auf den RASPi im 192.168.178er Netz gesetzt. Der Raspi macht dann den Rest (VPN zum Server).

Allen mobilen Clients, die sich mit dem Server per Wireguard verbinden, ist mitgegeben welches Netz sie erreichen können sollen. Die Routen werden automatisch durch Wireguard gesetzt. Auf dem Server laufen noch iptables Direktiven die den Rest machen.

Was nicht geht: Aus dem 192.178.188.0/24er Netz (also das der zweiten Fritzbox) direkt das VPN vom Server und das Servernetz zu erreichen. Die Fritzbox kennt diese ja auch nicht. Und dort Routen auf das VPN welches die Fritz!Boxen aufgespannt haben, lässt die Fritzbox nicht zu.

Das ist aber auch nicht so schlimm. Die Endgeräte des Netzes 192.168.188.0/24 müssen da auch nicht hin. Und befinde ich mich mal in diesem Netz, weil ich gerade dort vor Ort bin, und möchte Server-VPN und Server-LAN erreichen, kann ich ja zu meinem Server auf meinem Client/Smartphone/Tablet von dort das VPN aktivieren, welches zu meinem Server führt.

Klingt alles verworren. Ist es vielleicht auch. Vielleicht kann ich das auch nicht gut beschreiben. Sollte da jemand Interesse haben, kann ich es ja mal visualisieren ;).

Kannst Du Dir aus dem langen Text Deine Antwort herauslesen? Hoffentlich.

Danke Dir!
 
Was ich meinte ist folgendes:

<R2-.1.x>-<R1-.2.x>-----------<R1-.3.x>-<R2-.4.x>

Man verbinde die beiden R2's (egal ob Fritzbox, Raspi oder sonstwas) miteinander und gebe bei der VPN-Verbindung noch mit an, dass jeweils die Netze (via VPN) von R1 über den Tunnel zu erreichen sind.

Die VPN-Verbindungen müssen jeweils von den entsprechenden Netzen auf der Gegenseite wissen (im Falle einer Fritzbox vermutlich dann via händisch erstellter VPN-Config-Datei), beim Raspi ist es ja vermutlich eh Handarbeit. Wenn der der einen Seite dann gesagt wird, dass die Gegenstelle mehrere Netze zur Verfügung stellt, muss das VPN-Gateway (egal ob Fritzbox oder Raspi) der Gegenstelle auch die Routen zu den vermeintlich dort ansässigen Netzen kennen.

Ist aber auch egal, solange das, was Du da jetzt laufen hast, für Dich passt und funktioniert :)
 
Ich glaube wir meinen schon das Gleiche :giggle:

Leider ist ja die Fritzbox die, die nicht alles macht was sie soll. Da Du, wie ich aus einem Deiner Nachsätze herauslesen kann, die Config von Wireguard nicht zu kennen scheinst, hier (sofern Dich das interessiert) mal wie es anfänglich war:

Fritzbox 1 = 192.168.178.0/24
Sie diente als Client meines VPN Netzwerkes. Die Gegenstelle-n in der Wireguard-Config werden schlicht "peer" genant.

In der Wireguard-Config war der einzige "Peer" der Server selbst. Zu diesem Peer konfiguriert war:
Code:
AllowedIPs = 172.31.0.0/24,172.21.1.0/24
Das führte dazu, das der Wireguard auf der Fritzbox automatisch Routen zu den dort genannten Netzen gesetzt hat.
Alle Clients aus dem Netz hinter der Fritzbox konnten direkt on-the-fly auf die Endpunkte dieser Netze zugreifen, da die Fritzbox Gateway aller Clients ist.


Server = 172.21.1.0/24 und das VPN selbst 172.31.0.0/24
Für die Fritzbox ist ein Peer Eintrag mit dieser Direktive konfiguriert gewesen:
Code:
AllowedIPs = 172.31.0.2/32,192.168.178.0/24
Erster Eintrag ist die IP-Adresse die die Fritzbox im VPN bekommen hat, der zweite Eintrag unweigerlich das Netz, welches die Fritzbox aufgespannt hat.

Auch diese Einträge sind notwendig, damit die Clients hinter der Fritzbox aus dem 192.178.178.0/24er Netz kommunizieren dürfen.

Zusätzlich erstellt Wireguard automatisch eine Route:
Code:
192.168.178.0/24 dev wg0 scope link
wg0 ist das VPN Device

Außerdem ist das beim Wireguard des Servers noch notwendig:
Code:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
(nicht wundern warum eth1 und nicht eth0. Das ist schon so korrekt).

Für das Smartphone (kommt gleich) gibt es als einzigen Eintrag in der Serverkonfig:
Code:
AllowedIPs = 172.31.0.3/32
, weil andere "Absender-Netze oder IP-Adressen" schlicht nicht vorkommen bzw. nicht bekannt sind (Mobilfunknetz) und auch eigentlich nicht notwendig zu konfigurieren.


Smartphone über Mobilfunkverbindung (als Beispiel)
Wireguard hat als einzigen Peer natürlich wieder den Server.

Die entscheidende Direktive lautet hier:
Code:
AllowedIPs = 172.31.0.0/24,172.21.1.0/24,192.168.178.0/24
Damit werden nach Aufbau der VPN Verbindung alle Anfragen in diese Netze automatisch über das VPN geschickt.

Soweit so gut.

Ich kann aus dem LAN der Fritzbox überall hin.
Ich kann vom Server aus überall hin (auch in das LAN der Fritzbox)
Ich kann vom Smartphone leider nur in das Servernetz und in das VPN.

Ein traceroute zu bspw. 192.178.178.5 bringt als letzten Hop die VPN-IP der Fritzbox.

Meine Vermutung: Die Fritzbox müsste nun, wie der Server auch, mittels Firewall Command das Masquerade umsetzen. Einzig ich weiß nicht wie (daher die Anfrage in diesem Forum ... vielleicht gibt es einen Weg). Die iptables Commands in die Fritzbox Config für Wireguard zu kloppen funktioniert nicht, da ich a) das Device für das LAN nicht kenne und b) diese Einträge in der Config beim Import in die Fritzbox einfach herausgefiltert werden (habe ich schon probiert).
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.591
Beiträge
46.963
Mitglieder
4.234
Neuestes Mitglied
andreassw14
Zurück
Oben