Le nom RACEME n'est pas anglais et ne signifie en aucun cas "Race Me". Ce nom provient d'un terme chimique. Un indice: cherchez ce que sont des énantiomères ou des molécules chirales...  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).

Mise en place du fichier de configuration

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:

/etc/ppp/ip-up.d/local   /etc/ppp/ip-down.d/local
#!/bin/sh

# Source configuration
. /etc/ppp/adsl.conf

LINK=`head -1 ${STATUS_FILE}`
echo "${LINK}" >${STATUS_FILE}
echo "UP" >>${STATUS_FILE}
 
#!/bin/sh

# Source configuration
. /etc/ppp/adsl.conf

LINK=`head -1 ${STATUS_FILE}`
STATUS=`tail -1 ${STATUS_FILE}`
if [ ${STATUS} = "UP" ]; then
	STATUS="DOWN"
fi
echo "${LINK}" >${STATUS_FILE}
echo "${STATUS}" >>${STATUS_FILE}

Surveillance de la connexion

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