DynDNS mit Plesk, IPv4, IPv6 und PHP7

Datacenter

Das letzte Projekt habe ich gestartet, da ich mich durch „Bestätigen Sie ihren DynDNS-Domainnamen“ E-Mails, gestört gefühlt habe. Diese kamen – gefühlt – in immer kürzeren Abständen, natürlich mit den Angebot für nur 25$/Jahr nicht mehr gestört zu werden.

Daher habe ich ein mit Plesk Onyx und PHP7 kompatiblen DynDNS Dienst/Script geschrieben.

Was ist DynDNS?

Fangen wir einfach an. Die Internetverbindung von einen Server – beispielsweise von 1&1 – unterscheidet sich nicht wesentlich von unserer Privaten Internetverbindung.

Die meisten Internet Dienste können – mit den heutigen Leitungen – auch von zuhause betrieben werden. Das Problem ist jedoch, das sich bei fast allen Privaten Internetanschlüssen, die IPs alle 24 Stunden ändern.

Der Dienst DNS ist letztendlich nur ein Verzeichnis von IP Adressen – vergleichbar mit einen Telefonbuch. Wir können diesen Dienst benutzen, um mittels unseres Routers den DNS-Eintrag schnell zu ändern.

Hierfür gibt es viele Dienste, jedoch können wir dies auch selber – und das kostenlos – realisieren.

Implementierung von DynDNS

Bei der Implementierung von einen Dynamischen DNS Eintrag ist einiges zu beachten:

  • Die Time-to-Life von der Domain muss relativ kurz eingestellt werden.
  • Es muss ein Script auf den Server abgelegt werden.
  • Der Server muss für mindestens eine Domain den Dienst DNS bereitstellen
  • Es muss mit den gängigen Routern z.B. eine Fritz!Box kompatibel sein.
  • Es sollte möglichst wenige Angriffspunkte haben, da es im Zweifel andere DNS Einträge überschreiben könnte. Im Falle von Plesk auch Datenbank zugriff benötigt.

Folgende Überprüfungen habe ich eingebaut

  • Ist die IPv4 Adresse Valide?
  • Ist die IPv6 Adresse Valide?
  • Wurde ein korrekter Hostname angegeben?
  • Eine rudimentäre Authentifizierung
  • Speicherung der Daten in einer Cache-Datei um unnötige Datenbank Zugriffe zu vermeiden.
  • Verwaltet Plesk diese Domain?

Das haben ich doch schon mal gesehen?

Es gibt einige Beiträge, die dies schon gelöst haben. Unter anderem im viisauksenas Blog oder im Server Support Forum. Diese funktionierten jedoch nicht mit PHP7 oder IPv6. Jedoch haben Sie mir bei der schnelleren Lösungsfindung geholfen. Danke dafür.

Was benötige ich, um den Dienst zu benutzen?

Aktuell kann mein Skript nur mit Plesk benutzt werden. Da ich mittelfristig den E-Mail Dienst auslagern will und dann auf Plesk verzichten werde – habe ich jedoch Vorbereitungen für individuelle Hooks eingebaut.

  • Einen eigenen Virtuellen oder Dedizierten Server mit Fester IP
  • Mindestens eine Domain die zu 100% über Plesk DNS verwaltet wird
  • PHP7
  • Root Zugriff (bzw. Plesk Adminzugriff)
  • MySQL
  • Plesk
    • Die Git Erweiterung ist sinnvoll

Kurz Anleitung zur Installation des DynDNS Scripts

  • Git Repository https://github.com/TimWeyand/dyndns verwenden.
  • DNS Time-to-Life der jeweiligen Domain auf unter 300 Sekunden setzen.
    • Alle Domains mit niedriger DNS TTL können verwendet werden.
  • MySQL User anlegen mit Rechten auf:
    • SELECT auf `psa`.`domains, `psa`.`dns_zone`
    • SELECT und Update auf  (time_stamp, displayVal, val) ON `psa`.`dns_recs`
  • Config unter private/config.class.php anlegen und anpassen
  • Schreibrechte auf private/data ermöglichen
  • Webroot auf www/ legen
  • Cron einrichten cron/plesk.sh
  • Testen von https://[Domain]/updatedns?hostname=[dyndns-domain]&ip=[ipv4]&ip6=[ipv6]
  • Einrichten auf den Router: DynDNS bei der Fritzbox mittels „Benutzerdefiniert“-Option einrichten
    • https://[Domain]/updatedns.php?hostname=<DOMAIN>&ip=<ipaddr>&ip6=<ip6addr>

Step-by-Step Anleitung

Wir brauchen zuerst eine Domain oder Sub-Domain, die vielleicht nicht zu viel Traffic hat. Durch kürzere DNS Time-to-Life Zeiten könnten jeweilige Webseiten langsamer wirken.

Ich habe mich für eine Sub-Domain entschieden, von einer Domain dessen DNS über meinen Server läuft.

1. Sub-Domain erstellen

Plesk Subdomain anlegen

2. Sub-Domain einrichten

  • Unterstützung von Git aktivieren
  • Git Remote-Hosting wie GitHub oder Bitbucket
  • Git Remote-Repository: https://github.com/TimWeyand/dyndns
  • Achtung: Der Zielpfad von Git muss den „Dokumentenstamm“ entsprechen.

Plesk Subdomain hinzufügen

3. DNS-Server der Subdomain in der Hauptdomain einbinden

Wir müssen nun die Hauptdomain anpassen, damit die DNS Aufrufe an die Sub-Domain funktionieren.

In den Fall von ddns.server-project.info muss server-project.info angepasst werden.

Hauptdomain Anpassen

Nun müssen wir für die Subdomain unsere DNS-Server manuell eintragen. Diese sollten von euren Plesk verwaltet werden.

Wenn die (mindestens) zwei Einträge erfolgreich waren, muss das ganze noch bestätigt werden.

4. Sub-Domain DNS Anpassungen

Nachdem die Sub-Domain nun in der Hauptdomain eingetragen ist, müssen wir diese noch aktivieren und konfigurieren.

Wichtig ist, das wir wirklich auf der Sub-Domain sind.

Sub-Domain DNS Einstellungen

Als erstes aktivieren wir den DNS-Dienst für unsere Sub-Domain.

DNS für Sub-Domain aktivieren

Wir löschen alle Einträge, die wir nicht benötigen. Wir behalten alle NS Einträge, sowie den www und Sub-Domain Eintrag.

Unnötige DNS Einträge entfernen

Sub-Domain DNS Änderungen übernehmen

5. Anlegen von DynDNS Einträgen

Das Script aktualisiert (aktuell) nur bestehende Einträge, daher müssen wir die gewünschten Einträge nun anlegen.

Analog zu den NS-Einträgen, legen wir diese über „Eintrag hinzufügen“ an. Sofern der Anschluss IPv4 und IPv6 unterstützt, sollte ein A und ein AAAA Eintrag hinzugefügt werden.

Wir nehmen hier vorerst nur Platzhalter IP-Adressen.

DynDNS Eintrag für IPv4

DynDNS Eintrag für IPv6

6. SOA TTL stark reduzieren

Unser Anschluss soll auch nach einen IP Wechsel, schnell wieder erreichbar sein. Deswegen passen wir die SOA Einstellungen und reduzieren die Werte an.

SOA DNS Einstellungen aufrufen

7. Let’s Encrypt aktivieren

Wir wollen natürlich Daten nur verschlüsselt an den Server schicken. Wenn dieser Schritt erfolgreich ist, hat der vorherige Punkt auch funktioniert.

Eine längere Anleitung zu diesen Thema, habe ich in „Kostenloses SSL Zertifikat mit Let’s Encrypt“ geschrieben.

8. Hosting-Einstellungen anpassen

DynDNS Hosting Einstellungen aufrufen

Die Applikation ist unterteilt in einen „öffentlichen“ www-directory und private/supported scripts parallel dazu.

Wir müssen daher den „Dokumentenstamm“ um www erweitern. Zusätzlich aktivieren wir noch SSL/TLS.

DynDNS Hosting Einstellungen anpassen

9. Auslieferung des DynDNS Dienstes über nginx

Um den Technik-Stack zu vereinfachen, lassen wir nginx den DynDNS-Dienst direkt ausliefern.

  • Wir öffnen die „Einstellungen für Apache & nginx“ in unserer Domain
  • Deaktivieren „Proxymodus“ in den nginx-Einstellungen.

Für mehr Informationen zum installieren und konfigurieren von nginx, verweise ich auch meine anderen Beiträge.

Plesk Einstellungen Apache und nginx aufrufen

nginx Proxy Modus deaktivieren

10. Website Konfiguration testen

Als erstes sollten wir testen, ob die Domain korrekt funktioniert. Beim Aufruf der Webseite https://[Domain] sollte eine Webseite erscheinen, auf der nur ein Punkt zu sehen ist.

In unseren Beispiel ist dies https://ddns.server-project.info .

DynDNS Website Test

11. MySQL zugriff

Als nächstes benötigen wir SSH Zugriff auf den Server.

MySQL root Zugriff
plesk db

MySQL User anlegen
CREATE USER 'dyndns'@'localhost' IDENTIFIED BY 'someSecretPasswordYouChoose';
GRANT SELECT, UPDATE (time_stamp, displayVal, val) ON `psa`.`dns_recs` TO 'dyndns'@'localhost';
GRANT SELECT (id, name, dns_zone_id) ON `psa`.`domains` TO 'dyndns'@'localhost';
GRANT SELECT ON `psa`.`dns_zone` TO 'dyndns'@'localhost';

12. DynDNS Konfiguration anpassen

Die Beispiel Konfiguration liegt im Sub-Domain-Pfad/private/config.class.example.php

Im Normalfall müssen nur die Fett markierten Einträge angepasst werden.

namespace website\weyand\dyndns;
 
class config {
 
const cacheFile = __DIR__.'/data/dyndns.data';
 
const mysqlServer = 'localhost';
 
const mysqlPort = '3306';
 
const mysqlUsername = 'dyndns';
 
const mysqlPassword = 'YouShouldChangeThis-Aas4vxKA;AB2349ysR';
 
const mysqlDatabase = 'psa';
 
//you can restrict the usage of this module - but you do not have to.
const allowedDynDNSDomains = array();
//const allowedDynDNSDomains = array('dyndns.weyand.biz');
 
const applicationHash = 'YouShouldChangeThis-kasdj93qosB:DUS';
 
//possible values [false,'basic','db']
const authentication = 'basic';
 
//Basic Authentication
const basic_auth_username = 'dynuser';
 
const basic_auth_password = 'password';
}

Hier muss das in Schritt 11 gewählte Passwort eingetragen werden.
const mysqlPassword = 'YouShouldChangeThis-Aas4vxKA;AB2349ysR';

In diesen Abschnitt, kann der Benutzername und Passwort für den Router hinterlegt werden.

const basic_auth_username = 'dynuser';

const basic_auth_password = ‚password‘;

13. DynDNS Script testen

Als nächstes Testen wir unseren eigenen DynDNS Dienst im Webbrowser.

Die Syntax ist wie folgt: https://[Domain]/updatedns.php?hostname=[DynDNS-Hostname]&ip=[IPv4]&ip6=[IPv6]

In unseren Beispiel wäre dies beispielsweise:

https://ddns.server-project.info/updatedns.php?hostname=test.ddns.server-project.info&ip=111.111.111.111&ip6=2003:cb:fbbf:ea5:3631:c4ff:fe4a:a940

Die Benutzerdaten entsprechen der in Schritt 12 angegebenen basic_auth_* Daten.

Bei einen erfolgreichen Aufruf, erscheint die Meldung: „IP changed“.

DynDNS Dienst Erfolgsmeldung

14. Cronjob testen

Als nächstes testen wir den Cronjob. Dafür rufen wir auf unseren Server – mittels ssh – das script [DomainVerzeichnis]/plesk.sh auf.


Tims-MacBook-Pro:~ tim$ ssh root@www.weyand.biz
 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-21-generic x86_64)
 
* Documentation:  https://help.ubuntu.com
 
* Management:     https://landscape.canonical.com
 
* Support:        https://ubuntu.com/advantage
 
You have mail.
Last login: Wed Jul 12 13:07:20 2017 from 87.157.134.219
This server is powered by Plesk. Log in by browsing
https://217.160.13.41:8443/ or https://server-project.info:8443/
You can log in as user 'root' or 'admin'. To log in as 'admin', use the 'plesk login' command.
Use the 'plesk' command to manage the server. Run 'plesk help' for more info.
root@server-project:~# cd /var/www/vhosts/server-project.info/ddns.server-project.info/
root@server-project:/var/www/vhosts/server-project.info/ddns.server-project.info# ./cron/plesk.sh

Als Ausgabe sollte beim ersten Aufruf folgendes erscheinen:
CronFile does not exist!
Updating: ddns.server-project.info
dnsmng: Some parameters in command string are left unprocessed. Check parameters please.
dnsmng: Some parameters in command string are left unprocessed. Check parameters please.

Als nächstes prüfen wir ob, die Kontrolldatei angelegt werden konnte.

root@server-project:/var/www/vhosts/server-project.info/ddns.server-project.info# ls -lah ./private/data/
total 16K
drwxr-xr-x 2 tim psacln 4.0K Jul 12 13:10 .
drwxr-xr-x 5 tim psacln 4.0K Jul 12 09:35 ..
-rw-r--r-- 1 root root 0 Jul 12 13:10 dyndns.cronrun
-rw-r--r-- 1 tim psacln 135 Jul 12 12:56 dyndns.data
-rw-r--r-- 1 tim psacln 36 Jul 11 22:02 README

Sofern die Dateien nicht vorhanden sind, bitte die Dateirechte von den Verzeichnis prüfen.

15. Cronjob einrichten

Wir fügen in die /etc/crontab folgende – auf euer System angepasste – Zeile hinzu:

* * * * * root /var/www/vhosts/server-project.info/ddns.server-project.info/cron/plesk.sh

16. Einrichtung von DynDNS am Beispiel der AVM Fritz!Box

  • Anmelden auf der Fritz!Box
  • Im Menü „Internet“ auswählen
  • „Freigaben“ aufrufen
  • Den Tab „DynDNS“ aufrufen
  • „DynDNS aktivieren“ auswählen
  • „DynDNS-Anbieter“ benutzerdefiniert auswählen
  • „Update-URL“: https://[DynDNS-Domain]/updatedns.php?hostname=<DOMAIN>&ip=<ipaddr>&ip6=<ip6addr>
    • Meine würde wie folgt aussehen: https://dyndns.server-project.info/updatedns.php?hostname=<DOMAIN>&ip=<ipaddr>&ip6=<ip6addr>
  • „Domainname“ Euren DynDns-Hostname
  • Benutzername und Passwort, wie in Punkt 12 angegeben ausfüllen.
  • „Übernehmen“ auswählen.

DynDNS auf der FritzBox einrichten

17. DynDNS Status überprüfen.

Die Aktualisierung von dem DynDNS-Eintrag kann bis zu 5 Minuten dauern.

Wir prüfen zuerst den Status auf der Fritz!Box:

Im macOS Terminal oder auf den Server prüfen wir mittels nslookup:

nslookup test.ddns.server-project.info

nslookup -query=“AAAA“ test.ddns.server-project.info

Dienst erfolgreich eingerichtet

Ich hoffe es hat alles korrekt funktioniert. Wenn ihr Feedback oder Fragen habt, nutzt gerne die Kommentarfunktion.

Über das Teilen/Verlinken des Beitrags oder ein „Star“ auf GitHub freue ich mich natürlich.

 

 

32 Gedanken zu „DynDNS mit Plesk, IPv4, IPv6 und PHP7“

  1. Ich muss meinen vorherigen Post korrigieren. Der Fehler lag einfach an der falsch aktivierten PHP Version.

    Was mich aber dennoch interessieren würde. Wie kann ich eine bestehende Domain verwenden ohne 2 Sub-Domains zu erstellen.

    Anstatt
    dns.domain.de
    test.dns.domain.de

    Nur
    domain.de << GIT? (bereits in Verwendung bsp. Forumsoftware)
    dns.domain.de

    Gruß, Marius.

  2. Hey danke für dieses Tutorial, aber ich hatte Probleme mit der config.class.php
    Die ganze Zeit zeigte es einen Fehler in Zeile 12 (syntax error, unexpected ‚.‘ etc…).
    Ich änderte:
    const cacheFile = __DIR__.’/data/dyndns.data‘;
    Zu
    const cacheFile = “.__DIR__.’/data/dyndns.data‘;
    und jetzt funktioniert es.

  3. Leider funktioniert dein Kapitel „13. DynDNS Script testen“ bei mir nicht. Wenn ich im Browser die Adresse mit den Variablen angebe, werd ich wie erwartet nach den Basic Authentifikationsdaten (Username, Passwort) gefragt. Allerdings nach der Eingabe von User/Pass, werd ich gleich wieder nach User/Pass gefragt. Ich bekomme nie die Meldung „IP changed“. Des Weiteren fehlt bei mir die Datei /opt/psa/admin/bin/dnsmng, weshalb ich vermute, dass dein Skript cron/plesk.sh nicht laufen kann.

    Mein Server:
    Frisch installierter Ubuntu 16.04 mit Plesk Onyx 17.5.3 Update #31.
    Die von mir in Plesk installierten Erweiterungen sind:
    – DigitalOcean DNS
    – Let’s Encrypt
    Vorinstalliert waren:
    – Firewall
    – Virtual Private Networking

    Irgendeine Idee, was der Fehler sein kann bzw. warum /opt/psa/admin/bin/dnsmng nicht existiert? Workaround?

    1. Hallo Jean,
      das selbe Problem habe ich gerade auch.
      Werde immer wieder auf die Authentifizierung geleitet.
      Konnte bisher noch nicht nachvollziehen warum. Vielleicht ist es auch einfach schon zu spät heute.

      Es wäre super genial wenn Weyand sich zu Wort melden würde. =)

      1. Ich habe gerade einmal in der config die authentication auf ‚false‘ gestellt.
        Hier bekam ich einen error das er die klasse false nciht findet.

        In der worker.class.php muss in der Zeile 38 false in Anführungszeichen gesetzt werden sollte man in der Config false ebenfalls in anführungszeichen geschrieben haben. durch !== besteht ein Typ Prüfung. Hat mich dann gerade auch mal 10 minuten gekostet bis ich das gesehen hatte…. 😛 Auf jedenfall funltioniert ohne die Authentication alles soweit.

        1. Hi,
          die Typ Prüfung ist schon so gewollt – die Lösung wäre eher in der config die Anführungszeichen zu entfernen.

          //possible values [false,’basic‘,’db‘]
          const authentication = false;

          Ich habe jedoch den worker erweitert, das er auch bei „false“ nicht mehr reinspringt. 🙂

          1. den letzten Beitrag einfach ignorieren. Hatte erst zu spät gesehen, das es ja definitiv so gewollt war -> false und nicht ‚false‘. Ok, leider habe ich aktuell immer noch das Problem das ich nicht aus der Authentifizierung herauskomme. Ich gebe user und pw ein und werde immer wieder zur Authentifizierung geleitet.
            Eine Idee was da fehlen könnte?

          2. Hi,
            da bei mir das Problem mit der wiederkehrenden Credential-Abfrage auftrat, habe ich versucht in der config false zu setzten und habe dort leider auch immer einen Class ‚website\\weyand\\dyndns\\authentication\\false‘ not found‘ Fehler bekommen, egal ob ich false oder ‚false‘ in der config einsetze.
            Aber für alle die Probleme mit dem Wiederauftauchen der Credential-Abfrage haben,
            könnte diese Zeile in der .htaccess helfen:
            SetEnvIf Authorization „(.*)“ HTTP_AUTHORIZATION=$1
            Ich hatte das gleiche Problem schonmal in Zusammenhang mit der caldav/carddav – Schnittstelle in group-office und das war die vorgeschlagene Lösung des Entwicklers in diesem Fall.
            lg
            Christian

    2. Es gibt wohl unterschiedliche Pfad Varianten die die Hoster bei der installation verwenden. Eine andere Variante die ich per Google gefunden habe, ist /usr/local/psa/admin/sbin/dnsmng

      Vielleicht hat ja jemand eine Idee, wie die Pfade per bash ermittelt werden können.

      find / | grep ‚dnsmng‘ (oder ähnliches wäre ja sub-optimal)

      1. Bei meinem vServer trifft auch dieser Pfad zu /usr/local/psa/admin/sbin/dnsmng
        Ich bekomme auch eine endlos Login Schleife.

        Was muss ich ändern, dass es funktioniert?

      1. folgende Fehler bekomme ich, wenn ich const authentication = false; einstelle

        [Mon Feb 05 14:45:27.987332 2018] [proxy_fcgi:error] [pid 9772:tid 139976587073280] [client 91.45.169.207:51815] AH01071: Got error ‚PHP message: PHP Fatal error: Uncaught Error: Class ‚website\\weyand\\dyndns\\authentication\\‘ not found in /var/www/vhosts/netzwerk-profis.net/ddns.netzwerk-profis.net/private/worker.class.php:40\nStack trace:\n#0 /var/www/vhosts/netzwerk-profis.net/ddns.netzwerk-profis.net/private/basicClass.class.php(27): website\\weyand\\dyndns\\worker->__construct()\n#1 /var/www/vhosts/netzwerk-profis.net/ddns.netzwerk-profis.net/www/updatedns.php(10): website\\weyand\\dyndns\\basicClass::init()\n#2 {main}\n thrown in /var/www/vhosts/netzwerk-profis.net/ddns.netzwerk-profis.net/private/worker.class.php on line 40\n‘

        wenn ich const authentication = ‚basic‘; einstelle kommt dauernd das Login Fenster

  4. Hey Tim,

    vielen Dank für die super Anleitung und die Scripts.
    Sehr gut beschrieben.

    Es hat auf meinem 1&1-Plesk-Server auch so gut wie alles funktionert:
    – Subdomain anlegen
    – NS-Einträge schreiben (allerdings nicht ganz wie von dir beschrieben)
    – A & AAAA-Record erstellen
    – Test der Basic-Auth und IP manuell eintragen
    – Cron-Job erstellen
    – fritz.box DynDNS konfigurieren: Sub-Sub-Domain erhält die IP der fritz.box
    Alles super bis hierher!

    Wenn ich allerdings den nslookup durchführe (DOS oder Shell auf Plesk-Server), erhalte ich für die Sub-Sub-Domain immer die IP-Adresse der Hauptdomain, also die des Servers.
    Die IP der fritz.box steht in der Datenbank, also logischerweise auch im A-Record und AAAA-Eintrag der Subdomain (DNS-Zone Plesk) und im Cache.
    Als Antwort auf den nslookup kommt sie allerdings nicht raus.
    Hab dein Tutorial schon zig Mal durch. Das Ergebnis ist immer gleich.

    Hast du eine Idee?

    Vielen Dank für deine Anregung und einen schönen Feierabend.
    Komm gut durch die frische Adventszeit
    Viele Grüße
    Tobi

    1. Hi Tobi,
      mir fallen folgende Punkte ein:

      * Gab es vielleicht vorher ein Wildcard Eintrag? Daher die Synchronisation ist noch nicht durch?
      * Probier mal nslookup [dyndns-host] [dns-server] – Beispiel „nslookup dyndns.weyand.biz server-project.info“
      * Ist dnsmng unter /opt/psa/admin/bin/dnsmng ? Wenn nein, vielleicht unter /usr/local/psa/admin/sbin/dnsmng?
      * Was gibt /usr/local/psa/bin/dns –info [volle dyndns subdomain z.b. dyndns.weyand.biz] aus?

      Wenn das obige richtig erscheint, würde ich folgendes probieren:
      /usr/local/psa/admin/sbin/dnsmng –update-acl
      /usr/local/psa/bin/dns –update-soa [dyndns subdomain]

      1. Hi Tim,
        vielen Dank für die flotte Antwort.

        Ist es richtig, dass in den Nameserver-Einstellungen bei 1&1 als primärer Nameserver z.B. ns1.domain.tld mit IP-Adresse des Servers stehen muss?
        Oder kann man dort die Standard-Einstellungen nehmen?

        Hier die Ergebnisse zu deiner Antwort, hoffentlich nicht zu lang 😉

        @Wildcard
        Hab es alternativ mal mit einer Domain (ohne Subdomain) probiert. Kein Wildcard-Eintrag. Resultat gleich.

        @nslookup [dyndns-host] [dns-server]
        Gibt die richtige, dynamische IP der fritz.box aus. Aber nur auf der Shell des Plesk-Servers, nicht via DOS Eingabeaufforderung (weiter unten die Ergebnisse)

        @dnsmng
        liegt hier: /usr/local/psa/admin/sbin/dnsmng

        @/usr/local/psa/bin/dns –info [dyndns subdomain]
        Gibt sechs Einträge zurück, die auch in Plesk so eingetragen sind.
        test.ddns.domain.tld — A — IP der fritz.box (gleiches für AAAA)
        ddns.domain.tld — A — IP des Plesk-Servers
        ddns.domain.tld — NS — ns1.domain.tld
        ddns.domain.tld — NS — ns2.domain.tld
        http://www.ddns.domain.tld — CNAME — ddns.domain.tld

        @/usr/local/psa/admin/sbin/dnsmng –update-acl
        @/usr/local/psa/bin/dns –update-soa [dyndns subdomain]
        ausgeführt, ohne Fehler.

        #################################
        @auf Shell Plesk-Server
        # nslookup test.ddns.domain.tld ddns.domain.tld
        Name: test.ddns.domain.tld
        Address: IP der fritz.box

        # nslookup test.ddns.domain.tld
        Non-authoritative answer:
        Name: test.ddns.domain.tld
        Address: IP des Plesk-Servers

        @via Windows Eingabeaufforderung
        # nslookup test.ddns.domain.tld ddns.domain.tld
        DNS request timed out.
        timeout was 2 seconds.
        Server: UnKnown
        Address: IP Plesk-Server
        DNS request timed out.
        timeout was 2 seconds.
        #################################

        Wie gesagt, egal ob als Domain oder Subdomain angelegt, Ergebnis ist immer gleich.

        Mach nicht zu viel Aufwand. Wahrscheinlich ist es nur irgendwo eine kleine Einstellung, die mal wieder abweicht von anderen Server-Konfigurationen. Passiert mir bei Linux immer wieder.

        Wenn du noch DEN Tipp hast, bin ich natürlich dankbar.
        Merci
        Tobi

        1. Ich habe folgende Einträge unter DNS bei der Subdomain dyndns.checkip.net
          dyndns.checkip.net. NS lvps83-169-36-103.dedicated.hosteurope.de.
          dyndns.checkip.net. NS ns2.hans.hosteurope.de.
          2a01:488:66:1000:53a9:2467:0:1 / 64 PTR dyndns.checkip.net.
          83.169.36.103 / 24 PTR dyndns.checkip.net.
          dyndns.checkip.net. A 83.169.36.103
          dyndns.checkip.net. AAAA 2a01:488:66:1000:53a9:2467:0:1
          http://www.dyndns.checkip.net. CNAME dyndns.checkip.net.

          unter DNS von checkip.net (Hauptdomain) habe zusätzlich eingetragen:
          dyndns.checkip.net. NS ns1.checkip.net.
          dyndns.checkip.net. NS ns2.checkip.net.

          Im Kunden-Portal habe ich unter Domain-Administration eingestellt, dass der Nameserver
          PRIMARY checkip.net mit IP 83.169.36.103 und
          SECONDARY ns2.hans.hosteurope.de mit IP 80.237.128.10 ist,
          desweiteren
          AUTODNS SECONDARY
          PRIMARY NAMESERVER IP 83.169.36.103

  5. Hallo Tim,

    erst einmal vielen Dank für deine Mühe und dein tolles Tutorial. Ich habe alles soweit auch gemacht und die Schritte sind inkl. Fritz-Box konfiguration durchgeführt worden. Jedes mal, wenn ich eine Änderung habe, bekomme ich auch eine Email und auch in den dns-einstellungen sehe ich auch wunderbar, die IP, die drinstehen soll.. Allerdings habe ich das Problem, dass trotzdem meine dynamische-dns domain auf meine „Haupt-IP“ des Servers zeigt.. Sprich weder im Ping noch im nslookup (logischerweise) ist keine Änderung zu sehen und somit erfüllt das ganze auch seltsamerweise nicht seinen Sinn und Zweck.. Woran könnte das liegen?

    Viele Grüße

  6. Hallo,

    tolle Anleitung. Allerdings habe auch ich das Problem mit dem Endlosanmeldefenster, beim Test des Scripts. Gibt es hier schon eine Lösung und auch eine Erklärung woran das bei einigen liegen könnte?

    Beste Grüße
    Daniel

  7. Da ich mit meinen mobilen Geräten auch DYNDNS benötige habe ich der filter.class.php ab Zeile 63 folgendes modifiziert:

    if ($get[‚ip‘]==“REMOTE“){$ip=$_SERVER[‚REMOTE_ADDR‘];} else {$ip=$get[‚ip‘];}

    if ($get[‚ip‘]==“REMOTE“){
    $ip_host=gethostbyaddr($ip);
    $ip46=rtrim(`/usr/bin/dig $ip4_host AAAA +short`);
    if (!$ip46==““) {$ip6=$ip46;} else {$ip6=null;}
    }

    //set local variables
    worker::setHostname($get[‚hostname‘]);
    //worker::setIPv4($get[‚ip‘]);
    //worker::setIPv6($get[‚ip6‘]);
    worker::setIPv4($ip);
    worker::setIPv6($ip6);

    Mit Aufruf https://user:passwort@dyndns.checkip.net/updatedns.php?hostname=&ip=REMOTE kann ich von unterwegs die DYNDNS der Mobilengeräte setzen.

  8. Hallo Tim,

    Danke erstmal für deine hervorragende Anleitung. Leider möchte das ganze aber bei mir noch nicht Funktionieren. Die IP Adresse von der fritz.box wird in die DNS Einstellung übernommen, jedoch wenn ich eine Abfrage via nslookup starte wird mir die Server IP ausgegeben. ich habe eine vServer bei Strato mit mehreren Domains über eine IP laufen, hast du noch eine Idee was ich einstellen muss damit die IP richtig abgefragt wird.

  9. Servus,

    hat irgendwer von euch des ganze schonmal mit ddclient aufgesetzt? Daran scheiterts bis jetzt bei mir.
    und vielen Dank für die super Anleitung 🙂

    LG aus Bayern
    Philipp

  10. Erst einmal großes Dankeschön für diese sehr einfache und ausführliche Anleitung.

    Ich kann beim Punkt 9. leider nicht weiter machen, weil ich Plesk auf einem Windows Server 2016 laufen lasse und es somit keinen Nginx für Windows Server existiert. Der Plesk Support hat mir geschrieben das es dafür IIS gibt, was auch immer das ist.

    Da ich ein ziemlicher Anfänger in der Materie bin, es aber unbedingt zum laufen bekommen will und muss, frage ich mich was nun? Könnte ich ohne Nginx weiter machen?

    Kannst du Tim mir da weiter helfen? Oder ggf. sagen nach was ich in Google suchen muss um deine Anleitung zu ende bringen zu können?

    Vielen Dank im Voraus

  11. Hm, betreibt das ganze wer mit slave dns servern, während Plesk der Master ist ? Was mir gerade erst aufgefallen ist, das dnsmng cmd tool von Plesk aktualisiert wohl mit einem –update nicht die Serial Number vom Zonefile, was dazu führt das der Nameserver die Zonen nicht auf die Slaves transferiert, weil die Serial immer gleich bleibt. Gibt’s dazu evtl. einen Workaround irgendwie ?

  12. Erstmal danke für das Tutorial! Ich habe es eben auch versucht nachzuvollziehen und es hat nach einigen Änderungen im Code ganz gut funktioniert.
    Zu den Zonefiles @Markus … es gibt in Plesk bei SOA die Einstellung „Seriennummernformat für die DNS-Zone“, vielleicht hilft das schon?
    Zu der Authentifizierung… das hat bei mir auch am Anfang nicht geklappt. Ein print_r($_SERVER) in der basic.class.php zeigt relativ schnell, dass die Indizes PHP_AUTH_USER und PHP_AUTH_PW in $_SERVER nicht gesetzt waren. Ich habe dazu in den Hosting-Einstellungen von Plesk eingestellt, dass PHP als „FPM-Anwendung von nginx“ bedient wird, das hat schon geholfen. Ansonsten hilft auch die .htaccess-Änderung von Christian oben möglicherweise.
    Wenn ich jetzt ein „dig server.ddns.meinserver.com“ mache, kommt noch die IP des Servers, aber wenn ich „meinen“ Nameserver direkt anfrage („dig server.ddns.meinserver.com @meinserver.com“) kommt die richtige Antwort. Dauert die Synchronisierung vielleicht einfach? Beste Grüße!

  13. Das Seriennummer-Format hat damit leider nichts zu tun. Das Problem ist einfach das bei einer Änderung von extern durch das dnsmng keine Erhöhung der Serial stattfindet, damit werden dann die Änderungen auch nicht an Slave Server weiter gegeben. Offensichtlich kommen hier aber auch keine Antworten vom Author mehr 🙁

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.