NGINX Proxy Manager über Wireguard erreichen

fmeyer84

Member
Hallo zusammen,

ich habe einen einen NPM per Docker auf meinem Proxmox Host installiert und darüber verschiedene Dienste übers Internet erreichbar gemacht.

Ich würde nun gern eine Zugriffsliste haben, welche besagt das ich Host xyz.meinedomain.de nur über meinen Wireguardtunnel nach Hause (10.8.4..x/32) erreiche.

Habe ich das so in der Zugriffsliste eingestellt, ist die Website garnicht mehr erreichbar und es kommt einen 403 Fehler Seite.

Hat jemand damit schon Erfahrungen?

MfG
Fabian Meyer
 
Hast du mal die IP vom Wireguard Host im lokalen Netz freigegeben?
Du kommst ja nicht mit der Tunnel IP auf den Zielhost.
 
ich habe einen einen NPM per Docker auf meinem Proxmox Host installiert und darüber verschiedene Dienste übers Internet erreichbar gemacht.

Ich würde nun gern eine Zugriffsliste haben, welche besagt das ich Host xyz.meinedomain.de nur über meinen Wireguardtunnel nach Hause (10.8.4..x/32) erreiche.
Ich würde auch zu folgendem raten:
ein Blick in die Logs sollte zeigen, WELCHE IP ankommt
Somit hat man zumindestens eine ganz klare Ansage was die Quell-IP betrifft. Man kennt ja Deine Infrastruktur nicht, von daher könnte alles möglich sein.

Für mich eigentlich erstmal als primäre Frage: Erreichst Du denn generell andere Dinge im Heimnetz via WG-Tunnel?

Falls dem auch nicht so sein sollte, kann es gut sein, dass die Pakete zwar ankommen, aber das Ziel die Route zurück nicht kennt (da Netz unbekannt). Das tritt besonders in folgenden Konstellationen auf:

0815-Heimnetz (192.168.178.0) + 1 Router (Default-Gateway). Nun terminiert das VPN aber auf einem zusätzlichen Gerät (Raspi, Docker-Container, was auch immer). Es findet dort kein NAT statt, so dass man mit seiner VPN-Client-IP (10.8.4.x) ins eigentliche Heimnetz kommt. Problem ist hier, dass niemand dieses Netz (10.8.4.x) kennt. Kennt man keinen Weg zum Ziel, geht alles ans Standardgateway (Router). Der weiss mitunter aber auch nichts davon und schickt die Pakete weiter ins Internet, wo sie dann instant verworfen werden (keine privaten Adressbereiche im Internet erlaubt).

Aber davon mal ab... Du hast also eine Access-Liste angelegt und diese sieht ungefähr wie folgt aus:

1) "allow" + "10.8.4.0/24"
2) "allow" + "<Dein LAN>"
3) "deny" + "all"

Entspricht das ungefähr der Access-Liste? Da wäre auch die Reihenfolge noch entscheidend. Steht Dein VPN-Client-Netz unter der deny-all-Regel, wird sie nicht zur Anwendung kommen.
 
Wo finde ich die Logs im Container? In der WebGUI sind keine zu finden...

Ja ich komme mit dem Tunnel problemlos an alle meine Geräte im Heimnetz 192.168.1.0/24
 
Vermutlich etwas in die Richtung docker exec -it <container-name/-id> /bin/bash und dann im Container ein find / -name *.log. Alternativ soll es wohl irgendwo im Data-Directory des Containers einen "logs"-Ordner geben. Dort solltest Du dann entsprechende access-logs finden. Habe kein NPM laufen, von daher nur mal so die grobe Richtung.

EDIT: Melde Dich doch mal auf einem Gerät an, welches den Zugriff auch protokolliert (z.B. am Router). Dort solltest Du theoretisch in den Router-Logs auch sehen können, mit welcher IP der Zugriff stattgefunden hat.

EDIT2: Was nutzt Du denn zwecks WG - auch einen Container (z.B. wg-easy), oder läuft das auf Deinem Router, oder ganz woanders?
 
Also in den Logs im Data Verzeichnis des Containers sind die logs, da stehen immer nur die öffentliche IP als Zugriffsversuch drin. Keine aus meinem Heimnetz durch das WG

WG-Easy läuft bei mir auch in einem Container auf einem anderen Host.
 
Okay, wenn dann der Zugriff immer über die öffentliche IP erfolgt, dürfte es ja ganz einfach sein: Dein angesprochener FQDN wird vom DNS-Dienst mit der "öffentlichen" IP aufgelöst. Ergo heisst es ganz simpel: Du erreichst den FQDN über die öffentliche IP XY. Der "Weg" (die Route) dorthin wird bestimmt durch Dein aktuelles Setup. Heisst: Solange niemand anders DNS-Server spielt und dafür sorgt, dass der VPN-Client als Ziel-IP (die IP hinter dem gewünschten FQDN) als "lokale" IP auflöst (z.B. FQDN = PVE-Host), wird der Weg durch das reguläre Routing bestimmt, welches bei Dir dann halt aussagt:

Ist es intern, sprich es direkt an.
Ist es extern, nimm das Standard-Gateway (Dein Router kennt den Weg ins "Internet". Öffentliche IP = Internet).

Dir bleiben somit 2 Möglichkeiten:

1) Du gibst im NPM Deine öffentliche IP bei der Accessliste an. Nachteil: Du hast vermutlich keine statische IP, womit sich Deine öffentliche IP immer ändern wird. Das ist schlecht und nicht wirklich praktikabel. Eine "mögliche" Lösung könnte hier sein, dass man ein Script laufen lässt, welches Deine öffentliche IP ausliest (z.B. von einem DynDNS-Record) und diese irgendwie im Container in der gewünschten Accesslist unterbringt (ob das nun Datei- oder Datenbank-basiert ist kann ich Dir nicht sagen, da müsste man sich NPM mal diesbezüglich genauer anschauen).

2) Du regelst das mit dem DNS irgendwie anders. Wenn Du eh PVE und auch Docker laufen hast, könntest Du halt auch hingehen und a) einen eigenen internen Nameserver betreiben (grösserer Aufwand, eigene Zone), oder b) einen Resolver einsetzen, bei welchem Du den Cache manipulieren kannst. Beispiele dafür sind z.B. pi-Hole, AdGuard, etc. Vielleicht hast Du sowas ja schon im Einsatz. Dort könntest Du dann hingehen und sagen, dass die IP für Deinen gewünschten FQDN eben die "interne" IP ist.

Aus FQDN = <öffentliche IP> wird dann eben ein FQDN = <interne IP>. Natürlich nur für die internen Clients und auch nur für jene, die diesen Resolver befragen. Du müsstest Deine WG-Config noch so anpassen, dass der entsprechende DNS-Server mitgegeben/befragt wird.
 
Kleiner Nachtrag: Wenn es sich nur um einen Laptop handelt, könntest Du auch hingehen und lokal auf dem Gerät die hosts-Datei abändern, so dass Du dort einfach den FQDN samt der internen IP hinterlegst. Dann kannst Du Dir das DNS-Geraffel sparen. Du wirst dann aber ohne VPN nicht mehr über ein öffentliches Netz auf den FQDN zugreifen können (da für den FQDN dann immer die interne IP für dieses Gerät gilt). Bei Tablets/Smartphones ist sowas wohl eher nicht möglich (bin da aber auch nicht so der Bastel-Typ).
 
Ich danke euch wirklich für eure Ideen, aber das ganze würde alles meine Kompetenzen überschreiten :)

Ich wollte es auch nur als Bastelprojekt haben, die Grundfunktionen mit NPM gehen ja alle wunderbar und die 3 Dienste die ich damit hoste, sind alle mit 2FA abgesichert, das sollte aus meiner Sicht auch reichen.

Trotzdem vielen Dank nochmal für eure Anregungen!
 
Naja, wenn Du PVE und NPM (samt Diensten dahinter) schon laufen hast, ist so eine pi-Hole-Installation (oder irgendwas in diese Richtung) auch kein Hexenwerk mehr. Alternativ könntest Du Deinen Container - sofern die Ports am Host direkt erreichbar sind - aber auch "direkt" ansprechen.

Regulär wäre es ja etwas in diese Richtung:

FQDN -> Portweiterleitung (Port 443) -> NPM -> vHost -> Container (Host-IP + Container-Port XY, sofern veröffentlicht)

Das wäre der Weg von "aussen", von "innen" könntest Du es aber auf Host-IP + Container-Port reduzieren. Dann musst Du das ganze halt nur anders (direkter) ansprechen. Vermutlich läuft via NPM auch direkt die SSL-Terminierung, womit es für Dich dann halt "http://Host-IP:Container-Port" wäre.
 
Danke für deine ausführlichen Informationen, aber ich werde das lassen weiter zu basteln... Das übersteigt deutlich meine Fähigkeiten und die Chance, das hinterher nichts mehr geht ist sehr hoch. Ich belasse es bei der jetzigen Config, die verstehe ich zu 100% und wie gesagt, alle Dienste und Webseiten über 2FA abgesichert. Das sollte für mich reichen und mein Szenario :)

Trotzdem nochmals herzlichen Dank für den Input!
 

Letzte Anleitungen

Statistik des Forums

Themen
8.237
Beiträge
81.484
Mitglieder
8.981
Neuestes Mitglied
RalfOld
Zurück
Oben