Multi-Domain DynDNS (IPv4) mit OVH, FRITZ!Box und RasPi

Geschrieben von Marko Kleen am Sunday January 24, 2016

Ausgangssituation

Ich habe mehrere Domains bei OVH, einen schnellen Internetanschluss bei Vodafone Kabel Deutschland mit quasi fester IP (ändert sich im Schnitt erst nach mehreren Wochen), einen Kabelrouter im Bridge Modus und meine eigene FRITZ!Box dahinter. Als Server im lokalen Netzwerk dient ein RasPi.

Im rechts gezeigten Beispiel (Klick zum Vergrößern) besteht das Problem darin, dass 4 von 5 Domains über meinen RasPi laufen sollen, während lediglich eine Domain von OVH selbst bedient wird.

  • Gut ist, dass OVH zu jeder dort registrierten Domain DynDNS Dienste anbietet.
  • Schlecht ist, dass ein direktes Domainupdate per FRITZ!Box nicht möglich ist, weil man in der FRITZ!Box nur einen einzigen DynDNS Updater hinterlegen kann!


Vorbereitung

  • Erstellen Sie im OVH Kundenbereich je einen "DynHost" für jede Domain, die auf die IP Adresse Ihrer FRITZ!Box zeigen soll. Notieren Sie sich die vergebenen Zugangsdaten.
  • Erstellen Sie ein Perl Skript welches Sie auf den Webspace eines statischen Hosts (bei OVH oder einem anderen Webhoster) kopieren.
  • Passen Sie das Perl Skript so an, dass die URLs Ihre Host- und Benutzernamen und Passwörter für die DynDNS Aktualisierung enthält.
  • Speichern Sie das Skript z.B. als "updater.pl" oder "updater.cgi" so dass der Webserver es als Skript erkennen kann.
  • Machen Sie das Skript ausführbar.

Kommen wir zum Perl Skript

#!/usr/bin/perl
#####################################################################
use CGI;
use LWP::Simple qw(get);
use vars qw($res $tmp);
#####################################################################
my $cgi = new CGI;
my $ext_ip = $cgi->param('myip');
my $status = 'good '.$ext_ip;
my $header = "Content-type: text/plain\n\n";
#####################################################################
my @urls = ("http://domain-a-user:pass\@www.ovh.com/nic/update?system=dyndns&hostname=domain-a.de&myip=$ext_ip",
"http://domain-b-user:pass\@www.ovh.com/nic/update?system=dyndns&hostname=domain-b.de&myip=$ext_ip",
"http://domain-c-user:pass\@www.ovh.com/nic/update?system=dyndns&hostname=domain-c.de&myip=$ext_ip",
"http://domain-d-user:pass\@www.ovh.com/nic/update?system=dyndns&hostname=domain-d.de&myip=$ext_ip");
#####################################################################
for (@urls) { $res = get $_; }
print $header.$status;
#####################################################################
exit(0);

Was passiert hier?

  • In $ext_ip bekommt das Skript die neue IP der FRITZ!Box mitgeteilt.
  • In $status bereiten wir die Antwort für die FRITZ!Box vor (good).
  • In @urls hinterlegen wir die Update URLs für die DynHosts bei OVH.
  • Anschließend werden die Adressen in @urls nacheinander durchlaufen.
  • Zum Schluss senden wir der FRITZ!Box unsere vorbereitete Antwort zurück.


Passen Sie die URL(s) im Perl Skript an

  • Anstelle von "domain-a-user" tragen Sie den Benutzernamen ein, den Sie bei OVH vergeben haben
  • Hinter dem Doppelpunkt tragen Sie anstelle von "pass" das zugehörige, bei OVH vergebene Passwort, ein
  • Tragen Sie anstelle von "domain-a.de" Ihren zum DynHost gehörenden Domainnamen ein
  • Wiederholen Sie dies ggf. für weitere Hostnamen.


Sie können beliebig viele URLs nach vorstehendem Schema hinzufügen.

Konfiguration Ihrer FRITZ!BoxFRITZ!Box DynDNS

  • Falls Sie für den Zugriff auf Ihr Perl Skript keinen Verzeichnisschutz konfiguriert haben sollten (nicht empfohlen!) können Sie die im Screenshot rechts gezeigten Felder "Benutzername" und "Kennwort" auch leer lassen, da die Eingabe ignoriert würde.
  • Anderenfalls tragen Sie dort Ihren vergebenen Benutzernamen und das zugehörige Kennwort ein.
  • In das Feld "Domainname" tragen Sie bitte einen Ihrer DynHost Domainnamen ein.
  • In das Feld "Update-URL" tragen Sie die URL zu Ihrem Perl Skript ein, z.B.
http://www.domain.de/dyndns/updater.pl?system=dyndns&hostname=<domain>&myip=<ipaddr>

Achtung

Sobald die Einstellungen in der FRITZ!Box übernommen wurden wird das Perl Skript erstmals ausgeführt. Ist alles richtig eingestellt bekommt die FRITZ!Box vom Skript eine Bestätigung "good". Das Skript wiederum versucht nun die hinterlegten Update URLs zu erreichen und hinterlegt dadurch bei allen DynHosts die von der FRITZ!Box übermittelte IP. Infolge dessen sollten die DynHosts nun auf die eigene FRITZ!Box zeigen, wo nun ein eigener Webserver (wie z.B. ein RasPi) übernehmen kann.

Achten Sie auf die korrekte Schreibweise des in der FRITZ!Box hinterlegten DynHosts, da die FRITZ!Box nach dem DynDNS Update versuchen wird die IP Adresse aufzulösen. Wenn die IP Adresse dann nicht mit derjenigen der FRITZ!Box übereinstimmt gibt es eine Fehlermeldung (sichtbar im Browser wenn Sie sich an Ihrer FRITZ!Box anmelden)! Sollte die FRITZ!Box nun weitere Versuche unternehmen Ihren DynHost zu aktualisieren könnten alle im Skript aufgeführten DynHosts (vorübergehend) gesperrt werden, und Ihre Internetpräsenz wäre nicht mehr erreichbar!

Bei fehlendem Verzeichnisschutz Ihres Perl Skripts könnten Unberechtigte Ihre DynHosts aktualisieren und auf eigene Server zeigen lassen! Auf einen Verzeichnisschutz können Sie nur testweise verzichten, oder wenn der Zugriff darauf auf andere Weise ausreichend geschützt ist. Sie sind gewarnt!

Vorteile der gezeigten Lösung

  • Die Daten liegen nicht bei einem X-beliebigen Anbieter, bei dem man nicht weiß was diese damit machen.
  • Bei ausreichend schneller Internetverbindung ist für einen Besucher der dynamische Host nicht als solcher zu erkennen, da dieser einen ganz normalen Namen hat.
  • Voller Zugriff und Root-Rechte, damit volle Flexibilität des lokalen Webservers
  • Hohe Geschwindigkeit bei Anwendungen wie ownCloud da lokaler Webserver!
  • Nie wieder betteln damit der Hosting Anbieter z.B. fehlende Perl Module installiert
  • Diese Liste kann beinahe beliebig fortgesetzt werden ...
Category: linux Tags: ovh dyndns raspi perl script