Navigationsleiste   |    Direktzugriff   |    Home   

Einwahl per Handy und SMS

In diesem Artikel geht es um die Einwahl auf den heimischen Rechner. Gut, von diesen Artikeln gibt es genug, aber dieser hat eine coole Besonderheit ....


Worum es geht ...

Ich das folgende Problem kennt jeder: Du sitzt gerade beim Freund oder in der Firma und dir fehlt eine Datei oder eine Info die auf deinem Rechner zu Haus liegt. Also was tun ?
Heimfahren ist doof, besser wäre es doch den Rechner über das Internet zu erreichen.
Als Besitzer einer Flatrate kein Problem: Einfach den Rechner immer laufen lassen und mit einer Software ausstatten die dynamische IP-Adressen in feste "wandelt", ich denke da an DynDNS [1] oder ISdns [2].
Und ohne Flatrate??
Als Modem-Besitzer, weiß ich leider auch nicht (habe schon lange keine Modem mehr),
als ISDN-Benutzer, lies einfach weiter.

Also, um diesen Artikel geht es um die Einwahl auf den Linux-Rechner, der eine ISDN-Karte (passiv reicht) hat. Du nimmst dein Handy und wählst deinen Rechner an, dieser sieht deine Nummer und wählt sich ins Internet ein, und fertig.
Dein Rechner ist zwar nun im Internet, aber erreichen möchtest du ihn ja auch noch.
Das Problem ist hier die dynamische IP-Adresse: Bei jeder Einwahl beim Provider bekommst du eine andere IP-Adresse zugewiesen.
Die Lösung kann sein wie oben angeben mit Diensten wie DynDNS [1] oder ISdns [2].

Aber ich habe ja gesagt dieser Artikel ist cooler:
Du bekommst die IP-Adresse per SMS gesendet !!!!

Das Ganze läuft nun so ab:

  1. Du wählst mit deinem Handy deinen Server an
  2. Der Server erkennt deine Nummer und wählt sich ein
  3. Nach der Einwahl sendet der Server die IP-Adresse an dein Handy
  4. Du tippst diese IP zum Beispiel in irgendeinen Browser ein, und siehst dein Intranet

Eins ist sicher: Deine Freunde oder Kollegen sind verblüfft wenn die IP via SMS kommt :-))

Voraussetzungen für die Einwahl

Damit alles klappt, brauchst du folgendes:

Handy vorbereiten

Zuerst mußt du deinen Handy-Provider "vorbereiten". Standardmäßig werden keine Emails als SMS weitergeleitet.
Bei D2-Vodaphone mußt du eine SMS mit dem Text "OPEN" an die Nummer 3400 senden. Das wird dir dann bestätigt, mit dem aktuellen Preis.
Ja richtig gelesen, pro empfangener Email werden dem Kartenbesitzer 0,198Euro (Vodaphone CallYa) berechnet. Also besser keinem sagen das du so erreichbar bist ...
Willst du keine Email mehr empfangen, einfach den Text "CLOSE" an die Nummer 3400 senden und Ruhe ist.


Linux-Rechner vorbereiten

isdnlog

Damit das alles geht brauchst du den isdnlog und ippd. Bei Debian heißen die Paket auch so.
Ich gehe bei der weiteren Beschreibung mal von Debian Woody (3.0) aus, da sich das aber eh alles in den Konfigurationsdateien abspielt, sollte es auch mit anderen Distributoren so gehen.

Zuerst erlauben wir dem isdnlog das Auslösen von externen Programm (wir brauchen ein Script, das die Internet-Einwahl auslöst), dazu unter Woody in der Datei /etc/isdn/isdnlog.isdnctrl0 dort den folgenden Eintrag eintragen oder auskommentieren:

start=yes         # enable program start on events

Gibt es diese oder eine ähnliche Datei bei dir nicht, kannst du isdnlog auch mit dem Parameter "-S" im passendem Init-Skript starten.


Danach muß die Datei /etc/isdn/callerid.conf geändert werden:

[MSN]
NUMBER = 123456
ALIAS = Inet-Trigger
ZONE = 1
[Number]
NUMBER = 01731234567
ALIAS = Markus Handy
ZONE = 1
SI = 1
START = {
[FLAG]
FLAGS = I|R|U
INTERVAL = 120
PROGRAM = /home/inter/goonline.sh \${20}
USER = inter
}

Im Einzelnen bedeuten die Einträge:

NUMBER ist die MSN-Nummer(ohne Vorwahl !!)auf die der Rechner angerufen wird. Diese sollte nur für diesen Fall verwendet werden (Telekom stellt 10 zur Verfügung).
ALIAS Dient nur zum besseren Lesen der Log-Dateien
ZONE dient zur Abrechnung (verwende ich nicht, ist nicht wichtig)
   
NUMBER Diese Nummer unter [Number] ist die Nummer von der wir anrufen (das Handy). Nur wenn die richtige MSN von diesem Handy angerufen wird, passiert etwas. Macht die Sache schön sicher :-)
ALIAS Dient nur zum besseren Lesen der Log-Dateien
ZONE dient zur Abrechnung (verwende ich nicht, ist nicht wichtig)
SI Service Indicator: Bei SI=1 wird ein normaler Sprach-Anruf (Speech) erwartet. Wir wollen ja keine Daten senden, also =1
START In diesem Abschnitt stehen alle Dinge die isdnlog machen soll, wenn ein passender Anruf kommt
FLAGS Hiermit werden die Paramete gesetzt, bei denen die Aktionen (Starten des Scripts) ausglöst werden soll:
I = Incoming Call (Eingehender Anruf), R = Ring (ISDN-Dienst Klingeln), U = Startet Aktion nur einmal pro Intervall
INTERVAL Zusammen mit FLAGS=U wird hier festgelegt das die Aktion nur einmal innerhalb von 120sec ausgelöst werden kann. Ist sicherer so
PROGRAM Legt fest was passieren soll, wenn alles passt: Startet das Script /home/inter/goonline.sh und übergibt den Called Alias (\${20})
USER Unter welchem Benutzer das Programm laufen soll. Dieser Nutzer muß eine Interneteinwahl auslösen können (also Zugriff auf isdnctrl haben, unter Debian muß der Nutzer Mitglied der Gruppe dialout sein). Wird hier nichts eingeben, läuft das Script als root !!! Also, Achtung! Hier ist es der Benutzer "inter".

So das war erstmal alles an Einstellungen.

Script: goonline.sh

Hier das Script, dieses macht folgendes:

  1. Kam der Anrufer von der richtigen Nummer (Zusatz-Sicherung)
  2. Einwahl zum Internet
  3. Überprüfung der Einwahl
  4. Absenden der SMS

Der ausführende Benutzer dieses Skriptes ist "inter", dieser Benutzer ist Mitglied in der Gruppe "dialout" (unter Debian)

#!/bin/bash
#Skript goonline.sh
#Temperäre Internet IP ermitteln und als SMS versenden 

#Anpassungen
TMP=/tmp/IP                             #Temporäre Datei zum Zwischenspeichern
IPPP=ippp4                              #zu verwendendes ISDN-Device
EMAIL=markus@example.net                #Zusaetliche Debug-Email-Adresse
SMS=01731234567@d2-message.de           #SMS-Empfaenger

#War der Anruf auch auf die richtige Nummer:
#Der Name kommt aus der callerid.conf
if [ "$1" = "Inet-Trigger" ]    
then
    #Wenn der Anruf auf die richtige Nummer kam:
    #Gehe online
    sleep 15    #Da Leitung vom Anruf belegt, warte 15 sec
    
    #Wähle über IDSN
    isdnctrl dial $IPPP      
    
    #Steht die Verbindung ?
    sleep 5
    ping -c1 www.tuxhausen.de &>/dev/null && result=1
    result=$?
    if [ $result = 0 ]; then 
        #Verbindung steht:
        
        #Kurzer SMS Text und Uhrzeit
        TIME=`date +%T`  
        echo "Die aktuelle Server-IP um $TIME : ">$TMP
        
        #Ermittel aktuelle Internet IP
        #Dafür wird root benötigt, also sudo verwenden
        `sudo ifconfig ippp4 | grep inet | gawk '{print $2  }' >> $TMP`
        
        #Versende lokal (Debug) und an HAndy als SMS
        mail $EMAIL <$TMP
        mail $SMS <$TMP

    else
        #Bei fehlerhafter Verbindung erzeuge Fehlermeldung
        echo "Die Internet-Einwahl um $TIME hat nicht funktioniert!! ">$TMP
        
        #Versende Fehlermeldung lokal (Debug) und an Handy als SMS
        mail $EMAIL <$TMP
        mail $SMS <$TMP

    fi
    
fi    

#Lösche Temporäre Datei
rm $TMP

Ich denke die Erklärungen im Script reichen, bis auf die Ermittlung der IP-Adresse (`sudo ifconfig ippp4 | grep inet | gawk '{print $2 }' >> $TMP`).
Leider ist es nicht so einfach verläßlich (!) die aktuelle IP-Adresse zu lesen. Ich verwende hier die Ausgabe von ifconfig und filtere mir die entsprechende Zeile und Spalte heraus. Leider gibt es hier ein kleines Problem: Nur root kann das !!
Deswegen benutze ich das Programm sudo, damit kannst du den Zugriff mit root-Rechten sehr einschränken.
Damit das alles geht, mußt du das Programm visudo (als root) aufrufen und folgendes eingeben:

# Host alias specification
Host_Alias SERVER = 192.168.44.10

# User alias specification
User_Alias INTER = inter

# Cmnd alias specification
Cmnd_Alias IFCONFIG=/sbin/ifconfig

# User privilege specification
root         ALL=(ALL) ALL
INTER    SERVER = NOPASSWD:IFCONFIG

Auf sudo möchte ich aber hier nicht weiter eingehen, aber einige Tipps:
- du mußt wohl immer mit den Aliases arbeiten
- immer visudo verwenden (das geht nur als root)

Testen

So das war es, und mal den isdnlog neustarten:

root : /etc/init.d/isdnutils restart


Bevor du mit dem Handy testest, erstmal den sudo-Befehl testen:

[inter]~/$: sudo ifconfig

Das sollte nun funktionieren, du solltest die Ausgabe von ifconfig sehen.
Achja, probier mal kurz aus ob gawk vorhanden ist. In der Standard-Installation fehlt es (Paketname "gawk" Binary-CD1).

Nächster Test, als Benutzer inter das Skript von Hand starten:

[inter]~/$: ./goonline.sh Inet-Trigger

Wenn du nun die SMS mit der IP bekommen hast, kannst du mit deinem Handy den Server anrufen (es ist besetzt, und das ist richtig).
Es sollte nun alles gehen, ansonsten die Fehlermeldungen kontrollieren und in die Log-Dateien sehen.
So fertig, du solltest deinem Rechner aber noch beibringen nach einer bestimmten Zeit automatisch die Verbindung zum Internet-Provider zu trennen. Könnte sonst teuer werden :-))

Sollte eine Firewall einsetzen, mußt du diese jetzt ein wenig umändern. Du brauchst eine Regel die den Zugang zu deinem Rechner erlaubt.
Ich empfehle hierfür OpenSSH [4] zu verwenden.


Im Text genannte Links

[1] DynDNS: http://www.dyndns.org/
[2] ISdns: http://www.isdns.net/
[3] Mehrere Provider mit ISDN unter Debian nutzen http://www.tuxhausen.de/software_isdn_isp.html
[4] OpenSSH:    http://www.openssh.org

Erstellt: 2002-12-26   Autor: Markus Ungermann (mu@tuxhausen.de)
Letztes Update:      URL: http://www.tuxhausen.de/handy_einwahl.html