Navigationsleiste  |    Direktzugriff   |    Software  |     Home  

Einwahl per Script (z.B. bei Freenet)

Es liegt mir fern Werbung für Freenet zu machen, aber ich nutzte diesen Provider und er ist meines Wissens derzeit der günstigste für Call by Call Verbindungen. Für andere Provider muß lediglich die Telefon-Nr. geändert werden. (also ATDT01019-019231750 durch das entsprechende).

Mein Rechner ist ein Suse6.3 System mit einem 2.2.13 Kernel. Das benutzte ppp-Programm stammt von dieser Distribution.

Meine Konfiguration für die Einwahl per Skript leistet folgendes:
  1. Einwahl beim Provider: Je nach Tagezeit wird entweder der Call by Call Tarif oder der Standard-Tarif des Providers genutzt. Es gibt jedoch keine Wahlwiederholung wenn die Leitung besetzt ist. (Siehe dazu Einwahl mit kppp)

  2. Automatisches leeren des Mailspeichers: Mein System nutzt dazu Sendmail. Es sind jedoch einige Variablen mittels Yast geändert worden, damit man offline Mails schreiben kann und diese dann automatisch bei der nächsten Netzeinwahl abgeschickt werden. Dieses Verfahren verkürzt die Verbindungszeit extrem.

  3. Beenden der Verbindung:



Der Benutzer braucht dazu zwei verschiedene Scripte(/Programme). Zur Einwahl ruft man ppp-up auf. Die Verbindung kann mit ppp-off jederzeit unterbrochen werden.



Einwahl beim Provider

Das Script ( /etc/ppp/ppp-up) sieht wie folgt aus:

       #!/bin/tcsh

       set Einwahldauer=15


       @ vorlauf = 60 - $Einwahldauer


       # Automatischer Auswahlmechanismus
       set zeit=`date "+ %a %H %M"`

       if ((("${zeit[2]}" <= "8") && ("${zeit[3]}" <= "$vorlauf")) || ("${zeit[2]}" >= "18")) then
           #Sparr-Tarif
           echo "Sparrtarif nutzen!"
           /usr/sbin/pppd connect '/usr/sbin/chat -v ECHO ON ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER"  ABORT
"BUSY" ABORT "USERNAME/PASSWORD INCORRECT" "" ATZ "OK" ATM1L1 "OK" ATDT01019-019231750 "CONNECT" "" ' \
           /dev/ttyS0 115200 modem debug crtscts defaultroute usehostname -detach user >BENUTZERNAME1< noipdefault usepeerdns hide-password
>/dev/null &
           exit 0
       else 
           #Standard-Tarif
           echo "Standardtarif ist besser!"
           /usr/sbin/pppd connect \
           ' /usr/sbin/chat -v ECHO ON ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER" ABORT "BUSY" ABORT
"USERNAME/PASSWORD INCORRECT" "" ATZ "OK" ATM1L1 "OK" ATDT01019-01929 "CONNECT" "" ' \
           /dev/ttyS0 115200 modem debug crtscts defaultroute usehostname -detach user >BENUTZERNAME2< noipdefault usepeerdns hide-password
>/dev/null &
           exit 0
       endif
        

Die Zeile "set Einwahldauer=15" geht davon aus das der Nutzer etwa 15 Minuten im Netz bleiben wird. Dies ist nötig da der Tarif um 9:00 Uhr erheblich teurer wird. Startet der Nutzer also ppp-up um 8:45 Uhr so wird noch der Call-by-Call Tarif gewählt. Danach wird bis 18:00 der Standard-Tarif genutzt.

Installation:
  1. Bei Suse-Linux muß dieses Script in das Verzeichnis /etc/ppp kopiert werden. (Dazu muß man root sein.)

  2. An Stelle des Textes >BENUTZERNAME1< und >BENUTZERNAME2< müssen die zum Acount gehörenden Benutzernamen eingetragen werden. Für >BENUTZERNAME1< kann jedoch alles mögliche gewählt werden, da es bedeutungslos ist (z.B. Tux).

  3. Dieses Script geht davon aus, daß das Modem am ersten serielen Port hängt (/dev/ttyS0). Unter Windows entspricht dies Com1. Sollte das Modem am anderen Port hängen muß statt dessen /dev/ttyS1 genutzt werden. Wenn man nicht weis an welchem Port das Modem hängt, kann man mit dem Befehl "ls /dev/modem" nachsehen ob diese Zuordnung bei der Installation schon getroffen wurde. Sollte als Ergebnis "/dev/modem" erscheinen kann man statt /dev/ttyS0 auch /dev/modem ins obige Script eintragen.

  4. Es ist günstig mit Yast eine separate Gruppe für den Internetzugang anzulegen. Nur die Benutzer die dieser Gruppe angehören können dann eine Verbindung mit dem Modem aufbauen.

  5. Mit dem Befehl chgrp dialup ppp-up sollte das Programm der dialout Gruppe zugewiesen werden. Owner, also Eigentümer, muß jedoch root sein. Die Zugriffsrechte mit "chmod 750 ppp-up" das Script für root und die Gruppe ausführbar machen.

  6. Im Verzeichnis /etc/ppp sollte sich eine Datei mit dem Namen "pap-secrets" befinden. Diese sollte etwa so aussehen:

    
               # Secrets for authentication using PAP
               # client        server  secret                  IP addresses
    
               # OUTBOUND CONNECTIONS
               # Here you should add your PPP Login and PPP password to connect to your
               # provider via pap. The * means that the entry(login and passoword may be
               # used for ANY host you connect to.
               # Thus you do not have to worry about the foreign machine name. Just
               # replace password with your password.
               #hostname       *       password
    
               # PREDIFINED CONNECTIONS
               # These are user and password entries for publically accessible call-by-call
               # Internet providers in Germany. If they confict with your config, remove them.
               "arcor"         *       "internet"
               "esprit"        *       "telecom"
               "otelo"         *       "online"
               "call"          *       "pop"
               "talknet"       *       "talknet"
               "knuut"         *       "knuut"
               "callino"       *       "internet"
               # INBOUND CONNECTIONS
               #client         hostname              192.168.1.1
    
               # If you add "auth login -chap +pap" to /etc/mgetty+sendfax/login.config,
               # all users in /etc/passwd can use their password for pap-authentication.
               #
               # Every regular user can use PPP and has to use passwords from /etc/passwd
               #*      hostname        ""
               # UserIDs that cannot use PPP at all. Check your /etc/passwd and add any
               # other accounts that should not be able to use pppd! Replace hostname
               # with your local hostname.
               #guest          hostname        "*"     -
               #master         hostname        "*"     -
               #root           hostname        "*"     -
               #support        hostname        "*"     -
               #stats          hostname        "*"     -
    
               "BENUTZERNAME1"      *       "MYPASSWORD"
               "BENUTZERNAME2"      *       "PASSWORD2"
           

    Hinter den Benutzernamen (es sind die von eben) muß das zugehörige Passwort zur Einwahl eingetragen werden. Für BENUTZERNAME1 kann das wieder irgendwas sein (z.B guessit). Diese Datei sollte nur root lesen können. (Also chmod u+rw,g-rwx,o-rwx pap-secrets).

  7. Die Gruppe muß ppp ausführen können. Also muß das ppp-Packet installiert sein und die Rechte müssen stimmen.



Automatisches leeren des Mailspeichers (Sendmail)

Grundsätzlich kann man erstmal Yast die Sache machen lassen. Dann werden mit Yast die folgenden Einstellungen vorgenommen:

  1. Yast starten

  2. Den Punkt "Administration des Systems" auswählen.

  3. Den Punkt "Konfigurationsdatei verändern" wählen.

  4. Den folgenden Variablen die entsprechenden Werte zuordnen:

    
               SENDMAIL_ARGS  : -bd -om
               SENDMAIL_DIALUP  :  no
               SENDMAIL_EXPENSIVE  :  no
               SENDMAIL_GENERICS_DOMAIN  :  Den kompletten Rechnernamen. (die Ausgabe des Befehls "hostname -f")
               SENDMAIL_LOCALHOST  : localhost
               SENDMAIL_NOCANONIFY  : no
               SENDMAIL_NODNS  : no
               SENDMAIL_RELAY  : (sollte leer sein)
               SENDMAIL_SMARTHOST  : (sollte leer  sein)
               SENDMAIL_TYPE  : yes
               SMTP  : yes
               NAMESERVER  : (sollte leer  sein)

  5. Mailtool konfigurieren. (z.B. Netscape)
    Unter Edit->Preferences->Mail&Newsgroups-Identity; die folgenden Eintragungen vornehmen:
    Your name: Den Namen der auf den gesendeten Emails erscheinen soll. (Meist der eigene.)
    Email address: BENUTZTERNAME@(Ausgabe von Befehls "hostname -f")
    Reply-to address: Die gültige E-Mailaddresse beim Provider.

  6. 6.) Ip-up Script:
    Dieses Script wird vom ppp-Programm nach erfolgreicher Einwahl ausgeführt. Meins sieht wie folgt aus:

    
               #!/bin/sh
    
               # (c) '97, S.u.S.E. GmbH, Fuerth, Germany
               # Klaus Franken 
               # 25.02.98
               #
               # Remo Behn 
               # 18.07.98
               
               BASENAME=`basename $0`
               INTERFACE=$1
               DEVICE=$2
               SPEED=$3
               LOCALIP=$4
               REMOTEIP=$5
               
               if [ -z "$REMOTEIP" ]; then
                   echo "Usage: $0     "
                   exit 1
               fi
               
               
               case "$INTERFACE" in
               ippp*)
               
                   . /etc/rc.config
               
                   # find the device
                   found=0
                   for I in $NETCONFIG; do
                       eval NETDEV=\$NETDEV$I
                       if [ $NETDEV = $INTERFACE ]; then
                           found=1
                           break;
                       fi
                   done
                   if [ $found -eq 0 ]; then
                       echo "Device '$INTERFACE' not configured in '/etc/rc.config'"
                       exit 1
                   fi
               
                   eval IFCONFIG=\$IFCONFIG$I
                   DEST=`grep -v "^#" /etc/route.conf | grep "$INTERFACE\$" | awk '{ print $1}'`
                   DEFAULT=`grep -v "^#" /etc/route.conf | grep default | awk '{ print $2}'
               
               
                   #echo "ok, NETDEV:$NETDEV; IFCONFIG:$IFCONFIG."
                   #echo "    DEST: $DEST; DEFAULT: $DEFAULT"
               
                   case "$BASENAME" in
                   ip-up)
                       # default deny
                       #ipfwadm-wrapper -I -p deny
                       #ipfwadm-wrapper -O -p deny
                       
                       # flush
                       #ipfwadm-wrapper -I -f
                       #ipfwadm-wrapper -O -f
               
                       # accept dns
                       #ipfwadm-wrapper -O -a accept -P udp -S 0/0 53 1024:65535 -D 0/0 53 -W $INTERFACE
                       #ipfwadm-wrapper -I -a accept -P udp -D 0/0 53 1024:65535 -S 0/0 53 -W $INTERFACE
                       #ipfwadm-wrapper -O -a accept -P tcp -S 0/0 53 1024:65535 -D 0/0 53 -W $INTERFACE
                       #ipfwadm-wrapper -I -a accept -P tcp -D 0/0 53 1024:65535 -S 00/0 53 -k -W $INTERFACE
               
                       # accept connect from client to internet
                       #ipfwadm-wrapper -O -a accept -P tcp -S 0/0 1024:65535 -D 0/0 -W $INTERFACE
                       #ipfwadm-wrapper -I -a accept -P tcp -D 0/0 1024:65535 -S 0/0 -k -W $INTERFACE
               
                       # deny, last match
                       #ipfwadm-wrapper -I -a deny -P tcp -S 0/0 -D 0/0 -W $INTERFACE
                       #ipfwadm-wrapper -I -a deny -P udp -S 0/0 -D 0/0 -W $INTERFACE
               
                       # default accept
                       #ipfwadm-wrapper -I -p accept
                       #ipfwadm-wrapper -O -p accept
               
                       /sbin/route add default gw $REMOTEIP dev $INTERFACE
               
                       # maybe you want to start mail services:
                       # set follow variables in /etc/rc.config 
                       #    SENDMAIL_TYPE="yes"
                       #    SENDMAIL_SMARTHOST=""
                       #    SENDMAIL_ARGS="-bd -om"
                       #    SENDMAIL_EXPENSIVE="yes"
                       #    SENDMAIL_NOCANONIFY="yes"
                       #/usr/bin/fetchmail -a -v >>/var/log/fetchmail 2>&1 &
                       #/usr/sbin/sendmail -q &
                       ;;
                   ip-down)
                       # restart interface
                       /sbin/ifconfig $INTERFACE down
                       # workaround due to kernel problem with 'kernd':
                       sleep 1
                       /sbin/ifconfig $INTERFACE $IFCONFIG
               
                       # flush, del all rules
                       #ipfwadm-wrapper -I -f
                       #ipfwadm-wrapper -O -f
               
                       # set routes from /etc/route.conf 
                       test -z "$DEST"    || /sbin/route add -host $DEST dev $INTERFACE
                       test -z "$DEFAULT" || /sbin/route add default gw $DEFAULT 
                       ;;
                   *)
                       ;;
                   esac
                   ;;
               
               
               ppp*)
                   # Analog-PPP, add commands as you need...
                   case "$BASENAME" in
                   ip-up)
                       #
                       # This code allows automatic configuration of your resolv.conf
                       # for peer supplied DNS addresses when using the `usepeerdns'
                       # option. Original resolv.conf is restored when ip-down is called
                       # by pppd when the link goes down.
                       #
                       if [ -n "$USEPEERDNS" -a -f /etc/ppp/resolv.conf ]; then
                               rm -f /etc/ppp/resolv.prev
                               if [ -f /etc/resolv.conf ]; then
                                       cp -p /etc/resolv.conf /etc/ppp/resolv.prev
                                       grep domain /etc/ppp/resolv.prev > /etc/resolv.conf
                                       grep search /etc/ppp/resolv.prev >> /etc/resolv.conf
                                       cat /etc/ppp/resolv.conf /etc >> /etc/resolv.conf
                                       echo "Modified /etc/resolv.conf for DNS at $INTERFACE"
                               else
                                       cp /etc/ppp/resolv.conf /etc
                                       chmod 644 /etc/resolv.conf
                                       echo "Installed /etc/resolv.conf for DNS at $INTERFACE"
                               fi
                               if [ "$START_NSCD" = yes ]; then
                                       /sbin/init.d/nscd restart &
                               fi
                       fi
                       #Von M.Eyckeler mit Hilfe eines Eintrags weiter oben erstellt
                       #Dies schickt die Mails weg.
                       /usr/sbin/sendmail -q   &
               
                       test -x /etc/ppp/ip-up.local && /etc/ppp/ip-up.local $*
                       ;;
                   ip-down)
                       #
                       # This code restores the original resolv.conf saved when ip-up
                       # was called by the pppd which uses the `usepeerdns' option and
                       # resolv.conf was modified for the supplied dns server adresses.
                       #
                       if [ -n "$USEPEERDNS" -a -f /etc/ppp/resolv.conf ]; then
                               if [ -f /etc/ppp/resolv.prev ]; then
                                       cp -fp /etc/ppp/resolv.prev /etc/resolv.conf
                                       echo "Restored original /etc/resolv.conf"
                               else
                                       rm -f /etc/resolv.conf
                                       echo "Deinstalled /etc/resolv.conf"
                               fi
                               if [ "$START_NSCD" = yes ]; then
                                       /sbin/init.d/nscd restart &
                               fi
                       fi
                       test -x /etc/ppp/ip-down.local && /etc/ppp/ip-down.local $*
                       ;;
                   *)
                       ;;
                   esac | logger -t $BASENAME
                   ;;
               *)
                   # dont know...
                   ;;
               esac
                     



    Verbindung beenden


    Hier muß nur das folgende Script (ppp-off) unter /etc/ppp kopiert werden. Die Gruppe sollte wieder "dialout" sein und der Besitzer root (siehe ppp-up).

           
               
               #!/bin/sh
               
               # Lets see how many pppds are running....
               # The number 2 in the ls statement defines how many letters are added for *
               N=`ls /var/run/ppp* 2>/dev/null| wc -l`
               
               # If there no ppp running then ppp-off does not make much sense
               if [ $N = 0 ]; then
                       echo "No pppd is running"
                       echo "All pppd are already terminated"
                       exit 1
               fi
               # If one is running then it can be killed with killall
               if [ $N = 1 ]; then
                              killall pppd
                              exit 0
               fi
               # More than one! Aieehh.. Dont know which one to kill.
               echo "More than one pppd running. None stopped"
               echo "Something must have gone wrong !!"
               exit 1
            

    Wenn jetzt alles richtig steht, sollte ein Angehöriger der Gruppe "dialout" mit dem Befehl "/etc/ppp/ppp-up" eine Verbindung ins Internet herstellen können. Dabei wird automatisch lokal gespeicherte Mail für externe Anschriften verschickt.
    Mit dem Aufruf "/etc/ppp/ppp-off" kann man die Verbindung wieder trennen.

    Sollten mir irgendwelche Fehler unterlaufen sein oder etwas nicht funktionieren bitte eine Mail an mich schreiben:

    m.eyckeler@tuxhausen.de

    Bin auch für jede Anregung dankbar. Wünsche dürfen ebenfalls geäussert werden. Allerdings gebe ich keine Garantie das ich die Zeit finde sie zu erfüllen.
    Danke fürs lesen und viel Spaß.


    Erstellt: 2001-07-15 Autor: Marcus Eyckeler (m.eyckeler@tuxhausen.de)
    Letztes Update: 2001-07-15      URL: http://www.tuxhausen.de/software_einwahl_script.html