Debian DYNDNS-Update
Allgemeines zu Dynamic DNS Providern
Wenn man einen Server zu Hause an einem DSL-Anschluss betreiben will, hat man das Problem, dass der Server vom Internet nach jeder neuen DSL-Einwahl (meist täglich) unter einer anderen IP-Adresser errreichbar ist. Damit wäre der Server nie von "außen" erreichbar. Abhilfe schaffen sog. Dynamic DNS-Provider wie http:www.dyndns.org oder http:www.no-ip.com. Diese verknüpfen einen Domainnamen z.B. schiele.homelinux.org (Domain registriert bei dyndns.org) mit der IP-Adresse. Dazu muß ein Client bei jeder Internet-Einwahl die neue IP-Adresse beim Dynamic-DNS Provider registrieren, damit der Server permanent unter dem Domainnamen erreichbar ist.
Viele DSL-Router können inzwischen nach der Interneteinwahl die IP-Adresse bei einem Dynamic DNS Provider wie www.dyndns.org oder www.no-ip.com einem selbstgewählten Domainnamen zuweisen. Dadurch ist das eigene Netzwerk vor allem der Serverimmer unter diesem Domainnamen aus dem Internet erreichbar. Dies beherrschen aber nicht alle Router bzw. sind fehlerhaft. Desweiteren kann die Notwendigkeit bestehen, mehrere Domains upzudaten.
Im folgenden wird ein Script vorgestellt, das die IP bei http://www.dyndns.org und/oder bei http://www.no-ip.com updaten wird.
Dazu wird regelmäßig via → cronjob - z.B. alle 5 Minuten geprüft, ob sich die IP-Adresse geändert hat z.B. nach einer Neueinwahl ins Internet. Falls sie sich geädert hat, wird der Updateprozess für die dyndns.org und/oder no-ip.com - Accounts angestossen.
Zur Ermittlung der externen IP-Adresse stehen zwei Verfahren zur Verfügung:
- via Fritzbox, falls eine Fritzbox vorhanden und "Statusinformationen über UPNP" via FB Webinterface (Erweiterte Einstellungen/System/Netzwerkeinstellungen) freigeschaltet ist. Hinweis: Aus Sicherheitsgründen sollte die Funktion "Änderungen der Sicherheitseinstellungen via UPNP" deaktiviert sein, da damit ein Schadprogramm auf einem angeschlossenen PC die Internetoptionen (z.B. Portfreigaben einrichten) ändern könnte.
- via checkip.dyndns.org (ein Service von Dyndns, für den nicht zwingend ein Account nötig ist)
Zum Update eines www.dyndns.org Accounts ist ddclient nötig. Dies ist ein Clientprogramm für Dyndns, das den Updatevorgang durchführt. Für www.no-ip.com - Accounts reichen die Bordmittel aus. D.h. kein zusätzliches externes Programm ist nötig.
Voraussetzung:
- Eine Domain bzw. ein Hostname ist bei einem Dynamic DNS-Provider wie http://www.dyndns.org oder http://www.no-ip.com registriert. Die bei der Registrierung angegebenen Daten wie Hostname, Username und Passwort werden im Folgenden benötigt. Der Registrierungsprozeß einer Domain ist nich Bestandteil dieser Anleitung.
- Optional: Mailserver für Benachrichtigungsmails
Installation
Falls ein www.dyndns.org Account upgedated werden soll, muss ddclient installiert werden.
apt-get update apt-get install ddclient
- Nach der Installation startet ein Konfigurationsscript. Hier können alle Angaben mit Enter bestätigt werden, da das Update Script die Konfiguration von ddclient selbst vornimmt.
Downloaden des Scripts:
cd /usr/local/bin wget ftp://download:download@schiele.homelinux.org/debian/upd_dynamic_dns.sh chmod +x upd_dynamic_dns.sh
Verzeichnis anlegen:
mkdir -p /var/tmp
Treffen von Einstellunge, wie Domainnamen, die updated werden sollen sowie User und Passwörter: Am Beginn des Scripts sind die möglichen Einstellungen aufgeführt, die an die Individuellen Gegebenheiten angepasst werden müssen.
vi /usr/local/bin/upd_dynamic_dns.sh
Enstellungen:
IP_FROM_FRITZ: 1: IP aus der Fritzbox auslesen 0: IP via checkip.dyndns.org ermitteln FBIP=192.168.0.1 Interne IP-Adresse der Fritzbox. Anpassung nur notwendig, wenn IP_FROM_FRITZ=1 ist.
Einstellungen für den Update eines www.no-ip.com - Accounts
UPDATE_NOIP: 0: kein Update via www.no-ip.com 1: Update via www.no-ip.com folgende Einstelungen nur nötig, für UPDATE_NOIP=1 DOMAIN_NOIP: Registrierter Domain/Hostname bei NO-IP USER_NOIP: username, der bei der Registrierung angegeben wurde PWD_NOIP: Passwort, das bei der Registrierung vergeben wurde
Einstellungen für den Update eines www.dyndns.org - Accounts
UPDATE_DDNS: 0: kein Update via www.dyndns.org 1: Update via www.dyndns.org folgende Einstelungen nur nötig, für UPDATE_DDNS=1 DOMAIN_DDNS: Registrierter Domain/Hostname bei Dyndns USER_DDNS: username, der bei der Registrierung angegeben wurde PWD_DDNS: Passwort, das bei der Registrierung vergeben wurde
Definition des Logfiles, in dem alle Aktionen und evtl. Fehler aufgelistet werden
LOGFILE=/var/log/ddns_update.log
Neben der Dokumentation von Hinweisen und Fehlern im Log-File, besteht die Möglichkeit diese auch zusätzlich per email zu versenden. Voraussetzung ist, dass entweder sendmail oder → Postfix installiert ist. Folgende Optionen stehen zur Verfügung:
MAIL_NOTIFY: versendet Hinweise: 0/1 MAIL_CRITICAL: versendet Fehlermeldungen: 0/1 MAIL_FROM: Absender-Adresse: z.B. "dns_updater" MAIL_TO: Empfänger-Adresse: z.B. "root"
Hinweis:
- Für die Einträge MAIL_FROM und MAIL_TO sollte bei internen Empfängern/Sendern die email-Adresse ohne die Domain (@domain) angegeben werden.
- Die Absenderadresse MAIL_FROM muß nicht unbedingt ein Account auf dem Mailserver sein, sodass auch der folgende Eintrag funktioniert:
"MAIL_FROM=dns_updater"
- Bei MAIL_TO können auch mehrere Empfänger, durch Leerzeichen getrennt, angegeben werden.
z.B. MAIL_TO="root test@gmx.de"
- Sollte kein Mailserver installiert sein, so MUSS folgendes eingestellt werden:
MAIL_NOTIFY=0 MAIL_CRITICAL=0
Absichern des Scripts
Nachdem sich Usernamen und Passwörter im Script im Klartext befinden, ist es unerläßlich dieses Script ausschließlich für root lesbar zu machen.
chown root:root /usr/local/bin/upd_dynamic_dns.sh chmod 700 /usr/local/bin/upd_dynamic_dns.sh
Testen des Scripts
Um das Script zu testen, folgenden Befehl eingeben:
/usr/local/bin/upd_dynamic_dns.sh
Checken des Logfiles
vi /var/log/ddns_update.log
Wenn alles gut gegangen ist, sollte eine Zeile mit folgendem Aufbau enthalten sein:
- No-IP: Datum_Uhrzeit - Refresh NO-IP.com - IP-Adresse - RESULT: DOMAIN_NOIP:0
- DYNDNS: Datum_Uhrzeit - Refresh DYNDNS.org - IP-Adresse - RESULT: SUCCESS: updating DOMAIN_DDNS: good: IP address set to IP-ADRESS
Die Rückmeldung des Updatevorgangs vom Provider wird eins zu eins nach RESULT: angehängt.
- NO-IP: Domain:Rückgabewert. Wenn kein Fehler aufgetreten ist, ist der Rückgabewert entweder 0 oder 1. Alle anderen Werte bedeuten, dass ein Fehler aufgetreten ist.
- DYNDNS: Die registrierte IP-Adresse wird zur Bestätigung zurückgegeben. Davor wird ein "good" ausgegeben.
Das Script ein zweites mal starten, da nach erfolgreicher Übertragung der IP-Adresse verifiziert wird, ob diese auch tatsächlich beim jeweiligen Dynmamic DNS-Provider registriert und im DNS-Server aktiviert wurde. Zu diesem Zweck wird der Domainname mit ping "angepingt" und die zurückgegebene IP-Adresse mit der gesendeten IP-Adresse verglichen. Falls diese übereinstimmen, ist alles gut gelaufen.
/usr/local/bin/upd_dynamic_dns.sh
Das Logfile checken:
vi /var/log/ddns_update.log
Es sollte ein/oder zwei je nachdem ob No-Ip.com und/oder Dyndns.org Accounts upgedated und verifiziert wurden:
- Datum_Uhrzeit - No-IP.com IP Change validated - IP-Adresse
- Datum_Uhrzeit - DYNDNS.org IP Change validated - IP-Adresse
Start regelmäßig
Das Script soll in Zukunft automatisch alle paar minuten z.B. alle 5 Minuten checken, ob sich die IP geändert hat. Dazu wird ein neuer CRON Job angelegt.
vi /etc/cron.d/upd_dyndns
Folgende Zeile ergänzen:
*/5 * * * * root /usr/local/bin/upd_dynamic_dns.sh >/dev/null 2>&1
Der erste Wert z.B. */5 bestimmt die Intervallzeit des Checks in Minuten (5). Um das Script nur alle 20 Minuten laufen zu lassen, wäre folglich der richtige Eintrag:
*/20 * * * * root /usr/local/bin/upd_dynamic_dns.sh >/dev/null 2>&1