DynDNS-Alternative im Eigenbau

Amazon

Wer ohnehin über einen eigenen Webserver/Webspace im Internet und etwas Programmierkenntnisse verfügt, kann sich ohne großen Aufwand einen Service wie DynDNS.org & Co. sparen, will man auf Teile seines Heimnetzwerkes von Unterwegs aus zugreifen. Solche Services stellen einen Hostnamen/URL bereit (z.B. mein-heimnetzwerk.dyndns.org) welche dann auf die IP-Adresse des Heimnetzwerkes weitergeleitet wird. Neben einem oft kostenpflichtigem Benutzerkonto muss man dann nurnoch seinen Router zuhause so konfigurieren, das dieser bei einem IP-Wechsel dies automatisch an den DynDNS-Dienst übermittelt.

Heutzutage haben bereits viele Internetanschlüsse zuhause mehr oder weniger feste IP-Adressen, zumindest solange man z.B. das Kabel-Modem nicht kurzzeitig vom Strom trennt. Wer also auf nochmal sicher gehen will, richtet sich eine DynDNS-Lösung ein oder baut sich auf die schnelle selber eine. ;-)

Inhaltsverzeichnis:

Der Ablauf hin zum eigenen DynDNS-Service

1.) PHP-Script schreiben, welches die neue IP-Adresse des Heimnetzwerkes entgegen nimmt, speichert und ausgeben kann.
2.) Das PHP-Script auf einem Webserver/Webspace installieren, welcher öffentlich erreichbar ist. (z.B. http://saschas-bastelstube.de/mein_dyndns/index.php)
3.) Den Heimserver (z.B. Raspberry Pi Raspberry Pi) so einstellen (Cronjob, Task-Scheduler, o.ä.), das dieser das PHP-Script regelmäßig aufruft, um ggf. die neue IP-Adresse mitzuteilen.

Schritt 1 und 2 - Das PHP-Script

Um das Ganze so simpel wie möglich zuhalten habe ich auf eine Datenbank-Anbindung verzichtet. So wird die IP-Adresse des Heimnetzwerkes einfach in eine Datei geschrieben.

//dateinamen ggf. ändern; config_file enthält später die IP des Heim-Netzwerkes;
$config_file = "myip.txt";

Um einen Hauch von Sicherheit in das Script zubringen, definieren wir als nächstes zwei Variablen mit jeweils einer zufälligen Zeichenkette. Diese Zeichenketten müssen beim Schreiben ($secret) und Lesen ($getip) der IP-Adresse des Heimnetzwerkes übermittelt werden, um sicher zustellen, das nur befugte Personen Zugriff auf die Funktionalität erhalten. Wem das nicht reicht, kann die Verbindung auch per SSL verschlüsseln und um das Ganze ein Login-System bauen. ;-)

//Diese Zeichenkette wird vom Heimnetzwerk-Server per GET übergeben, woraufhin die neue IP-Adresse im config-file gespeichert wird;
$secret = "1234567890";
    
//Diese Zeichenkette muss per GET übergeben werden, um die aktuelle IP-Adresse des Heim-Netzwerkes zu erhalten;
$getip = "0987654321";

Nun folgen noch ein paar Zeilen Code der das Schreiben, Lesen und Ausgeben der IP-Adresse übernimmt.

if (isset($_GET['secret']))
    {
        if (strcmp($secret, $_GET['secret']) == 0)
        {
            //secret korrekt; IP-Adresse speichern;
            $ip = $_SERVER['REMOTE_ADDR'];
            
            $f = fopen($config_file, "w");
            fwrite($f, $ip);
            fclose($f);
        }
    }
    else if (isset($_GET['getip']))
    {
        if (strcmp($getip, $_GET['getip']) == 0)
        {
            //secret korrekt; IP-Adresse herausgeben;
            $f = fopen($config_file, "r");
            $ip = fread($f, 32);
            fclose($f);
            
            echo $ip;
        }
    }

Das Script ist nun für einen Test bereit, also hochladen. Ruft man die URL des Webspaces indem das Script liegt nun mit dem Parameter secret=1234567890 auf, wird die IP-Adresse des aufrufenden Rechners gespeichert. Ein Aufruf mit getip=0987654321 hingegen gibt die IP-Adresse aus.

AmazonJe nachdem wie man den Zugang zum Heimnetzwerk nutzen möchte, macht es ggf. Sinn anstatt mit echo die IP-Adresse auszugeben, lieber mit Header("Location: http://".$ip."/deeplink-ins-heimnetz/"); den User bzw. den aufrufenden Rechner direkt weiterzuleiten. Möchte man die IP-Adresse statt dessen z.B. über eine App nur abrufen, um dann eigene Pfade oder Calls ins Netzwerk zu bilden, genügt an dieser Stelle das echo der IP-Adresse.

Link zum PHP-Script für den eigenen DynDNS-Server:
-= Download DynDNS-Server =-

Schritt 3 - PHP-Script aus dem Heimnetzwerk heraus aufrufen

In meinem Fall steht ein Raspberry Pi (Model B) im Heimnetzwerk, welcher als Server fungiert. Mein Webrouter wurde so konfiguriert (IP-Forwarding), das der RaspberryPi auf Anfragen aus dem Internet auf Port 80 (http) antwortet. Um den Pi zu veranlassen, sagen wir alle 10 Minuten das PHP-Script aufzurufen, um so ggf. die neue IP-Adresse des Heimnetzwerkes mitzuteilen, öffnen wir die Datei /etc/crontab und fügen folgende Zeile hinzu:

*/10 * * * * pi wget -O /dev/null "http://mein-webspace.de/index.php?secret=1234567890"

Nun gibt der Pi im 10-Minuten-Interval die IP-Adresse des Heimnetzwerkes durch. - Fertig! :-)

Schlusswort / Fazit zum Do-It-Yourself Dyn.DNS-Service

Natürlich ist das keine professionelle, aber dafür schlicht und einfache Lösung, um einen eigenen DynDNS-Service zu realisieren. Alles in allem tut es, was es soll! :-)

Wie schon kurz erwähnt ist das Script in Hinblick auf Sicherheit und Datenschutz noch anzupassen. Sinnvoll wären auf jedenfall starke Passwörter ($secret und $getip), und einen ebenso zufälligen wie mindestens 16 Zeichen langen Namen für die Datei in der die IP-Adresse des Heimnetzwerkes abgelegt wird ($config_file -> z.B. jkSD43jkdmrwf4993jk_43s4AA!.txt).

Amazon

Eine SSL-Verschlüsselung wäre auch nicht schlecht, allerdings ist das Thema Sicherheit in diesem Fall auch relativ, zumindest was das Lesen der IP-Adresse angeht. Denn jeder Dienst der im Heimnetzwerk läuft und von außen erreichbar sein soll, sei es Cloud oder Media-/Web-Server, sollte über eine eigene Zugangskontrolle bzw. Login mit Benutzernamen und Passwort verfügen, sodass es nicht allzu tragisch ist, wenn jemand an die IP-Adresse des Heimnetzwerkes gelangt, sodass man auch beim Aufruf des Scriptes auch ohne den $getip-Parameter die IP-Adresse ausgeben könnte. So bleibt es schlichtweg jedem selbst überlassen, wieviel Aufwand er (oder sie ;)) in die Absicherung steckt....

Zuletzt bearbeitet: 23. Mai, 2019
Tags: , , , , , , ,

Weitere interessante Beiträge

DIYS Smart-Home V1 - Irgendwo muss man ja anfangen!

Schon seit einiger Zeit plane ich mein Smart-Home. Neben dem Kostenfaktor für all die tollen Dinge die ich mir so vorstelle fehlt es oft an der notwendigen Zeit zur detailierten Planung und Umsetzung. Daher habe ich beschlossen einfach mal irgendwo anzufangen und dieses DIY-Projekt parallel niederzuschreiben...mal sehen wohin das führt...Ich bitte um Nachsicht wenn ich [...] Weiterlesen »


Telegram Messenger und die Bot API - Teil 2

Im ersten Teil - Telegram Messenger und die Bot API - bin ich auf einige Grundlagen eingegangen wie man einen Telegram-Bot einrichtet und diesen nutzt um sich Nachrichten, Informationen und sonstiges bequem auf sein Handy zu schicken. Da sich dieses Werkzeug als äußerst praktisch erwiesen hat, habe ich mich dazu entschlossen den vorherigen Beitrag nochmal [...] Weiterlesen »


ESP8266-WiFi-Modul flashen

Da ich mich seit kurzem wieder intensiver mit den Themen Smart Home und "Home automation" beschäftige habe ich beschlossen einige meiner Baustellen, Stolpersteine und Lösungen hier zu veröffentlichen. Wie im Beitrag zu meinem Smart-Home-Project V1 bereits erwähnt setze ich auf das WLAN-Modul ESP8266-ESP01 , da dieses unter anderem klein, zuverlässig und günstig ist. In diesem [...] Weiterlesen »


Fitnessboard v1 - DIYS

Am Wochenende hatte ich glücklicherweise mal wieder etwas Zeit zum Basteln und dazu noch eine ganz nette Idee für ein Fitness-Board für das Training zuhause, welches aus der Liegestütz-Position bedient wird. Ein Video dazu gibt es weiter unten in diesem Artikel und im Youtube-Channel von tedokai.de. Jeder der Zuhause dann und wann Sport betreibt kennt [...] Weiterlesen »


Apfel-Appstore-Reader - Update 2.0

Wie im Artikel - Apfel-Appstore-Reader - beschrieben, hält sich Apple bezüglich der App-Rankings (Positionierung im Appstore) sehr gedeckt. Auch im Report-Tool (ITC / iTunes-Connect -> Sales & Trends) keinerlei Informationen auftauchen, an welcher Position man sich mit der jeweiligen App in z.B. einer Kategorie wie “Produktivität” befindet, habe ich vor längerer Zeit ein kleines Java-Tool [...] Weiterlesen »