Split DNS - Zugriff zuhause nicht über das Internet

Hallo zusammen,
ich möchte das meine Geräte sich mit der Nextcloud wenn ich zuhause bin lokal sychronisieren, weil das viel schneller gehen würde, als wenn das über das Internet passiert.
Ich habe auf meinem Server Proxmox installiert und habe dort die Nextcloud, das Pihole und einen vpn laufen. Weil ich einen DS lite Anschluss (dt. Galsfaser) habe brauche ich den VPN für eine Erreichbarkeit aus dem Internet. Dieser ist über einen Wireguard tunnel mit einem VPS server bei Ionos verbunden. Die Domain zeigt auf die Adresse des VPS servers, dieser leitet dann über einen Nginx Proxy Manager über den VPN zu meiner Nextcloud weiter. Die Website ist über http an den npm angebunden und dieser verschlüsselt die Daten mit ssl.

Nun möchte ich, dass wenn ich zuhause bin der Aufruf meiner Domain direkt zum Nextcloudserver weitergeleitet wird. Dafür habe ich das PiHole als DNS Server eingerichtet und einen A-Record erstellt. Leider funktioniert das nicht. Hier ein Bild:

Zudem habe ich das Problem, dass die Verbindung ssl verschlüsselt sein muss, da die nextcloud mich sonst nicht zulässt. Also müsste ich doch die nextcloud mit meinem Zertifikat, dass ich zur Domain dazubekommen habe ssl zertifizieren können und dann aus dem lokalen netz direkt verschlüsselt darauf zugreifen können. Der npm müsste dann die bereits verschlüsselte website weiterleiten. Doch auch das hat bisher noch nicht fuktioniert.

Zusammenfassung:

  1. Warum gibt mir das PiHole nicht meine im DNS record angebene lokale Adresse des Nextcloud servers an?
  2. Kann ich mit meinem gekauften SSL zertifikat im Heimnetz verschlüsseln?
  3. Kann der Ngix Proxy Manager die bereits verschlüsselte Webseite weiterleiten?
  4. Gibt es irgendwo ein Tutorial für Split DNS für die Nexcloud mit PiHole oder auch auf anderem Wege?

Vielen Dank im Vorraus für alle Antworten
Beste Grüße
Moritz

Weitere Infos

  • Bei welchen Anbieter? Was für ein Server?
    LXC Container Proxmox lokal

  • Nextcloud Version: 28

  • Webserver: apache2

And how do I do that if I have DS lite and so the reverse Proxy is on an VPS Server?
My detailed Question here: Split DNS - Zugriff zuhause nicht über das Internet - :globe_with_meridians: Non-english support / :de: Deutsch (german) - Nextcloud community

hallo @Moritz_Haf wilkommen im Forum :handshake:

bitte verzichte auf cross-postings, das kostet uns nur unnötge Arbeit! Du kannst relevante Post verlinken und zur Not kompetente Personen mit @ taggen.

schaue hier Probably DNS help with NC Docker + Collabora + Wireguard tunnel - #5 by wwe das Setup ist etwas anders als bei dir aber du kannst sicher Anregungen sammeln. Wenn du auf den Reverse Proxy auf dem VPS nicht verzichten kannst wirst du wohl lokal einen weiteren Reverse Proxy aufsetzen müssen… ich bin nicht sicher wie es dann mit letencrypt läuft…

Hallo Willi Weikum,
Danke für deine Antwort!

Entschuldige, das wusste ich nicht.

Auf diesem Post habe ich tatsächlich auch schon viel Zeit verbracht, aber es hat mich noch nicht wesentlich voran gebracht. Mir fehlt aber auch jegliches Wissen über Docker Container.

Genau das war auch meine erste Idee. Ich wollte die Verschlüsselung dann im Heimnetz machen lassen und den Reverse Proxy des VPS Servers dann mit dem lokalen verbinden. Das hat allerdings aus zwei Gründen nicht geklappt:

  1. Bei Erstellen des SSL Zertifikats ist ein internal Error aufgetreten (anscheinend muss dieser aus dem Internet erreichbar sein, was er ja im Heimnetz nicht ist)

  2. Der lokale DNS Record des Piholes hat nicht funktioniert, sodass meine Domain immer wieder auf den VPS geführt hat.

Ich probiere nun schon seit Tagen alles mögliche, aber komme nicht zum Ziel. Ich habe auch schon versucht mein Zertifikat, dass ich zu meiner Domain bekommen habe direkt im Apache einzubinden. Aber ich habe es nicht geschafft diese gesicherte Verbindung über den VPS nach außen zu führen.

Macht es wohl sinn des Gesamten Post noch einmal zu übersetzen und in den Internationalen Feed zu stellen (da ist die Wahrscheinlichkeit, dass jemand es liest der den gleichen Plan verfolgt. Oder sind solchen Dopplungen ungünstig?

den Post an sich würde ich nicht übersetzen… internationale User können den automatisch übersetzen bei Bedarf… aber ich würde es begrüssen wenn du die Motivation aufbringst ein How-To mit Netzwerk Basics wie Firewall, Port Forwarding, DNS, TLS Zertifikate, etc zusammenzuschreiben. Der Bedarf ist vorhanden - viele Besucher im Forum sind Anfänger und sind überfordert - auch wenn es im nachhinein halb so schlimm ist… Ich habe es schon lange vor selbst so ein Guide zu schreiben habe es bisher aber nicht geschafft.

So ins Blaue kann ich dir nicht helfen. Du hast mehrere Probleme die du adressieren musst und ich würde diese nacheinander angehen.

Die grundsätzliche System Architektur ist unabhängig davon ob diese mit LXC oder Docker Containern oder virtuellen oder pohysischen Servern aufgebaut wird, einzig die Umsetzung/Tools und Troubleshooting Methoden unterscheiden sich.

Dein Problem ist dein Server im lokalen Netz ist nicht per IPv4 aus dem Internet erreichbar, dafür hast du einen VPS aufgesetzt und einen Tunnel ins Netz gebaut. soweit OK und scheint grundsätzlich aus dem zu laufen wenn ich das richtig verstehe? Das Problem ist nun dass der “Eingang”=Reverse Proxy deines Servers auf dem VPS liegt und Zugriffe aus dem internen Netz durch den VPS laufen.

Ich weiss nicht ob du das Video und den Kanal kennst ich kann zu diesem Thema apfelcast empfehlen: DS-Lite Portfreigaben erstellen inkl. ReverseProxy und VPN-Server Ich selbst habe das Problem mit CGNAT/DSLite zum Glück nicht und kann nicht sagen wie gut der Vorschlag funktioniert aber seine Videos sind in der Regel gut.

Generell gibt es 2 Ansätze das System intern erreichbar zu machen:

  • den Reverse Proxy vom VPS ins lokale Netz zu verlagern - hier hast du wohl das Problem dass der Reverse Proxy nicht mehr direkt aus dem Internet erreichbar ist - mögliche Lösung wäre ein “Port Forwarding” vom VPS durch den VPN Tunnel zum Reverse Proxy (ist in dem Thread oben und Video beschrieben). Sobald der Proxy intern ist kann man mit Split-BRain DNS arbeiten (und bei Bedarf den DNS server troubleshooten)
  • einen weiteren Reverse Proxy im lokalen Netz aufbauen. Bei dieser Variante müsste der 1. Reverse Proxy entweder reine TCP Verbindungen durchleiten (in etwas dasgleiche wie “Port Forwarding” der 1. Variante) und damit die HTTP/TLS Logik auf dem 2. Reverse Proxy liegen oder beide Reverse Proxies müssen ein TLS Zert für die public domain deines server haben (https://cloud.mydomain.tld)

Ich halte die 1. Variante für einfacher wenn du alles lokal hosten möchtest. Wenn du Dienste auf dem VPS hast dann musst du die 2. wählen und den Reverse Proxy auf dem VPS so konfigurieren dass er Services auseinanderhalten kann.

Genau das Video habe ich mir angeschaut, versucht nachzuvollziehen und es nachgebaut. Bis auf ein paar Kleinigkeiten, die ich dann in anderen Quellen recherchieren musste, hat das echt gut geklappt. Dementsprechend bin ich aber kein Fachmann und damit wahrscheinlich der absolut falsche Ansprechpartner für ein How-To :smiling_face_with_tear:

Da ich mich grob an die Anleitung des Videos gehalten habe sieht mein Aufbau so aus:

Genau das ist es. Besser hätte ich es nicht zusammenfassen können.

Das würde ich gerne versuchen. Im Video ist es so beschrieben, dass man den NPM auf dem VPS installiert und dann eine Portweiterleitung vom VPN-Client (im Heimnetz) zum VPN Server (VPS) einrichtet. Und du sagt es kann auch funktionieren wenn ich eine Portweiterleitung vom Server zu Client mache (Port 80 & 443?) und dann dort auf dem Client den NPM installiere?

Das klingt für mich erstmal logisch. Ich komme aber aus der Elektrotechnik- Ecke und kenne mich in diesen Themengebieten kaum aus. Wenn du mir sagst, dass es technisch sinn ergibt dann werde ich es versuchen :slight_smile:.

Das Wäre doch dann mein Aufbau, richtig? Wobei ich dann ja wieder keine direkte Verbindung ans internet habe für die SSL Zertifikate. Oder brauche ich dafür dann nocheinmal eine Portweiterleitung von Client zu Server mit port 80 und 443?

ja den Aufbau sehe ich so…

Nginx ist ist in diesem Setup direkt auf 80/443 erreichbar und erstellt SSL Zertifikate, die interne Verbindung zum Nextcloud Server is ohne https/TLS (idealerweise laufen sie auf dem gleichen Host, so dass die unverschlüsselte Verbindung sehr kurz - ist aber das ist im privaten Bereich weniger wichtig).

Juhu, ich habe es geschafft!

Also für alle, die das gleiche Problem haben. So klappts:

  1. Die VPN Konfiguration wie im Apfelcast-video durchführen
  2. NPM auf dem VPN Client (im Heimnetz) installieren
    → Konfiguration wie im Apfelcast-video mit folgendem Unterschied: keine Portweiterleitung von Port 81 notwendig, da NPM nun im Heimnetz liegt. Und Einrichtung der weiterleitung in Weboberfläche erst später (siehe unten)
  3. Auf dem VPN Server (VPS) erst iptables-persistent installieren und dann mit folgenden Befehlen die Anfragen an den VPS Server auf Port 80 und 443 weiterleiten:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination <client_IP>:443
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <client_IP>:80
iptables -t nat -A POSTROUTING -j MASQUERADE

Damit diese Regeln nicht nach jedem Neustart neu eingegeben werden müssen:

iptables-save >/etc/iptables/iptables.rules
systemctl enable iptables.service

Anschließend noch (wie im Video) den Autostart des VPN Tunnels auf beiden Seiten aktivieren mit:

systemctl enable wg-quick@wg0
  1. die Konfiguration in der Weboberfläche läuft wieder genau wie im Apfelcastvideo.

Sobald die iptables Regeln aktiviert sind kann man keine Anwedungen mehr installieren. Daher muss iptables-persistent zuvor installiert werden. Um weitere Anwenungen zu installieren oder zu updaten muss man dann die Portweiterleitung kurzzeitig abschalten. Den Befehl dafür habe ich noch nicht gefunden (wäre schön wenn den hier noch jemand hinzufügen könnte).

Danke für die Unterstützung @wwe :blush:

2 Likes