onderka.com

Eigener DynDNS mit Bind, Apache und PHP

Hinweis: Die Seite "Eigener DynDNS mit Bind, Apache und PHP" ist vor mehr als einem Jahr geschrieben oder zuletzt editiert worden und unter Umständen veraltet oder nicht mehr korrekt.

Aktualisiert: Version 2.0 für Bind und dnsmasq ist hier

Nach einigem Googeln in die Tat umgesetzt, um von Dienstleistern unabhängig zu werden: Ein DynDNS-Server mit Bind, Apache und PHP. Eine (kurze) Anleitung findet sich auch in der README.txt des Archivs, hier die Zusammenfassung:

Voraussetzungen

  • Einen eigenen Server
  • Einen installierten Bind Nameserver
  • Apache Webserver mit PHP
  • Apache mod_rewrite für DynDNS-kompatible URLs (/nic/update?...)

Ich gehe davon aus, dass man – sofern man die Rechte zum Update seines eigenen DNS hat – auch über die nötigen Kenntnisse im Umgang mit PHP, Apache und der Shell hat.

Installation

  • Bind auf example.com einrichten
  • Eine DNS-Zone für den DynDNS einrichten, z.B. ddns.example.com
  • Einen Key für Bind zum Update der Zone erstellen
  • Bind einrichten, so dass die Zone mit dem erstellten Key aktualisiert werden darf

Bis hierher ist das Setup dem Leser überlassen, nur einige Anhaltspunkte zum Weiterlesen:

Für das Erstellen des Keys taugt folgendes Skript:

In der named.conf den Key definieren:

und in der Zone Updates mit diesem Key erlauben:

Installation und Konfiguration der Software

  • Einen Virtual Host erstellen, beispielsweise ddns.example.com
  • Das Archiv in die DocumentRoot entpacken
  • Alle Ordner und Dateien für den Apache-User (normalerweise www-data:www-data) lesbar, die Ordner log/ und data/ schreibbar machen

Bearbeiten von include/config.php, mindestens:

  • DNS_SERVER: Höchstwahrscheinlich 127.0.0.1/localhost
  • DDNS_ZONE: Die zu aktualisierende Zone wie ddns.example.com, ohne Punkt am Ende
  • KEY_NAME: Der Name des Update-Schlüssels, wie ddns-update-key-php
  • KEY_VALUE: Der Wert („secret“) des Schlüssels, wie 5FPbxxVasoXxssC+jc1A==

Bearbeiten von include/users.php: USERNAME ist gleichzeitig der dynamische Hostname, also USERNAME.ddns.example.com. Beispiel:

Der User home mit dem Passwort home$$pASSw0rd ist somit für das Update von home.ddns.example.com eingerichtet.

Tests mit einem Browser

Ohne Authentifizierung wird die IP des Clients angezeigt:

  • http://ddns.example.com/

Einfache Update-URL:

  • http://ddns.example.com/?name=home&pass=home$$pASSw0rd

DynDNS-kompatible URL:

  • http://ddns.example.com/nic/update?name=home&pass=home$$pASSw0rd
  • http://ddns.example.com/nic/update?hostname=home&pass=home$$pASSw0rd

Kürzeste URL:

  • http://home:home$$pASSw0rd@ddns.example.com

Achtung: „Basic Auth“ (http://user:pass@hostname) wird heute von vielen Browsern nicht mehr unterstützt bzw. stillschweigend ignoriert! So kann man Stunden damit verbringen zu suchen, wo PHP User & Passwort versteckt hat….

M0n0wall

M0n0wall (dessen DynDNS-Client seit Jahren verbockt ist), lässt sich so mit der Einstellung „DynDNS (custom)“ zum Laufen bekommen:

Ddns_setup_m0n0wall

Er ruft dann folgende URL auf:

  • http://[username]:[password]@ddns.example.com/nic/update?system=custom&hostname=[hostname]&myip=[wan-ip]&wildcard=OFF&

Das Rewrite von /nic/update?... nach /index.php?... wird in der .htaccess gesteuert, mod_rewrite muss dazu aktiviert sein.

AVM FRITZ!Box

Eine FRITZ!Box funktioniert mit „Benutzerdefiniert“ als DynDNS-Anbieter und folgenden Einstellungen:

Ddns_setup_fritzbox

Dies wird ausgewertet zu:

  • http://[username]:[password]@ddns.example.com/?hostname=<username>&pass=<pass>&hostname=<domain>&myip=<ipaddr>

Bash/cURL

Eine simple Kommandozeile für einen Cronjob:

Server-Antworten

Die Antworten sind weitestgehend an den DynDNS-Standard (http://www.noip.com/integrate/response) angepasst:

  • good IP_ADDRESS: Host aktualisiert
  • nochg IP_ADDRESS: Keine Änderung seit letztem Update
  • badauth: Benutzer und/oder Passwort ungültig
  • 911: Interner Serverfehler (Apache Error 500, IP-Datei nicht schreibbar, nsupdate-Fehler)

Dateien

Download (Version 1.0): privater-ddns_1.0.tar.bz2

Die Inhaltsstoffe, 1:1 aus dem Archiv zitiert:

Ähnliches

Seiten und Einträge, gefunden nach Tags.

3 Kommentare

  1. Ich habe den Verdacht, in dem Archiv fehlt die root .htaccess; besteht die Möglichkeit, die RewriteRules so zu bekommen?

  2. Ooops, fail. Die relevanten Zeilen:


    # Rewrite DynDNS protocol "/nic/update?..." to "/index.php?..."
    # -----------------------------------------------------------------------------
    RewriteEngine On
    RewriteRule ^nic/update?(.*)$ /index.php$1

    [...]

    <FilesMatch "\~$">
    Require all denied
    </FilesMatch>

    <FilesMatch "^\.ht">
    Require all denied
    </FilesMatch>

    <FilesMatch "\.log$">
    Require all denied
    </FilesMatch>

    <FilesMatch "\.ip$">
    Require all denied
    </FilesMatch>

  3. Vielen Dank für die schnelle Antwort, funktioniert wunderbar!

Seite Kommentieren

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

Captcha * Time limit is exhausted. Please reload CAPTCHA.