Aktualisieren Sie die Weiterleitung von IP-Adressen in nginx dynamisch

1164
uli_1973

Wie der übliche Haftungsausschluss - Ich habe lange nach einer Lösung gesucht, aber noch keine funktionierende Lösung gefunden.

Ziel: Erstellen Sie eine Dynamic DNS-Lösung, um ohne Fremdanbieter auf mein Heimnetzwerk zuzugreifen.

Einrichtung: Internetserver, auf dem nginx mit verfügbaren Domänen ausgeführt wird, lokales Netzwerk mit Router, der vom ISP jeden Tag automatisch eine neue IP zugewiesen wird.

Was bisher erreicht wurde : Ich nginx als Reverse Proxy zu verwenden, verwaltet Anfragen weitergeleitet werden sollen, https://dyn.mydomain.tldum https://my.current.ip.addresseine Verwendung serverRichtlinie entsprechend

server { 443 ssl http2; ssl on; ssl_certificate /etc/letsencrypt/live/dyn.mydomain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dyn.mydomain.tld/privkey.pem; location / { proxy_pass https://my.current.ip.address; } } 

Dadurch wurde die Anforderung erfolgreich und transparent an die Webschnittstelle des lokalen Routers umgeleitet.

Problem: Ich brauche das natürlich, um mit meiner dynamischen IP-Adresse zu arbeiten. Ich kann meinem Router anweisen, eine beliebige URL anzurufen und die neue IP-Adresse bei jeder Änderung weiterzugeben. Was ich anscheinend brauche, ist eine URL auf meinem Server, die die IP-Adresse aktualisiert, an die Nginx Anfragen weiterleitet. Was ich suche, ist eine Lösung, die dies mit so wenig Leistung und (was noch wichtiger ist) Auswirkungen auf die Sicherheit hat.

Gedanken: Was ich zuerst dachte, ist, diese IP in einer Datei zu haben, die von Nginx gelesen wird, aber ich habe gelesen, dass dies eine ziemlich schlechte Leistung ergeben sollte (wenn es überhaupt möglich ist, eine Variable aus einer Datei in der Nginx-Konfig lesen zu lassen).

Eine andere Idee wäre, ein Skript die IP-Adresse irgendwo aktualisieren zu lassen und Nginx neu zu laden, um den Wert "statisch" zu laden. Das würde jedoch bedeuten, dass ich ein öffentlich zugängliches Skript / URL-Root-Privileg vergeben muss, zumindest um nginx neu zu starten und möglicherweise eine Datei neu zu schreiben. Was scheint, als würde ich nichts tun?

Frage (kurz): Gibt es eine Möglichkeit, nginx einen dynamischen Wert für die IP-Weiterleitung bereitzustellen, der durch Ausführen eines Skripts nach einer vom Router initiierten HTTPS-Anforderung aktualisiert werden kann?

Nebenbei: Die als "bisher erreicht" genannte Implementierung präsentiert dem Browser das auf dem Server installierte Lets Encrypt-Zertifikat, während das (selbstsignierte) Zertifikat des Browsers nicht mehr verwendet wird (beim Zugriff auf die Konfigurationsseite des Routers direkt über seine) aktuelle IP-Adresse oder durch einen Dynamic DNS-Dienst eines Drittanbieters beschwert sich der Browser über das selbstsignierte Zertifikat). Auch wenn dies wie ein bequemer Fortschritt aussieht, ist dies nicht ein Sicherheitsproblem, da die Identität des Routers möglicherweise nicht ordnungsgemäß überprüft wird.

1
Wäre es nicht die einfache Lösung, das empfangene Skript einfach dazu zu veranlassen, den aktuellen IP-Wert in eine einfache Datei zu schreiben, und die Aufgabe, alles andere zu erledigen, einem zweiten (privilegierten) automatisierten Skript überlassen, das diese Datei parsen würde? Anaksunaman vor 6 Jahren 0
Grundsätzlich ja, aber zwei Fragen: a) Wie wird das privilegierte Skript über die Notwendigkeit einer Aktualisierung informiert (ich würde ein "ereignisbasiertes" System gegenüber einem cron-Job vorziehen) b) Gibt es eine Möglichkeit, das Umschreiben in zu ändern IP ohne erneutes Laden / Neustarten von Nginx? uli_1973 vor 6 Jahren 0
Ich würde denken, ein einfaches Verzeichnis-Monitoring wäre ausreichend. Wenn Ihre IP-Datei vorhanden ist, führen Sie die erforderlichen Aktionen aus und löschen oder verschieben Sie die Auslöserdatei. Sie könnten auch subtiler sein und auf Änderungen der Dateien achten. Ein Werkzeug wie "inotify" oder ähnliche Varianten kann dafür gut funktionieren. In Bezug auf Nginx weiß ich nicht, dass es einen gibt. Andere Server verhalten sich ebenfalls ähnlich (Apache, BIND für DNS). Allerdings haben diese Programme alle Methoden, um Konfigurationsdateien mit möglichst geringer Unterbrechung neu zu laden. Insbesondere versucht Nginx, Prozesse ordnungsgemäß herunterzufahren, um wahrnehmbare Ausfallzeiten zu vermeiden. Anaksunaman vor 6 Jahren 0
Sie sind sich wahrscheinlich dessen bewusst, aber Nginx hat den Befehl 'reload', um "hot reloads" (angeblich keine Ausfallzeit) der Konfigurationsdateien durchzuführen - - https://serverfault.com/q/378581/210623 Anaksunaman vor 6 Jahren 0
Vielen Dank, das sieht nach einem vielversprechenden Ansatz aus. Ein "Backend" -Skript mit inotify kann mit dem Privileg ausgeführt werden, nginx neu zu laden. Ich werde berichten, wenn ich die Gelegenheit hatte, es auszuprobieren. uli_1973 vor 6 Jahren 0
Herzlich Willkommen Ich freue mich zu hören, wie es funktioniert. Anaksunaman vor 6 Jahren 0

0 Antworten auf die Frage