dynamische IP-Adresse unter einem URL verfügbar machen

Vorwort

Dieser Text richtet sich in erster Linie an Nutzer von standleitungsähnlichen Internetzugängen mit dynamischer Vergabe von IP-Adressen. Dazu zählen die vielfältigen DSL-Varianten, Kabelmodemangebote, Flatrates, ...
Da die vergebene IP-Adresse bei jedem Systemstart eine andere sein kann, gestaltet sich der Zugriff auf den eigenen Rechner aus dem Internet schwierig, da man die aktuelle IP-Adresse nicht automatisch kennt. Ganz allgemein beschreibe ich, wie man dennoch unter einem festem URL auf den eigenen Rechner zugreifen kann und demonstriere dies anhand eines Beispiels auf Linux-Basis.

Ablauf ganz allgemein, unabhängig vom OS

Beim Start des Systems oder im Idealfall immmer dann, wenn der DHCP-Client eine neue IP-Adresse zugewiesen bekommt, muss automatisch ein Script ausgeführt werden. In jedem Betriebssystem sollte zumindest das erstere möglich sein (Windows: Start / Programme / Autostart)
Dieses Script muss nun die aktuell gültige IP-Adresse herausbekommen und in eine vorgefertigte HTML-Datei einfügen. Diese HTML-Datei wird dann lediglich von einem scriptfähigen FTP-Client auf einen x-beliebigen Webserver kopiert. Anschließend steht unter dem URL der dorthin kopierten Datei die aktuell gültige IP-Adresse zur Verfügung.

Damit lassen sich folgende Voraussetzungen definieren:

Umsetzung unter Linux

Verhältnisse beim Autor:

DHCP-Client

Der dhclient aus dem eingesetzten Paket dhcpcd hat von Haus aus die angenehme Eigenschaft, bei jeder Änderung der IP-Adresse eine bestimmte Datei auszuführen, und er tut dies auch wirklich nur bei einer Änderung der IP-Adresse. Die Datei liegt zusammen mit den aktuellen DHCP-Informationen im Verzeichnis /var/state/dhcp/ und heißt dhcpcd-???.exe
Die drei Fragezeichen stehen dabei für die Bezeichnung des DHCP-Netzwerkinterfaces, also bspw. eth1
Im konkreten Fall stellt diese Datei nur einen Link auf das eigentliche Script /home/user/scripts/online.sh dar.
In diesem Verzeichnis findet sich auch eine Datei dhcpcd-???.info, die in Klartext alle verfügbaren Informationen über das DHCP-Netzwerkinterface enthält. Aus dieser können wir im nächsten Schritt die IP-Adresse entnehmen.

Das Script

/home/user/scripts/online.sh:
0 #!/bin/bash
1 date >>/var/log/online.log
2 IP=`grep IPADDR= /var/state/dhcp/dhcpcd-eth1.info | tr -d 'IPADDR='`
3 echo $IP >>/var/log/online.log
4 sed -e s/ip-adresse/$IP/ /home/user/scripts/vorlage.htm >/home/user/scripts/aktuell.htm
5 /usr/local/bin/ncftpput -u ??? -p ??? -E ftp.server.de public_html /home/user/scripts/aktuell.htm >>/var/log/online.log 2>&1

Zeile 1 - nur für das Logfile

Da wir eine für den Anwender unsichtbare automatische Funktion prgrammieren, schreiben wir alle Aktivitäten in ein Logfile. Diese liegen unter Linux meist im Verzeichnis /var/log, unsere Logdatei bekommt den Namen online.log und mit dieser Zeile wird lediglich das Systemdatum zum Zeitpunkt der Scriptausführung dort abgelegt.

Zeile 2 - Auslesen der aktuellen IP-Adresse

Wie oben erwähnt, steht diese in /var/state/dhcp/dhcpcd-???.info und kann mit zwei "ganz einfachen" Unix-Standard-Befehlen in eine lokale Variable gespeichert werden:
grep sucht die Zeile mit "IPADDR=" in der Datei, gibt diese mit der sich anschließenden IP-Adresse aus und tr entfernt anschließend daraus das "IPADDR=", so daß nur noch die reine IP-Adresse in der Variablen abgelegt wird. Wichtig sind die korrekten Hochkommas bzw. "Backticks", sonst funktioniert die Befehlsweitergabe an die Shell nicht.

Zeile 3 - wieder für das Logfile

Hier wird die nur die aktuelle IP-Adresse in das Logfile geschrieben

Zeile 4 - Bearbeiten der HTML-Vorlage

Je nach gewünschter Funktionalität kann man einfach nur die aktuelle IP-Adresse auf der Internetseite ausgeben lassen, oder auch gleich eine refresh-Weiterleitung auf den eigenen Rechner realisieren. In jedem Fall muss die HTML-Vorlage einen sogenannten Platzhalter an allen Stellen vorweisen, an denen die IP-Adresse eingesetzt werden soll. Darunter versteht man eine Zeichenkette, die so nicht als Befehl oder Anweisung auftreten kann. Zur Verdeutlichung hier eine ganz einfache Beispiel-Vorlage-Datei:

<html><head>
<title> ...zum privaten Server... </title>
<meta http-equiv="refresh" content="5; URL=http://ip-adresse/">
<meta http-equiv="expires" content="0">
</head>
<body>
Weiterleitung in 5 Sekunden auf
<a href="http://ip-adresse/">den privaten Server: ip-adresse</a>
</body></html>

Der Platzhalter heisst hier "ip-adresse", durch den Aufruf von sed in Zeile 4 des Scriptes wird jedes Vorkommen des Platzhalters durch den Inhalt der vorher belegten Variablen ersetzt und die resultierende Datei als aktuell.htm gespeichert.

Zeile 5 - ftp-Transfer

Zu guter Letzt muss diese fertige HTML-Datei mit der aktuellen IP-Adresse per ftp auf den Webserver kopiert werden. Da der Standard-Unix-ftp-Client nicht scriptfähig ist, also nur interaktiv von der Kommandozeile bedient werden kann, bedarf es eines zusätzlichen Programmes.
NCFTP erfüllt die gewünschte Funktionalität und steht neben Linux auch für Windows zur Verfügung. In der Anweisung muss evtl. der Pfad zu den Programmdateien von NCFTP angepaßt werden, falls diese nicht in /usr/local/bin liegen. In jedem Fall müssen die Nutzerdaten für den FTP-Server eingetragen werden: Hinter -u der Nutzername, hinter -p das Passwort und hinter -E der Servername. Dahinter nur mit einem Leerzeichen getrennt das Verzeichnis auf dem Server, in dem die wiederum mit einem Leerzeichen abgetrennte lokale Datei abgelegt werden soll.
Die Zeichen danach sind nur für das Logfile. Alle Ausgaben und Fehlermeldungen des FTP-Programmes landen dort.

Rechte & Sicherheit

Die Scriptdatei online.sh muss mit ausreichenden Zugriffsrechten zum Ausführen versehen sein. Allerdings sollte man tunlichst darauf achten, daß nur Befugte - im Idealfall sogar nur root - überhaupt Zugriff haben. Es sei nur noch einmal daran erinnert, daß das Passwort für den ftp-Zugang in dieser Datei im Klartext steht. Also empfiehlt sich dafür 0700.
Die Vorlagedatei sollte man praktischerweise gleich mit den normalen html-Seiten-Rechten 0644 versehen, um Probleme beim Kopieren auf den Webserver zu vermeiden.

Download

die o.g. Scriptdatei und die HTML-Vorlage als ZIP-Datei (1kB)

Links

das scriptfähige NcFTP

nach oben

Viel Spaß!
Christian Güssmer 2000-04