| Home Curriculum Vitae Zaurus Debian Dev Bazar RioUtil Projets Imac Atari mp3 | |
| ADSL Get680 Get630 | |
|
|
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 |