• DynDNS via PHP Script auf InternetX DNS

  • Hallo!

    Für alle, die wie ich eine Fritz!Box, einen eigenen Rootserver und die Domains bei InternetX haben, hier ein kleine Anleitung, wie man einen eigenen DynDNS Dienst erstellt:

    1. PHP-Script:
    Auf dem Rootserver in einer vorhandenen Domain einen neuen Ordner (z.B. dyndns) anlegen und folgendes PHP Script mit namen "dyn.php" erstellen:

    <?
    // DynDNS über Fritzbox
    //
    // Passwort und Port nach belieben anpassen.
    //
    // In der Fritzbox das Script z.b. so aufrufen:
    // Update Url: www.MeineDomain.de/ordner/filename.php?pass=Passwort&meineip=<ipaddr>
    // Domainname: MeineDomain.de/
    //
    // Dieses Beispiel leitet zu der "IP:8080/cgi-bin/filemanager/" weiter...
    $pwort = 'Password'; // Hier sollte man sein persšnliches Passwort fŸr die Erneuerung der IP eintragen.
    $autodns_pwd = geheimespasswort';  //Passwort für die Anmeldung an AUTODNS3
    $port = ''; // Diese legt nur den "Port" und evtl Parameter fest.Kann auch leer bleiben
    $dyntxt = "homeIP.txt";
    $pworttest = $_GET["pass"];
    $IP = $_GET["meineip"];
    function requestCurl( $data ) {
    $ch = curl_init( HOST );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
    if( !$data = curl_exec( $ch )) {
    echo 'Curl execution error.', curl_error( $ch ) ."\n";
    return FALSE;
    }
    curl_close( $ch );
    return $data;
    }
    if (file_exists($dyntxt)){if($pworttest==$pwort) {
    $a = fopen("$dyntxt", "w");
    $dynamicip = $_SERVER["REMOTE_ADDR"];
    fwrite($a, $IP);
    fclose($a);
    define( 'HOST', 'https://gateway.autodns.com' );
    define( 'XML_FILE', 'request.xml' );
    $xml = preg_replace( '/TRANSFERIP/', $IP, implode( "", file(XML_FILE) ) );
    $xml = preg_replace( '/AUTODNSPW/', $autodns_pwd, $xml);
    header( 'Content-Type: text/xml' );
    echo requestCurl( $xml );
    $empfaenger = "user@domain.de";
    $betreff = "DynDNS Update erfolgt!";
    $from = "From: Vorname Name <logcheck@srv1.ph-internet.de>";
    $text = "Die IP Adresse wurde geaendert und lautet: $IP";
    mail($empfaenger, $betreff, $text, $from);
    } else { $a = fopen("$dyntxt", "r+");
    $dynamicip = fread($a,filesize($dyntxt));
    fclose($a);
    $url="http://".$dynamicip."".$port;
    header("Location: $url");} }
    ?>

    Die ROT markierten Werte anpassen, dies ist das später beim Aufruf von der Fritz!Box verwendete Passwort, das Passwort zur Anmeldung an AUtodns3 sowie die Infos für die Mailbenachrichtigung, dann bekommt ihr beim Wechsel der IP eine Mail zugeschickt. Im gleichen Verzeichnis die Datei "homeIP.txt" anlegen und schreibbar machen. Diese dient als Zwischenspeicher für die IP und kann auch von anderen Diensten dann verwendet werden (falls gewünscht)

     

    2. Subdomain anlegen

    Eine Subdomain im Autodns für eure Domain erstellen (hier im Beispiel: dyndns.domain.de). Dabei möglichst kleinen TTL Wert nehmen (600) und irgendeine beliebige IP setzen (diese wird später vom Script eh überschrieben):

     

    3. XML Datei anlegen

    InternetX bietet die Möglichkeit, DNS- bzw. Zoneneinträge per XML Schnittstelle zu ändern. Anleitung für mögliche Definitionen findet ihr im Kapitel 8 hier. Die Interaktion passiert hier am besten über den in Kapitel 1.3.2 beschriebenen Weg via PHP (wie er auch im o.a. PHP Script verwendet wird)

    Die XML-Definitionsdatei für den DNS Update im dyndns-Verzeichnis des Rootserversmit dem Namen "request.xml" anlegen und schreibbar machen.  Hierbei ist darauf zu achten, dass alle für die Definition gebrauchten Werte auch in dem XML File enthalten sind, sonst werden diese in der Zonenverwaltung nämlich gelöscht!. Am besten dazu mit dem XML Type 0205 (Siehe Kapitel 8.6) die Werte abfragen und dann in die XML Datei kopieren.

    Anbei das Beispiel der Definitionsdatei für meine Domain (anonymisiert), die roten Werte sind entsprechend den Login Informationen für Autodns zu ersetzen. Im grün markierten Abschnitt liegt dann die Logik - hier nämlich nicht (!!!) die IP eintragen sondern die Variable TRANSFERIP:

    <request>
    <auth>
    <user>USER</user>
    <password>AUTODNSPW</password>
    <context>4</context>
    </auth>
    <language>de</language>
    <task>
    <code>0202</code>
    <zone>
    <name>domain.de</name>
    <system_ns>a.ns14.net</system_ns>
    <main>
    <value>1.2.3.4</value>
    </main>
    <ns_action>complete</ns_action>
    <soa>
    <refresh>43200</refresh>
    <retry>14400</retry>
    <expire>604800</expire>
    <ttl>43200</ttl>
    <email>user@domain.de</email>
    <default>43200</default>
    </soa>
    <nserver>
    <name>a.ns14.net</name>
    </nserver>
    <nserver>
    <name>b.ns14.net</name>
    </nserver>
    <nserver>
    <name>c.ns14.net</name>
    </nserver>
    <nserver>
    <name>d.ns14.net</name>
    </nserver>
    <rr>
    <name/>
    <type>MX</type>
    <pref>10</pref>
    <value>domain.de.</value>
    </rr>
    <rr>
    <name>shop</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>blog</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>webcam</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>rootserver</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>dyndns</name>
    <ttl>600</ttl>
    <type>A</type>
    <value>TRANSFERIP</value>
    </rr>
    <rr>
    <name>webmail</name>
    <ttl>86400</ttl>
    <type>CNAME</type>
    <value>redirect.hostedoffice.ag.</value>
    </rr>
    <rr>
    <name>streetcam</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>mail</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>wetter</name>
    <ttl>86400</ttl>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    <rr>
    <name>phfotogalerie</name>
    <ttl>86400</ttl>
    <type>CNAME</type>
    <value>zenfolio.com.</value>
    </rr>
    <rr>
    <name/>
    <type>AAAA</type>
    <value>2a01:ffff:aaaa:bbbb::2</value>
    </rr>
    <rr>
    <name>lists</name>
    <type>A</type>
    <value>1.2.3.4</value>
    </rr>
    </zone>
    </task>
    </request>

    4. Fritz!Box Konfigurieren

    Jetzt fehlt nur noch der Aufruf in der Fritz!Box. Dazu im Menü "Internet => Freigaben => Dynamic DNS folgendes eintragen:

    • Dynamic DNS Anbieter: Benutzerdefiniert
    • Update URL: http://www.domain.de/dyndns/dyn.php?pass=Password&meineip=<ipaddr>
    • Domainname: dyndns.domain.de

    Hierbei (rot markiert) den Domainnamen in der URL sowie das Passwort (wie in der PHP Datei) entsprechend ändern. Leider darf wohl Nutzername und Kennwort nicht leer bleiben, ich habe dort jeweils ein Leerzeichen reingemacht. Abspeichern.

    Einmal neu verbinden und testen - sollte dann eigentlich wie beschrieben funktionieren! Das Heimnetz ist dann via dyndns.domain.de zu ereichen.

    Viel Spaß damit!

     

    Ciao Peter