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.
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:
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.
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 |
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.
Hier wird die nur die aktuelle IP-Adresse in das Logfile geschrieben
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> |
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.
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.
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.
die o.g. Scriptdatei und die HTML-Vorlage als ZIP-Datei
(1kB)
das scriptfähige NcFTP
Viel Spaß!
Christian Güssmer 2000-04