Raspberry Pi – DynDns, DDNS oder dynamisches DNS
In der letzten Woche habe ich mich aus beruflichen Gründen in das Thema DynDns, DDNS oder dynamisches DNS einarbeiten müssen. Da ich zuhause nur eine Internetanbindung mit variabler IP Adresse habe und manche Server IP Sperren implementiert haben war das Arbeiten von zuhause teils mühsam bis unmöglich. Dank einem DDNS Dienst schafft man sich aber Abhilfe. Ganz nebenbei kann man mit einer dynamischen IP Adresse von zuhause nun auch einen Server betreiben.
Raspberry Pi – DynDns, DDNS oder dynamisches DNS
Beim DNS Service wird einer IP-Adresse eine Domain hinzugefügt. Technisch gesehen gibt es auf DNS Servern weltweit eine einheitliche Liste in der zwei Informationen stehen:
- die Domain
- die zugehörige IP-Adresse
Gibt man nun beispielsweise developer-blog.net in den Browser ein, dann wird bei einem solchen Server die passende IP-Adresse abgefragt und von dem Server mit dieser IP die Webseite geladen.
Das funktioniert leider nur mit statischen IP-Adressen, was auch durchaus ok ist, denn die Adresse vom eigenen Router zuhause benötigt man selten, die darf sich ruhig so oft ändern wie das der Telekom Anbieter für richtig hält. Einzige Ausnahme sind Dienste, die immer über den selben Namen oder Adresse ansprechbar sein sollen, zum Beispiel ein eigener Webserver. Als Kunde hat man nun zwei Möglichkeiten:
- einen Business Anschluss mit statischer Adresse
diese Option ist meist recht teuer und für den privaten Gebrauch ungeeignet, vor allem weil es hinsichtlich DynDns eine billige bis kostenfreie Alternative gibt. - einen DDNS Dienst
mit ein wenig technischer Erfahrung kann man über den DDNS Dienst trotz dynamischer IP-Adresse einen eigenen Server betreiben. In meinem Fall habe ich zusätzlich trotz IP-Sperren Zugriff auf Kundensysteme.
dynamisches DNS einrichten
Im folgenden zeige ich euch wie ich über DynDns meinen Raspberry Pi als Homeserver im Internet freigegeben habe. Die Konfiguration ist leider nicht bei allen Anbietern gleich und möglicherweise in seltenen Fällen gar nicht möglich. Ich werde die Schritte aber möglichst detailliert und passend für alle Anbieter beschreiben. Die Konfiguration besteht aus folgenden Punkten:
- Konfiguration des Servers
- Portweiterleitung am Router einstellen
- Externen Zugriff beim Anbieter freigeben
- DDNS Dienst konfigurieren
Schritt 1: Konfiguration des Servers
Für meine Zwecke habe ich mir auf einem Raspberry Pi im eigenen Netzwerk einen Webserver erstellt. Dieser soll über das DDNS von außen erreichbar sein und später mal als Entwicklungs- und Testserver dienen. Die Konfiguration habe ich aus meinem Raspberry Pi Webserver Artikel übernommen. Über die IP Adresse vom Raspberry Pi, in meinem Fall 192.168.0.100 ist im Browser aktuell die Apache Standardseite zu sehen:
Schritt 2: Portweiterleitung am Router einstellen
Für diesen Schritt müsst ihr euch auf eurem Router einloggen. Es ist leider nicht möglich euch 100% korrekt zu beschreiben wie das geht, denn das hängt stark von eurem Router ab. Generell gilt aber folgendes:
- der Router ist das Gerät, über dass ihr Internet ins Haus bekommt
- euer Router wird fast sicher ein WLAN Router sein und vermutlich den einen oder anderen LAN Anschluss besitzen
- ihr müsst euch in die Weboberfläche des Routers zur Konfiguration anmelden
Die Zugangsdaten zur Weboberfläche findet ihr, indem ihr die IP Adresse des Routers eingebt. In meinem Fall ist das 192.168.0.1, dass kann für euch passen, falls nicht probiert 192.168.0.254. Eventuell ist euer Netzwerk ein 10.0.0.X Netz, dann einfach 10.0.0.1 oder 10.0.0.254 probieren. In meinem Fall lande ich auf einer Webseite die zum Router passt und mir ein Login anbietet:
In meinem Fall ist das ein ZTE Router, der vom Internet Anbieter (Hutchison Media bzw. auch in Österreich Drei genannt) gebrandet wurde. Zugangsdaten für euren Router habt ihr entweder in einem Schreiben vom Anbieter bekommen oder stehen auf der Rückseite des Routers auf einem Aufkleber. In seltenen Fällen gibt es dazu gar keine Informationen und man muss das Router Modell nach Standardlogin googlen. Bei meinem alten Router fand ich so heraus, dass die Zugangsdaten admin/admin waren.
Sobald ihr eingeloggt seid müsst ihr nach dem Menüpunkt Portweiterleitung suchen und hoffen, dass dieser für euch nicht gesperrt wurde. Bei diesem Einstellungspunkt könnt ihr alle Ports für die IP Adresse eures Servers weiterleiten. Ich habe das für meinen Raspberry Pi (die IP Adresse 192.168.0.100) eingestellt. Sobald alles funktioniert könnt ihr dann nur spezifische Ports freigeben. Man kann recht kreativ sein und einzelne Ports auf unterschiedliche IP Adressen weiterleiten, so könnte man beispielsweise den FTP Port 20 für das Raspberry Pi NAS freigeben oder Port 25565 für einen Minecraft Server. Bei mir sieht die Konfiguration so aus:
Ich leite alle Ports (1-65535) auf den Raspberry Pi Server mit der IP Adresse 192.168.0.100 weiter.
Schritt 3: Externen Zugriff beim Anbieter freigeben
Es könnte nun sein, dass der externe Zugriff bereits funktioniert. Es kann aber auch sein, dass euer Telekom Anbieter den Zugriff verhindert. Am besten wir testen das mal und dafür benötigen wir die externe IP Adresse. Diese Adresse findet man heraus indem man nach „meine ip“ googled und eine der Seiten aufruft. Gibt man nun diese Adresse im Browser ein, sollten wir die Apache Default Seite sehen. Es ist möglich, dass ihr von eurem Netzwerk aber auf den Router kommt, keine Angst – ist der Router korrekt konfiguriert, dann sieht man von außen tatsächlich euren Server. Am besten ihr probiert das von eurem Handy aus, schaltet dort aber das WLAN aus!
Solltet ihr keine Seite sehen, dann blockt euer Anbieter. Ich kann euch da leider nicht explizit weiter helfen. In meinem Fall konnte ich das Problem lösen indem ich mich beim Telekom Anbieter in die Kundenzone eingeloggt und beim Vertrag die Option „Open Internet“ aktiviert habe. Vermutlich gibt es bei euch etwas ähnliches, im Notfall muss der technische Support die Antwort geben.
Schritt 4: DDNS Dienst konfigurieren
DDNS kann man nur mit einem externen DDNS Dienst konfigurieren, wir müssen uns also für einen der Anbieter entscheiden. Leider sind diese Dienste selten gratis. Ich habe mich für http://freedns.afraid.org/ entschieden, da dieses Service im Gegensatz zu anderen völlig gratis ist und zudem von meinem Router standardmäßig unterstützt wird.
Wir erstellen auf der Seite ein neues Account, dieses muss man wie gewohnt über ein Email bestätigen. Unter Subdomains erstellen wir für unsere IP Adresse bei einer beliebigen Domain eine neue Subdomain. Domains gibt es einige konfigurierte, man kann sich sogar eine eigene anlegen beziehungsweise diese für alle freigeben. Die Subdomain kann man frei wählen, sie darf jedoch noch nicht vergeben sein. Die IP Adresse wird automatisch ausgefüllt und ist jene externe IP Adresse mit der man aktuell auf die Seite zugreift.
Von nun an sollte man über subdomain.domain.com auf den Webserver hinter der dort konfigurierten IP Adresse Zugriff haben. In meinem Fall funktionierte das sofort – doch moment mal….die IP Adresse ändert sich doch? Ich habe das mit einem Router Neustart simuliert und tatsächlich, ich hatte danach eine neue Adresse und der Zugriff über die Subdomain war nicht mehr möglich. Wir müssen dem DDNS Dienst noch mitteilen, welche Adresse wir aktuell haben. Das kann man über viele Möglichkeiten realisieren. Unter Dynamic DNS findet man dazu alle nötigen Infos. Folgendes ist möglich:
- Direct URL
- Wget Script
- Curl Script
- Cron
In jedem Fall muss periodisch zu den Logindaten auf der DDNS Seite die aktuelle IP Adresse übergeben werden. Dazu bietet sich am Raspberry Pi Webserver ein Crontab an, die passenden Einstellungen findet man über den Link zum Cron Skript. In meinem Fall war die Einstellung noch viel einfacher, denn mein Router hatte eine Einstellung für DDNS. Dort habe ich meine Zugangsdaten und einen Hash Wert von der Seite hinterlegt. Technisch gesehen passiert da genau das selbe. Ob am Router ein Cron läuft oder ob das über die Änderung der IP Adresse getriggert wird weiß ich nicht, ist aber auch egal: es funktioniert. Sollte euer Router also keine Einstellung dafür besitzen, dann legt einen Cron am Webserver an. Im Prinzip muss nur irgend ein Rechner in eurem Heimnetzwerk die Information senden.
Fazit
Der erste Kontakt mit DynDns ist gar nicht so einfach, ich hab fast einen Nachmittag damit verbracht das Service zu konfigurieren und die Probleme die mir mein Anbieter in den Weg gelegt hat zu lösen. Sind diese Hürden aber genommen, dann funktioniert das DDNS Service einfach. Es ist so, als ob ich zuhause eine statische IP Adresse hätte, mein Server ist fast 24/7 im Internet erreichbar und steht bei mir im Keller. Ich allein habe die volle Kontrolle darüber und ich muss keinen Vertrag für einen VServer oder Root Server eingehen. Falls ich den Server offline nehmen will ziehe ich einfach den Stecker!
Es wäre toll, wenn ihr eure Erfahrungen und Probleme als Kommentar hinzufügt, damit auch andere User vom selben Provider den Dienst problemlos einrichten können.
Welchen DDNS Dienst bevorzugt ihr? Mit welchen Problemen hattet ihr bei welchem Provider zu kämpfen?
Es geht auch ohne DynDDs oder ähnliche Anbieter, falls man irgenwo einen Webspace zur Verfügung hat, auf den man mit sftp zugreifen kann. Bei mir funktioniert das auf einem Banana Pi mit ssd-Festplatte einwandfrei. Ein Cron-Skript prüft regelmäßig welche öffentliche IP der BaPi bzw. mein Internetanschluß hat und sendet sie in einer html-Datei mit Weiterleitung per sftp an den Webspace. Das Verzeichnis ist mit Passwort vor dem Zugriff geschützt, wenn ich nun das Verzeichnis aufrufe, dann wird der User und Passwort vom Verzeichnis abgefragt und danach werde ich automatisch per https zum BaPi weitergeleitet. Dort wartet dann meine Cloud auf dem Lighttp-Webserver auf die Eingabe von User und Passwort. Ist am Anfang des Zugriffs etwas umständlich mit der Eingabe von User und Passwort und warten auf die Weiterleitung zum BaPi aber die Sicherheit ist es wert. Ansonsten läuft die Cloud ausreichend performant.
Ich habe einige Zeit den Dienst von No-IP in Anspruch genommen, leider stiegen in der Zeit die Angriffe von außen exponentiell an. Seit dem ich den ddns Dienst meines NAS Herstellers verwende, hatte ich nicht einen einzigen Einbruchs-Versuch mehr.
ja um die Sicherheit des freigegebenen Servers muss man sich selber kümmern. Gerade wenn man alle Ports freigegeben hat braucht man in jedem Fall eine Firewall. Wie man einen Server absichert habe ich bereits im SSH absichern Artikel beschrieben, bei einem LAMP Server muss man zudem noch MySQL und PHP absichern.
Für einen reinen Webserver würde es in der Standardkonfiguration ja genügen den Port 80 TCP weiterzuleiten.
Bin ein grosser Fan von he.net, bzw. dns.he.net, man muss isch etwas damit beschäftigen, aber ansonsten vollkommen frei und super flexibel.
danke für den Tipp!