![]() |
Home Zaurus Debian RioUtil Projets Imac Atari mp3 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Cette page contient juste quelques infos concernant ma connexion ADSL
sous GNU/Linux et en particulier un script de reconnexion capable d'utiliser
deux connexions différentes. Il est utilisable, par exemple, par les
abonnés de Nerim pouvant se connecter
soit par le lien en collecte nationale (FSA) ou le lien en Turbo IP
Régional (TIP).
Le système utilise un fichier de configuration
(/etc/ppp/adsl.conf
)
contenant différents paramètres pour la connexion:
LOG=/etc/ppp/log OUT=/etc/ppp/local.out OPT_FILE=/etc/ppp/options STATUS_FILE=/etc/ppp/status MODEM=10.0.0.138 MAIN_LINK=tip MAIN_TESTIP="62.4.16.248 62.4.16.250 62.4.16.20" BACK_LINK=fsa BACK_TESTIP="62.4.16.246 62.4.16.247 62.4.16.20" |
Les paramètres ???_TESTIP contiennent la liste des adresses IP vers lesquelles envoyer des ping pour tester la connexion. Il est conseillé d'utiliser des machines de votre fournisseur d'accés afin d'éviter d'encombrer le réseau avec du traffic inutile.
Il vous faut ensuite créer deux fichiers de configuration avec
vos identifiants de connexion et dont l'extension est celle indiquée dans
le fichier /etc/ppp/adsl.conf dans les variables
MAIN_LINK et BACK_LINK:
/etc/ppp/options.tip
![]() |
/etc/ppp/options.fsa
![]() |
|
name "login@net1.nerim.nerim" noauth noipdefault defaultroute |
name "login@net1.nerim.fsa" noauth noipdefault defaultroute |
Bien sûr, vous devez aussi mettre dans le fichier /etc/pap-secrets les identifiants et mots de passe des deux connexions.
Bien que ce ne soit pas strictement nécessaire au fonctionnement du
script il est conseillé de rajouter ces portions de codes dans les fichiers
exétés par ppp lorsque la connexion est up ou down:
Le script /etc/ppp/adsl.sh
contient toutes les fonctions nécessaires pour tester, lancer et couper
la connexion.
Le fichier /etc/ppp/status (inutile de le créer vous-même, le script s'en chargera à la première occasion) contient deux lignes reflétant l'état de la connexion. La premiére indique le nom du lien activé et la seconde l'état de la connexion: DOWN, CONNECTING, UP, FAILED, TESTING.
En appelant le script avec le paramètre test, la connexion est testée et relancée si besoin.
Lorsque la connexion est réinitialisée, le script détermine si la précédente tentative a echoué, et si c'est le cas, change de lien. Dans le cas contraire, le lien par défaut est automatiquement sélectionné.
Il est aussi possible de piloter manuellement la connexion avec les paramètres start et stop.
#!/bin/sh # Source configuration file . /etc/ppp/adsl.conf LINK=`head -1 ${STATUS_FILE}` STATUS=`tail -1 ${STATUS_FILE}` case "$1" in start) if [ ${STATUS} <> "FAILED" ]; then # If we were down normally, go on with the # main link LINK=${MAIN_LINK} fi echo "${LINK}" >${STATUS_FILE} echo "CONNECTING" >>${STATUS_FILE} # Change configuration if [ -f ${OPT_FILE}.${LINK} ]; then rm -f ${OPT_FILE} ln -s ${OPT_FILE}.${LINK} ${OPT_FILE} fi echo "Starting pptp" killall -9 pppd pptp >/dev/null 2>&1 sleep 2 /usr/sbin/pptp ${MODEM} >/dev/null 2>&1 ;; stop) echo "Shutting down pptp" killall pppd pptp >/dev/null 2>&1 sleep 5 killall -9 pppd pptp >/dev/null 2>&1 sleep 2 sleep 1 rm -fr /var/run/ppp0.pid /var/run/pptp ;; status) if [ -f /var/run/ppp0.pid ]; then echo "ppp0 running pid `cat /var/run/ppp0.pid`" fi PPP_IP=`ifconfig ppp0 | grep inet | cut -d: -f2 | cut -d\ -f1` if [ -n "${PPP_IP}" ]; then echo "ppp0 bound to ${PPP_IP}" else echo "no ppp link" fi ;; restart) $0 stop $0 start ;; test) # Check that we are not already testing connection #if [ ${STATUS} = "TESTING" ]; then # exit 0 #fi echo "${LINK}" >${STATUS_FILE} echo "TESTING" >>${STATUS_FILE} if [ ${LINK} = ${BACK_LINK} ]; then TESTIP=${BACK_TESTIP} else TESTIP=${MAIN_TESTIP} fi # Go for the connection test in two phases (ping of one # then two packets). Once a packet is well received, # test is finished and successfull. OK=no for i in $TESTIP; do if [ $OK = "no" ]; then ping -n -q -c 1 -i 1 $i if [ $? = "0" ]; then OK=yes fi fi done if [ $OK = "no" ]; then TOOBAD=no for i in $TESTIP; do ping -n -q -c 2 -i 1 $i if [ $? = "0" ]; then TOOBAD=yes exit 0 fi done if [ $TOOBAD = "no" ]; then # Connection is down if [ ${STATUS} = "CONNECTING" ]; then # We were trying to connect before # the test: change link and try # again if [ ${LINK} = ${MAIN_LINK} ]; then LINK=${BACK_LINK} else LINK=${MAIN_LINK} fi STATUS="FAILED" else # Else there should has been failure # so go with the main link LINK=${MAIN_LINK} STATUS="DOWN" fi echo "${LINK}" >${STATUS_FILE} echo "${STATUS}" >>${STATUS_FILE} echo "connection is lost, restarting" $0 restart exit 0 fi fi echo "${LINK}" >${STATUS_FILE} echo "UP" >>${STATUS_FILE} ;; *) echo "Usage: pptp (start|stop|status|test|restart)" exit 1 ;; esac exit 0 |
Il est conseillé de le lancer périodiquement à partir
d'une crontab par exemple:
nagada:~# crontab -l */2 * * * * /etc/ppp/adsl.sh test >/dev/null 2>&1 |