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:
- https://controlc.de/2013/09/10/debian-selbstgehosteter-dyndns-dienst/
- http://andrwe.org/linux/own-ddns
- http://linux.yyz.us/nsupdate/
- http://blog.philippklaus.de/2013/01/updating-dns-entries-with-nsupdate-or-alternative-implementations-your-own-ddns/
- https://www.mynakedgirlfriend.de/eigenes-dyndns-mit-bind-und-apache/
Für das Erstellen des Keys taugt folgendes Kommando:
ddns-confgen -q -a hmac-md5 -k ddns-update-key-php -r /dev/urandom | tee ddns-update-key-php
In der named.conf
den Key definieren:
// DDNS-Update Key
key "ddns-update-key-php" {
algorithm hmac-md5;
secret "5F1234TrallalaHopsassa12345abcABCC+jc1A==";
};
und in der Zone Updates mit diesem Key erlauben:
zone "ddns.example.com" {
// ...
allow-update {
key ddns-update-key-php;
};
// ...
};
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/
unddata/
schreibbar machen
Bearbeiten von include/config.php
, mindestens:
DNS_SERVER
: Höchstwahrscheinlich 127.0.0.1/localhostDDNS_ZONE
: Die zu aktualisierende Zone wie ddns.example.com, ohne Punkt am EndeKEY_NAME
: Der Name des Update-Schlüssels, wie ddns-update-key-phpKEY_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:
$known_clients['home'] = 'home$$pASSw0rd';
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:
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:
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:
curl -v -s "http://home:home$$pASSw0rd@ddns.example.com"
Server-Antworten
Die Antworten sind weitestgehend an den DynDNS-Standard (http://www.noip.com/integrate/response) angepasst:
good IP_ADDRESS
: Host aktualisiertnochg IP_ADDRESS
: Keine Änderung seit letztem Updatebadauth
: Benutzer und/oder Passwort ungültig911
: 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:
favicon.ico - An icon. You guessed it. Ripped from DynDNS
index.php - Main php file
.htaccess - Basic settings and rewriting of DynDNS protocol URLs
data/${client}.ip - Stored client IPs
data/.htaccess - Folder protection
include/config.php - PHP system configutation
include/functions.php - PHP functions
include/users.php - DynDNS user setup
include/.htaccess - Folder protection
log/debug.log - Log for debugging
log/events.log - Log for events
log/.htaccess - Folder protection
Kommentare (3)
Ich habe den Verdacht, in dem Archiv fehlt die root .htaccess; besteht die Möglichkeit, die RewriteRules so zu bekommen?
Ooops, fail. Die relevanten Zeilen:
Vielen Dank für die schnelle Antwort, funktioniert wunderbar!