DynDNS-Alternative im Eigenbau

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. ;-)

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.

Je 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

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). 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: 18. Januar, 2019
Tags: , , , , , , ,

Weitere interessante Beiträge

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 »


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 »


Screen Recorder / Capture Software selber programmieren

Auf der Suche nach einem einfach zu bedienenen Screen-Recorder-Tool bin ich über allerhand kostenloser sowie kostenpflichtiger Softwarelösungen gestolpert. Aus meiner Sicht waren ziemlich alle entweder völlig überladen oder auch schlecht bzw. kompliziert zu bedienen. Andere waren auch einfach nur teuer im Verhältnis zum Funktionsumfang. Mein Fazit: Selber programmieren! Screen-Recorder-Tool selber programmieren Dabei brauche ich lediglich [...] 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 »


Unity 2D Platformer - Level Generator

Seit einiger Zeit experimentiere ich hier und da mit der 2D- und 3D Engine Unity. Insbesondere die Programmierung eines 2D-Platformers hat es mir aktuell angetan. Allerdings ist das programmieren eines 2D-Games (sofern man Programmierer ist) nicht das größte Problem, sondern meiner Meinung nach die Optik, da ich kein Grafiker bin. :D So kommt man nicht [...] Weiterlesen »