Logo VB-EDV-Beratung

Rechner ins Netz

Damit ich - oder jemand anders - jederzeit von draußen auf meinen Rechner zugreifen kann, habe ich folgenden Mechanismus installiert:

  • Man ruft unter einer - sonst nicht benutzten - Telefonnummer meinen Rechner an.
  • Der Rechner nimmt ab (vbox) und startet ein Programm, daß für eine Viertelstunde eine Internetverbindung forciert.
  • Beim Aufbau der Verbindung wird eine Webseite auf meiner Website (mit Passwort geschützt) aktualisiert, so daß dort die aktuellen Verbindungsdaten stehen.
  • Zusätzlich werden die Verbindungsdaten (IP-Nummer) als eMail an mein Postfach bei t-online geschickt. Dadurch wird das Betreff dieser Mail automatisch an mein Handy geschickt, so daß ich auch ohne Browser die IP-Nummer meines Rechners erfahre.

Als erstes müssen die üblichen Eintragungen für vbox gemacht werden:

In der /etc/inittab
I6:23:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6

In der /etc/vbox/vboxgetty.conf

port /dev/ttyI6
  modeminit        ATZ&B512&E<msn>
  user             <einBenutzer>
  group            <eineGruppe>
  spooldir         /var/spool/vbox/internet

In das Verzeichnis /var/spool/vbox/internet kommen dann folgende Dateien:

Die standard.tcl so, wie sie im vbox mitgeliefert wird.

Die vbox.conf

[CALLERIDS]
*        UNKNOWN            *** unbekannter Anrufer ***

[UNKNOWN]

*        *    dummy.msg    0    RINGS=1 SCRIPT=vbox_ip.tcl

Das tcl-Programm (vbox_ip.tcl), das bei einem Anruf ausgeführt wird

exec /var/spool/vbox/internet/vbox_ip &
return

Das Programm (vbox_ip), das vom tcl aufgerufen wird.

#! /bin/sh
ping -i 30 -c 30 suse.de &
sleep 30
IPNR=`ifconfig ippp0 | fgrep 'inet addr'`

echo "IP# requested at `date`
IP# is $IPNR" | mailx -s "$IPNR" user@irgendwo.de
/usr/sbin/sendmail -q &
exit 0

Dieses Programm macht die eigentliche Arbeit. Im Hintergrund dreißig Mal alle 30 Sekunden - macht zusammen eine Viertelstunde - eine IP-Adresse in Internet anpingen. Nach einer Wartezeit über ifconfig die vom Provider vergebene IP-Adresse herausfinden und sie an eine Mailadresse (user@irgendwo.de) verschicken. Der 'sendmail -q &' sorgt nur dafür, daß die Mail sofort verschickt wird, und nicht erst nach einiger Zeit.

Wer tcl beherscht, kann natürlich diese Funktionalität auch gleich in das vbox_ip.tcl schreiben. Ich kann kein tcl und habe deshalb ein Shell-Skript geschrieben.

Damit die vergebene IP-Adresse auch auf meiner Website sichtbar ist - und zwar unabhängig davon, ob ich den Zugang ins Internet selber ausgelöst habe oder ob der Rechner sich aus anderen Gründen eingewählt hat - kommt in das Skript /etc/ppp/ip-up noch ein Eintrag an die Stelle, wo sonst auch die anderen Aktionen beim Verbindungsaufbau stehen.

Bei mir sieht das in etwa so aus:

    ...
    case $BASENAME in
        ip-up)
            ...
            case $INTERFACE in
                ippp0)
                    ...   (hole Mail, News und anderes)
                    (sleep 30 ; /etc/httpd/newip.pl) &
                    ...
                    ;;
                ...
            esac
        ....
    esac
    ....

Das hier benutzte Programm /etc/httpd/newip.pl sieht so aus:

#!/usr/bin/perl

use POSIX qw(strftime);
use Text::Template qw(fill_in_file);
use Net::FTP;

$templname = "/etc/httpd/ipadresse.html";
$outname = "/usr/local/httpd/htdocs/web/privat/ipadresse.html";
$host = 'meineDomain.de';
$logname = 'meinAccount';
$passwd = 'meinPasswort';
$cwd = 'public_html/privat';       # der Ort beim Web-Hoster,
                                   # wo die Datei hin soll

open (IN,"/sbin/ifconfig ippp0 | fgrep 'inet addr' |")
    || die "can't pipe from ifconfig: $!";
$zeile = <IN>;
close(IN);
($replace{ip}) = ($zeile =~ /inet addr:\s*([.0-9]+)/);
$replace{datum} = strftime("%d.%m.%Y",localtime);
$replace{zeit} = strftime("%H:%M",localtime);
open(OUT,"> $outname") || die "can't open $outname: $!";
print OUT fill_in_file($templname,HASH => \%replace);
close(OUT);

if ($ftp = Net::FTP->new($host)){
    print "login: ",$ftp->login($logname,$passwd);
    print "\ncwd: ",$ftp->cwd($cwd);
    print "\nput: ",$ftp->put($outname);
    print "\nquit: ",$ftp->quit();
    print "\n";
}

Dieses Perl-Programm liest sich die IP-Adresse aus ifconfig heraus und ersetzt in einer Template-Datei Platzhalter für Datum, Uhrzeit und IP-Adresse. die resultierende HTML-Datei wird in die lokale Kopie meiner Webseiten gespeichert und per ftp an meinen Web-Hoster übertragen.

Meine Template-Datei sieht so aus:

<HTML>
<HEAD>
  <TITLE>Zugriff auf vblinux</TITLE>
  <META NAME="author" CONTENT="Volker B&ouml;hm">
  <META NAME="generator" CONTENT="Ulli Meybohms HTML EDITOR">
  <LINK REL="stylesheet" HREF="/vb.css" TYPE="text/css">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#F0F0F0" >
  <div align="center"><H1>Zugriff auf meinen Rechner zuhause</H1></div>
  <P>Ich habe meinem Rechner zuhause beigebracht, immer wenn er ins
    Internet geht, diese Seite zu aktualisieren, so da&szlig; man - zumindest
    solange die Verbindung noch besteht - den Rechner auch von au&szlig;en
    erreichen kann.
  </P>
  <P>
    Der Rechner hat sich das letzte Mal am
    <TT><FONT size="+1" color="red">{$datum}</FONT></TT> um
    <TT><FONT size="+1" color="red">{$zeit}</FONT></TT> unter der IP-Nummer
    <TT><FONT size="+1" color="red">{$ip}</FONT></TT> eingew&auml;hlt,
    und k&ouml;nnte deshalb
  </P>
  <A HREF="http://{$ip}">hier</A>
  <P>erreichbar sein.
  </P>
  <P>Sollte die Verbindung schon wieder beendet sein, k&ouml;nnt Ihr eine
    Verbindung forcieren, indem Ihr unter der Telefonnummer
    <FONT size="+1" color="green">041 41/xxx xx</FONT> anruft. Dort
    wird abgehoben und sofort wieder aufgelegt und eine Minute sp&auml;ter
    sollte diese Seite aktualisiert sein.
  </P>
  <P>Und vergesst nicht:
    <FONT size="+1" color="blue">Benehmt Euch anst&auml;ndig auf meinem Rechner!
    </FONT>
  </P>
</BODY>
</HTML>

Oder nochmal zum ansehen.

© 2003 Volker Böhm Best viewed with any Browser Valid HTML 4.0