Content
On- et Offline- Statut du routeur fli4l sur la page d'accueil
[Translate to French:]
Hier soll aufgezeigt werden, wie man auf der eigenen Homepage eine Status-Seite erstellt, auf der der On- oder Offline-Status des eigenen FLI4L-Routers ersichtlich ist. Wird diese Website angesurft, während der eigene Router offline ist, erscheint eine frei definierbare Website, wo z.B. zu lesen ist: Sorry, bin offline.
Ist man online, erscheint eine auf dem eigenen HTTP-Server liegende Seite, die die aktuelle IP enthält.
Das ganze funktioniert allerdings nur, wenn im Browser des Besuchers JavaScript aktiviert ist.
ACHTUNG!
Die öffentliche Weitergabe der eigenen IP-Adresse kann ein sehr grosses Sicherheitsrisiko sein! Jeder Fremde, der diese IP-Adresse kennt, könnte versuchen, in den eigenen Rechner einzudringen. Falls dieser Versuch glückt, könnten Persönliche Daten, wie z.B. Passwörter, von Fremden eingesehen werden, oder es könnte sogar im Extremfall die gesamte Festplatte gelöscht werden. Ich übernehme da natürlich keine Haftung. Jeder handelt auf eignes Risiko!
Um wenigstens etwas Sicherheit zu haben, sollte man diese öffentliche Website in einem geheimen Verzeichnis der Homepage verstecken, und diese URL nur guten Freunden mitteilen. Wenn der Provider es anbietet, besteht auch die Möglichkeit den Zugriff mit einem Passwort zu sichern.
Voraussetzungen
Benötigt wird Webspace beim Provider mit FTP-Zugriffsmöglichkeit.
Ein laufender HTTP-Server auf dem FLI4L-Router, der von aussen erreichbar sein muss. Nicht ausreichend ist der interne Mini-HTTPD, der für das Webinterface vom Router benötigt wird!
Es muss ein zweiter HTTP-Server eingerichtet werden. Wie man das macht, steht im
Mini-Howto fuer FLI4L als Mini-Webserver von Florian Zierer
Wer, wie im oben genannten HOWTO erwähnt, keine Festplatte hat, oder sie nicht nutzen will, kann, wenn noch genügend Platz auf der Diskette ist, das Verzeichnis des 2. HTTP-Servers auch so legen, dass es über die Bootdiskette in die RAM-Disk entpackt wird. Der Vorteil hierbei: Die Platte läuft bei Zugriff nicht an, wenn sie per hdparm schläft.
Gelesen und ausprobiert haben sollte man das
Mini-Howto fuer IP-Aktualisierung auf einer HTML-Seite von Carl Kossack. Ich werde den Upload der HTML-Seite jedoch nicht aus der <tt>/etc/portfw.sh</tt> heraus starten, sondern aus der <tt>/etc/ppp/ip-up.user</tt>. Das, um auch eine andere Möglichkeit aufzuzeigen. Ausserdem ist bei dieser Methode kein portforwarding nötig. Ich werde mich aber ansonsten, soweit möglich, an den im oben genannten HOWTO beschriebenen Weg halten. Wichtig ist, dass ftp auf dem Router installiert, sowie der Port 80 in der Firewall-Konfiguration nicht gesperrt ist, wie im Mini-Howto fuer IP-Aktualisierung auf einer HTML-Seite beschrieben ist.
Funktionsweise, Technik
Auf dem eigenen HTTP-Server wird ein kleines transparentes GIF-Image abgelegt (<tt>transparent.gif</tt>).
Auf dem Homepage-Server des Providers wird eine HTML-Seite abgelegt (<tt>offline.html</tt>). Sie enthält den Text: Sorry, bin offline!
Bei jeder Interneteinwahl wird eine Web-Seite auf den Homepage-Server des Providers geladen. Diese HTML-Seite enthält die Aktuelle eigene IP-Adresse in Form einer URL. Diese URL zeigt zu unserem Rechner, auf die <tt>online.html</tt>.
Wird nun die Seite angesurft, wird per JavaScript geprüft, ob das <tt>transparent.gif</tt> auf unserem Rechner erreichbar ist. Wenn es geladen werden konnte, erscheint automatisch die <tt>online.html</tt> von unserem eigenen Rechner, sofern man noch online ist.
Ist man nicht mehr online, ist das <tt>transparent.gif</tt> nicht erreichbar. In diesem Fall erscheint nach einem kurzen einstellbaren Timeout, während die Uhrzeit unserer letzen Onlineverbindung angezeigt wird, die auf dem Homepage-Server des Providers liegende <tt>offline.html</tt>.
Der Timeout ist nötig, weil es ohne ihn ewig dauert, bis der Timeout des Homepageservers abgelaufen ist.
Dateien
Ausgehend von: fli4l 2.0.3-Downloadverzeichnis/ <tt>opt/files/usr/mybin/vorlage.txt:</tt> ist die Seite, die bei jeder Interneteinwahl hochgeladen wird
<tt>opt/etc/ppp/ip-up.user:</tt> Stellt die momentane IP zur Verfügung, leitet den FTP-Upload ein
<tt>http://mini_httpd2/online.html:</tt> Eine HTML Seite die ebenfalls aus der /etc/ppp/ip-up.user heraus generiert wird, und die IP-Adresse enthält.
<tt>http://dein_provider/geheim/offline.html:</tt> Die offline-Seite
Folgende opt-Pakete müssen installiert und eingerichtet sein:
httpd: Mini-Webserver für Status-Ausgaben
inet: Telnet/FTP/SSH-Server (FTP wird benötigt)
tools: Diverse Linux-Programme als Tools (OPT_FTP wird benötigt als FTP Client)
An die Arbeit;-)
Zuerst wird ein Verzeichnis auf dem Homepage-Server des Providers erstellt. Im Folgenden <tt>http://dein_provider/geheim/</tt> genannt. In dieses Verzeichnis kopieren wir eine HTML-Seite beliebigen Inhalts, z.B. der Mitteilung: Sorry, bin zur Zeit offline, probiere es später noch mal!. Diese HTML-Seite soll <tt>offline.html</tt> genant werden.
Nun muss ein Verzeichnis für den zweiten HTTP-Server erstellt und/oder gemountet (eingebunden) werden. Entweder nutzt man dafür eine Partition der Festplatte, oder die RAM-Disk.
Dieses Verzeichnis soll unsere Homepage-Dateien auf dem Router aufnehmen. Da der Mini-HTTP für die Stastusanzeige in <tt>.../usr/local/htdocs</tt> hat, kommen unsere eigenen Dateien der Einfachheit halber nach <tt>.../usr/local/htdocs2</tt>. Dieses Verzeichnis ist zu erstellen, bzw als solches zu mounten.
Im Verzeichnis des 2. HTTP-Servers unseres FLI4L-Routers wird nun ein kleines Image abgelegt, im Folgenden <tt>transparent.gif</tt> genannt. Dieses Image soll winzig klein und transparent sein. Wer so etwas nicht selber erstellen kann, kann es sich bei mir herunterladen: transparent.gif
Nun wird in fli4l-2.0.1/opt/files/usr/local/mybin die Datei vorlage.txt erstellt, mit folgendem Inhalt:
<html><head>
<meta http-equiv="expires" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta name="robots" content="noindex, nofollow">
<title>forwarder</title>
<script language="JavaScript">
<!--
setTimeout("location.href='offline.html'",2000)
//-->
</script>
</head>
<body>
<br><br><br><br><br><br><br>
<table align="center" border="0">
<tr><td>
Sie werden gleich weitergeleitet!<br>
<br>
<br>
Diese Seite wurde am _datum_ um _uhrzeit_ Uhr erstellt.<br>
</td></tr>
</table>
<table height="100%"><tr><td> </td></tr></table>
<img src=http://_ip_/transparent.gif border=0 width=0 height=0
onLoad="window.location.href='http://_ip_/online.html';">
</body></html>
Die vorlage.txt in <tt>fli4l-2.0.3/opt/files/opt/usr/local/mybin</tt> ist, nachdem eine neue Diskette erstellt worden ist, sowie ein Reboot gemacht wurde, später auf dem FLI4L-Router zu finden in: <tt>/usr/local/bin/vorlage.txt</tt>. Sie wandert also von <tt>usr/local/mybin</tt> nach <tt>/usr/local/bin</tt>, sozusagen;-) Genau genommen wandert sie nicht, es wird lediglich ein Softlink von <tt>usr/local/mybin</tt> zu <tt>/opt/files/opt/usr/local/mybin</tt> erstellt. Das nur der Vollständigkeit halber.
Als nächstes wird die fli4l-2.0.3/opt/etc/ppp/ip-up.user angepasst. Folgendes bitte übernehmen:
#!/bin/sh
#-------------------------------------------------------
# /etc/ppp/ip-up.user
#
# Enter your specific commands here, wget etc.
#
# Creation: 08.09.2000 fm
# Last Update: 15.11.2001 asta
#-------------------------------------------------------
# Seite generieren
export datum=$(date "+%d.%m.%Y")
export time=$(date "+%H:%M:%S")
# Alle sed-Anweisungen in einer Zeile !!!
# [ _ip_ wird durch Inhalt $ip, _datum_ durch $datum und _time_ durch $time ersetzt.....]
/usr/bin/sed -e 's/_ip_/'$4'/g' /usr/local/bin/vorlage.txt | /usr/bin/sed -e 's/_datum_/'$datum'/g' | /usr/bin/sed -e 's/_uhrzeit_/'$time'/g' > /tmp/datei.txt
# Übertragen der Seite...
#################################################################################
/bin/echo "machine dein_provider.de login dein_login password GEHEIM" > /.netrc
chmod 600 /.netrc
(/bin/echo "cd public_html/geheim/"; /bin/echo "send /tmp/datei.txt index.html"; echo "bye" ) |
/usr/bin/ftp provider.de
rm /tmp/datei.txt
/bin/echo "<html>
<head><title>Aktuelle Daten von `hostname`</title></head>
<body>
<h3>Hello! You are visiting my privat webserver.</h3>
<h2>If you can read this, I am online now!</h2>
<br>
Technical referense:<br>
Hostname: `hostname`<br>
Linux: FLI4L v `cat /etc/version`, the on(e)-disk-router <br>
P166MMX, 64 MB SDRAM, 2xFloppy, 540 MB HDD, 1xFritz!Card PCI, 2x NE2000 comp ISA Ethernet 10 MBit<br>
<h3>Uptime (my fli4l-router is running since): " > /usr/local/htdocs2/online.html
MYTIME=`/bin/cat /proc/uptime | /usr/bin/cut -d' ' -f1 | /usr/bin/cut -d'.' -f1`
SEC=`/usr/bin/expr $MYTIME % 60`
MYTIME=`/usr/bin/expr $MYTIME / 60`
MIN=`/usr/bin/expr $MYTIME % 60`
MYTIME=`/usr/bin/expr $MYTIME / 60`
HRS=`/usr/bin/expr $MYTIME % 24`
DAYS=`/usr/bin/expr $MYTIME / 24`
/bin/echo "$DAYS Days $HRS:$MIN:$SEC" >> /usr/local/htdocs2/online.html
/bin/echo " </h3>
<h2><b>IP-Adresse: $4</b></h2>
<h4>Use this IP for connections with me!</h4>
<br><br><br>
<h3>Automaticaly generated file: `date`.</h3>
</body>
</html>" >> /usr/local/htdocs2/online.html
# KEIN exit 0 am Ende der ip-up.user für FLI4L 2x !
<tt>/usr/local/htdocs2/online.htm</tt> ist an die eigenen Gegebenheiten anzupassen (3 Mal in obiger Auflistung). Je nachdem, wo das httpd-Verzeichnis für den 2.Webserver eingerichtet wurde, muss der PATH hier angegeben werden.
Die Variable, die die IP enthällt, war bei fli4l 1.6.x in der /usr/local/bin/ip-up: $1, bei fli4l ab 2.0.1 in der /etc/ppp/ip-up.user hingegen ist es nun: $4, oder $local. Ich bitte dieses bei einem Update zu beachten.
Die <tt>ip-up.user</tt> füllt erst die <tt>vorlage.txt</tt> aus, und speichert sie inklusive der eingesetzten Variablen als <tt>/tmp/datei.txt</tt>.
Die <tt>/tmp/datei.txt</tt> wird per ftp nach <tt>http:/provider/homepage/geheim/index.html</tt> geladen, und anschliessend gelöscht.
Danach wird eine zweite HTML-Seite per echo-Anweisung generiert und auf unserem HTTP-Server als <tt>online.html</tt> gespeichert (Path anpassen!!), Auch hier gibt es ein paar leckere Features. Die Variable <tt>hostname</tt> wird automatisch durch den Namen des FLI4L-Routers ersetzt. Ausserdem enthält die Seite die Uptime des Routers:-). Für den Uptime-Script-Teil möchte ich den Mitgliedern der Mailingliste und Newsgroup spline.fli4l danken. Ich weiss leider nicht mehr, wer obiges gepostet hat. Deswegen kann ich keinen Namen nennen, sorry.
2. Mini-HTTPD starten
Das einbinden des 2. Mini-HTTPD habe ich genau so gemacht, wie es im HOWTO
Mini-Howto fuer FLI4L als Mini-Webserver von Florian Zierer für die fli4l-Version 1.6.x beschrieben ist.
In der fli4l-2.0.3/opt/etc/rc.d/rc350.httpd wird einfach folgendes eingefügt:
[snip script]
#-------------------------------------------------------------------------
# start mini_httpd and restart it, if it is killed
#-------------------------------------------------------------------------
cd $docroot
{ trap "" 1
while true; do
/usr/local/sbin/mini_httpd -D -p $HTTPD_PORT -u root -c "**.cgi" 2>&1 | $log
done
} &
cd /
#-------------------------------------------------------------------------
# start des 2. Webservers auf port 80
#-------------------------------------------------------------------------
cd /usr/local/htdocs2 # Verzeichniss in dem die HTML Seite zu finden ist
/usr/local/sbin/mini_httpd -u root -c "*.cgi" -p 80
cd /
Wobei der normale, erste Mini-HTTPD für die Statusanzeige in der httpd.txt auf Port 81 zu konfigurieren ist. Der 2 Mini-HTTPD läuft auf Port 80.:
#------------------------------------------------------------------------------
# Optional package: HTTP-Server for Monitoring
#------------------------------------------------------------------------------
OPT_HTTPD='yes' # install mini web server: yes or no
HTTPD_PORT='81' # http port, see also FIREWALL_DENY_PORT_x !
Port 80 ist in der base.txt für Zugriffe von aussen freizuschalten:
FIREWALL_DENY_PORT_3='54:79 REJECT' # privileged ports: reject or deny
FIREWALL_DENY_PORT_4='81:112 REJECT' # 80 fuer httpd-2 geoeffnet
Das war es schon. Nun wird eine neue Diskette erstellt, oder die neue Konfiguration per FTP auf den Router übertragen, und ein Reboot gemacht. Die Dateien <tt>ip-up.user</tt> oder die <tt>vorlage.txt</tt> lassen sich auch zur Laufzeit per FTP austauschen. Geht schneller, wenn man noch am Rumprobieren ist;-)
Nun kommt der grosse Augenblick: Eine Anwahl wird ausgelöst. Dabei sollte die <tt>vorlage.txt</tt> generiert und zu unserem Provider transferiert werden.
Den Lieblingsbrowser nehmen, und diese Seite aufrufen. Am Besten über den Proxy des Providers. <tt>http://dein_provider.de/geheim/index.html</tt>.
Jetzt gibt es 3 Möglichkeiten: Du hast etwas falsch gemacht, ich habe etwas falsch gemacht, die 3. Möglichkeit: Es funktioniert:-)
Den offline-Status kann am Besten ein Freund testen. Oder falls eine 2. vom Router unabhängige Internetverbindung vorhanden ist, damit. Oder noch einfacher: Einfach das <tt>transprent.gif</tt> auf dem laufenden Router umbenennen. Es befindet sich dort in <tt>/usr/local/htdocs2</tt>, oder welches Verzeichnis auch immer für den 2. Minni-HTTPD gewählt wurde.
Umbenannt wird es durch folgende Eingaben direkt auf dem Router:
<tt>mv /usr/local/htdocs2/transparent.gif /usr/local/htdocs2/umbenannt.gif</tt>
<tt>mv</tt> bedeutet move, verschieben
<tt>verschiebe alte_Datei nach neue_Datei</tt>
Nun kann das <tt>transparent.gif</tt> nicht mehr gefunden werden, so als wenn man offline währe
Nicht vergessen es nacher wieder zuzückzubenennen:
<tt>mv /usr/local/htdocs2/umbenannt.gif /usr/local/htdocs2/transparent.gif</tt>
Kleiner Tip: Wenn der online-Status funktioniert, dann kann man sich die <tt>http://dein_provider.de/geheim/index.html</tt> per ftp auf den eigenen Rechner holen, umbenennen (z.B. in test.html) und per ftp wieder zurück schieben. Einmal auflegen und wieder anwählen, damit wir eine andere IP bekommen. Nun die test.html im Browser aufrufen. Da wir inzwischen eine andere IP bekommen haben, sind wir aus Sicht der test.html quasi offline;-)
Der Timeout vor der Weiterleitung zur <tt>offline.html</tt> kann in der <tt>vorlage.txt</tt> mittels setTimeout("location.href='offline.html'",2000) eingestellt werden. Angegeben sind Millisekunden. Unter 1000 sollte man nicht gehen, da die Verbindung zum eigenen Webserver langsam sein kann, wenn z.B. die Platte erst anlaufen muss.
Wenn alles funktioniert können die <tt>offline.html</tt>, und die <tt>online.html</tt> sowie auch die automatisch generierte <tt>index.html</tt> (über die <tt>vorlage.txt</tt>) an ein persönliches Layout angepasst werden.
Zum Beispiel kann anstatt auf die <tt>online.html</tt> (auf dem eigenen Rechner) auf ein Frameset verwiesen werden dass links ein eigenes Menüe und rechts die <tt>online.html</tt> enthält. So hat man eine Webpräsenz auf dem eigenen Rechner;-)
T-Online-User, bitte folgendes beachten:
In der <tt>ip-up.user</tt> muss der FTP-Upload-Teil angepasst werden. Wenn man zu T-Online FTP macht, ist man ohne Login und Passwort, gleich drin. Trotzdem gibt es ein Passwort sowie einen Login, der für alle T-Online-User gleich lautet:
Login: ftp
Passwort: . (ein Punkt)
Ferner funktionierte der Upload der Seite nur mit dem Zusatz "passive". Der Weg zu dieser Erkenntnis war lang: ca 100 eMails, und ein Login per SSH;-)
Für T-Online-User sieht der Upload-Teil dann so aus, statt wie weiter oben aufgelistet:
# Übertragen der Seite...
#################################################################################
/bin/echo "machine dein_provider.de login ftp password ." > /.netrc
chmod 600 /.netrc
(/bin/echo "passive"; /bin/echo "cd public_html/geheim/"; /bin/echo "send /tmp/datei.txt index.html"; /bin/echo "bye" ) |
/usr/bin/ftp provider.de
rm /tmp/datei.txt
Ich wünsche allen FLI4L-Usern viel Spass mit diesem Feature;-)I
Wer das ganze einmal ausprobieren möchte, für den habe ich in ein Verzeichnis meiner Homepage alle benötigten Dateien abgelegt, und für diesen Test modifiziert.. Dort kann das ganze aufgerufen werden. Es wird hier nicht auf meinen tatsächlichen Rechner gezeigt, sondern nur auf eine vorhandene und eine nicht vorhandene Datei. Nur die Funktion an sich soll gezeigt werden.
ON-Line-Test
OFF-Line Test
Danksagung
Danken möchte ich folgenden Personen, ohne die dieses Mini-HOWTO nicht möglich gewesen wäre:
Matthias Sennewald für die Idee es per JavaScript zu realisieren. Ausserdem hat Matthias die Generierung der vorlage.txt erstellt.
Den Lesern der FLI4L-Mailingliste sowie der Newsgroup spline.fli4l.
Danke für die gute Zusammenarbeit. Wie man sieht, zahlt sich Teamwork aus:-)
Fehler oder Verbesserungen bitte an mich senden! Danke:-)
First upload: 10.12.2001
Last update : 24.12.2003
