Am Montag 03 Dezember 2001 22:50 schrieb Thomas Hog:
Christoph Maurer am 29. November 2001:
Wie stell ich das am besten an? Per Cron die Config-Dateien (welche überhaupt alle) umbenennen lassen oder besser gleich irgendwo ein Skript ablegen, das zumindest Sonntags den anderen Provider wählt?
Also - sorry - ich habe den anfang dieses threads nicht mitbekommen,
aber ich geh mal davon aus, daß dies hier für dich /euch nützlich sein könnte:
ich hatte vor einigen wochen einen ähnlichen thread gestartet, und das skript
von magnus (siehe unten) leistet mir gute dienste.
hilfe: einfach ein ippp0 mit beliebigen isdndaten konfigurieren,
mit den infos von der suse datenbank (zum beispiel!) ein zweites device ippp1
für multikanal einrichten, dann hier in dieses skript die echten zugangsdaten
einfügen, und dieses skript per cronjob zu den richtigen zeit ausführen
lassen.
bei wird mir zb: um 0900 morgens ngi aktiviert, um 1800 freenet und sonntags
nutze ich ngixxl als xxl kunde der telekom und ngi kunde (2kanal kostenlos,
keine automatische trennung vom provider)
(ungetestet: ippp2,3...x bleiben von dem skript unangetastet - hab ich aber
noch nicht überprüft..., aber da könnte man dann auch noch zusätzliche
rovider ins spiel bringen.)
zwei probleme habe ich allerdings noch, vielleicht habt ihr dazu hilfe:
a) wenn eine verbindung um 0900 ode 1800 besteht, wird diese natürlich
getrennt und downloads müssen danach resumed werden.
ein if-test wäre wünschenswert, der nur wenn gerade keine verbindung besteht,
das skript ausführt, sonst wartet, bis die verbindung abgebaut ist und erst
danach den providerwechsel macht.
das übersteigt aber schon meine bashprogrammierkenntnisse (shame on me)
b) zur änderung des providers sind rootrechte nötig (zum einen wegen der
schreibrecht an den betreffenden konfigdateien, zum anderen wegen des "rci4l
restart". alle mir bis jetzt bekannten lösungen gefallen mir nicht, weil sie
entweder sicherheitslöcher aufreißen oder nicht sinnvoll funktionieren.
frage: wie kann ein user hiermit den provider wechseln, ohne daß gleich das
ganze isdnsystem für nicht-rootler zugänglich ist?
danke!
markus
---------- Weitergeleitete Nachricht von Magnus Rosenbaum ----------
Subject: Re: [suse-isdn] mppp - mit dial-up verbindungen
Date: Thu, 11 Oct 2001 22:06:22 +0200
From: Magnus Rosenbaum
hm - hört sich sehr gut an, wenn das auch zweikanal unterstützt und das feature addlink/removelink funktioniert - sehr gerne. wie schauts aus mit automatic hangup on incoming call?
wenn das alles bei deinem skript klappt, dann hast du wirklich gute arbeit geleistet
Wenns auch ohne das Skript (mit nur einem Provider) funktioniert hat, dann funktionierts auch mit. Da greift das Skript ja auch garnicht ein. Das Skript läuft nur einmal kurz, wenn Du offline bist und den Provider für die nächste Einwahl wechseln willst. Also hier mal der Code: begin ------------------------------------- #!/bin/bash # # /root/bin/provider # Providerwechsler für ISDN # # (C) 2001 by Magnus Rosenbaum # # Syntax: provider PROVIDERNAME # Als root aufrufen ################################### # Hier die Providerdaten eintragen: # name1="xxx" phon1="" user1="" pass1="" # name2="xxx" phon2="" user2="" pass2="" # easycall # Mo-Fr 9-18 Uhr 2,9 Pf/min, sonst 1,9 Pf/min, 1s-Takt name3="easycall" phon3="01925842" user3="easycall" pass3="easynet" # name4="xxx" phon4="" user4="" pass4="" # name5="xxx" phon5="" user5="" pass5="" # freenet # 9-18 Uhr 2,9 Pf/min, sonst 1,7 Pf/min, 60s-Takt name6="freenet" phon6="01019019231750" user6="x" pass6="x" # name7="xxx" phon7="" user7="" pass7="" # name8="xxx" phon8="" user8="" pass8="" ############################################################## ############################################################## name=$1 if [ $name = $name1 ]; then phon=$phon1 user=$user1 pass=$pass1 elif [ $name = $name2 ]; then phon=$phon2 user=$user2 pass=$pass2 elif [ $name = $name3 ]; then phon=$phon3 user=$user3 pass=$pass3 elif [ $name = $name4 ]; then phon=$phon4 user=$user4 pass=$pass4 elif [ $name = $name5 ]; then phon=$phon5 user=$user5 pass=$pass5 elif [ $name = $name6 ]; then phon=$phon6 user=$user6 pass=$pass6 elif [ $name = $name7 ]; then phon=$phon7 user=$user7 pass=$pass7 elif [ $name = $name8 ]; then phon=$phon8 user=$user8 pass=$pass8 else echo "provider: Kein Provider ausgewählt!" exit; fi echo "provider: Provider $name ($phon,$user,$pass) ausgewählt" ############################################### # /etc/ppp/options.ippp0 generieren echo "provider: Generiere /etc/ppp/options.ippp0 mit user $user" of="/etc/ppp/options.ippp0" echo "# /etc/ppp/options.ippp0 automatically generated" > $of echo "/dev/ippp0 /dev/ippp1" >> $of echo "+mp" >> $of echo "netmask 255.255.255.255" >> $of echo "user \"$user\"" >> $of echo "name \"$user\"" >> $of echo "ipcp-accept-local" >> $of echo "ipcp-accept-remote" >> $of echo "noipdefault" >> $of echo "-vj" >> $of echo "-vjccomp" >> $of echo "-ac" >> $of echo "-pc" >> $of echo "-bsdcomp" >> $of # Hier evtl. mru und mtu anpassen echo "#mru 1524" >> $of echo "#mtu 1500" >> $of echo "noccp" >> $of echo "ms-get-dns" >> $of ############################################### # /etc/ppp/pap-secrets generieren echo "provider: Generiere /etc/ppp/pap-secrets mit user $user und pass $pass" of="/etc/ppp/pap-secrets" echo "\"$user\" * \"$pass\"" > $of echo >> $of of="/etc/ppp/chap-secrets" echo "\"$user\" * \"$pass\"" > $of echo >> $of ############################################### echo "provider: /etc/init.d/i4l restart" /etc/init.d/i4l restart ############################################### echo "provider: Lösche alte Telefonnummern" outgoing=` /usr/sbin/isdnctrl list ippp0 | grep "Outgoing:" ` for oldphone in $outgoing do if [ $oldphone != "Outgoing:" ]; then /usr/sbin/isdnctrl delphone ippp0 out $oldphone fi done outgoing=` /usr/sbin/isdnctrl list ippp1 | grep "Outgoing:" ` for oldphone in $outgoing do if [ $oldphone != "Outgoing:" ]; then /usr/sbin/isdnctrl delphone ippp1 out $oldphone fi done ############################################### echo "provider: Trage Nummer von Provider $name ein: $phon" /usr/sbin/isdnctrl addphone ippp0 out $phon /usr/sbin/isdnctrl addphone ippp1 out $phon ############################################### # Zum anzeigen des aktuellen Providers #echo $name >> /root/.provider /usr/sbin/isdnctrl list all ############################################## end ------------------------------------------------ Ich hab mir dazu eine Anzeige gebaut, damit ich sehen kann, welcher Provider grade aktuell ist: root-tail -i 1 -color black -g 20x1+82+0 /root/.provider& Wenn der Rechner hochgefahren wird, sollte das Skript einmal laufen, um sozusagen den Default-Provider einzustellen.
*dickes lob* - unter vorbehalt ;-)
Danke für Dein Interesse. Ich muss allerdings schon zugeben, dass der Code sehr dirty ist ;-) Ich finde es schon _sehr_ merkwürdig, dass so ein Tool nicht bei den üblichen Distris eingebaut ist, obwohl es ja fast jedem Linux-mit-ISDN-zuhause User sehr viel bringt. Viel Spass damit, Magnum -- begin http://www.informatik.uni-muenchen.de/~_rosenbau/ ------------------------------------------------------- -- may you always grok in fullness ( http://w3.one.net/~wap/wapGrok.html ) -- from/von/de >mfeilner@f-linux.com< Markus Feilner --------------------------- Linux, Webdesign, Erlangerstr. 2 --------------------------- IT-Consulting 93059 Regensburg ----- 0941/706523--------mobil: 0170/3027092