DYNDNS-Update

Aus Wiki
Version vom 28. Februar 2009, 13:02 Uhr von Erich (Diskussion | Beiträge) (Die Seite wurde neu angelegt: == 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...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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 bzw. die NSLU immer 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 NSLU-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.
  • Installation winer aktuellen Cron-Version. Mit der bereits Standardmäßig eingebauten Cron-Version kam es immer wieder zu Inkompatibilitäten mit dem hier vorgestellten Script. Deshalb Cron gemäß → Anleitung hier installieren.

Installation

Falls ein www.dyndns.org Account upgedated werden soll, muss ddclient installiert werden.

ipkg update
ipkg install ddclient

Downloaden des Scripts:

cd /opt/sbin
wget ftp://download:download@schiele.homelinux.org/nslu/upd_dynamic_dns.sh

Verzeichnis anlegen:

mkdir -p /opt/var/tmp
mkdir -p /opt/var/log

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 /opt/sbin/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=/opt/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 weder sendmail noch Postfix auf der NSLU 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 /opt/sbin/upd_dynamic_dns.sh
chmod 700 /opt/sbin/upd_dynamic_dns.sh

Testen des Scripts

Um das Script zu testen, folgenden Befehl eingeben:

/opt/sbin/upd_dynamic_dns.sh

Checken des Logfiles

vi /opt/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.

/opt/sbin/upd_dynamic_dns.sh

Das Logfile checken:

vi /opt/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 das Script in die → Crontab eingetragen.

vi /opt/etc/crontab

Folgende Zeile ergänzen:

*/5 * * * * root /opt/sbin/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 /opt/sbin/upd_dynamic_dns.sh >/dev/null 2>&1