Diese Seite wurde vor mehr als 2 Jahren erstellt und vor über einem Monat zuletzt bearbeitet. Eventuell ist längst ihr Mindesthaltbarkeitsdatum überschritten!
DynDNS-Dienst für Netcup-Server mit der Netcup DNS-API
Netcup stellt für Abfragen und Änderungen der DNS-Daten eine API zur Verfügung. Lars-Sören Steck hat auf Github Code veröffentlich, der auf Clients ausgeführt werden kann und mit der API dynamische DNS-Einträge aktualisiert.
Ich habe das Repository mit meinem bisherigen Code zu einem DynDNS-Server für Netcup verwurstelt.
Clients werden authentifiziert, im Erfolgsfall wird der DNS A
-Record für hostname1.ddns
in der Domäne example.com
mit der Netcup-API aktualisiert (Bisher nur IPv4).
mod_rewrite
oder mod_alias
für DynDNS-kompatible URLs (/nic/update?...
)Ich gehe davon aus, dass man – sofern man einen eigenen vServer besitzt – auch über die nötigen Kenntnisse im Umgang mit PHP, Apache, DNS-Einträgen und der Shell hat.
example.com
einrichtenddns.example.com
, A-Eintrag oder CNAME für example.com
ddns.example.com
einrichten, HTTPS ausdrücklich empfohlendata
und log
für den Apache-User (meist www-data
, Gruppe www-data
) schreibbar machenBearbeiten von include/config.php
, mindestens:
CUSTOMERNR Netcup-Kundennummer
APIKEY API-Key
APIPASSWORD API-Passwort
DOMAIN Domain mit von Netcup verwaltetem DNS, Beispiel 'example.com'
DDNS_ZONE Subdomain von DOMAIN, die für den DynDNS-Server verwendet wird, Beispiel 'ddns'
DEBUG true für gesprächige Ausgaben im Logfile, false für nur das Wichtigste
Bearbeiten von include/users.php
:
$known_clients['hostname1'] = 'password1';
$known_clients['hostname2'] = 'password2';
...
Die User hostname1
/hostname2
für die Hosts hostname1.ddns.example.com
bzw. hostname2.ddns.example.com
mit
den Passwörtern password1
/password2
sind somit aktiv.
Ohne Authentifizierung wird die IP des Clients angezeigt:
https://ddns.example.com/
Einfache Update-URL:
https://ddns.example.com/?name=hostname1&pass=password1
DynDNS-kompatible URL:
https://ddns.example.com/nic/update?name=hostname1&pass=password1
https://ddns.example.com/nic/update?hostname=hostname1&pass=password1
Kürzeste URL:
https://hostname1:password1@ddns.example.com
Achtung: Basic Auth (https://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... Mit cURL funktioniert es.
Das Umschreiben von URLs (/nic/update?...
nach /index.php?...
) wird in der .htaccess
gesteuert, mod_rewrite muss dazu aktiviert sein. Alternativ mit RedirectMatch
etwas selbst basteln.
Eine FRITZ!Box funktioniert mit "Benutzerdefiniert" als DynDNS-Anbieter und folgenden Einstellungen:
Dies wird ausgewertet zu:
https://[benutzername]:[passwort]@ddns.example.com/?hostname=<benutzername>&pass=<passwort>&hostname=<domainname>&myip=<ipaddr>
Eine simple Kommandozeile für einen Cronjob auf einem Client:
curl -v -s "https://hostname1:password1@ddns.example.com"
wget --http-user=hostname1 --http-passwd=password1 --no-check-certificate https://ddns.example.com
Die Antworten sind weitestgehend an den DynDNS-Standard (https://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 (HTTP 500, IP-Datei nicht schreibbar, API-Fehler, etc.)Hinter einem Nginx als Proxy ist $_SERVER['REMOTE_ADDR']
eventuell leer: In diesem Fall muss in include/functions.php
in Zeile 9 stattdessen $_SERVER['HTTP_X_REAL_IP']
verwendet werden.
// IP des HTTP-Clients verwenden
//define("CLIENT_IP", $_SERVER['REMOTE_ADDR']);
define("CLIENT_IP", $_SERVER['HTTP_X_REAL_IP']);
oder alternativ muss Nginx REMOTE_ADDR
bereitstellen:
fastcgi_param REMOTE_ADDR $remote_addr;
beziehungsweise
fastcgi_param REMOTE_ADDR $http_x_real_ip;
Version 0.1 vom 14.04.2020: nc_ddns_master.tar.bz2
Mit Skripten und Quellcode auf dieser Seite sollte man keine Herz-Lungen-Maschine betreiben!