Les deux scripts ci-dessous assurent un contrôle permanent sur
les deux liens entre l'aire OSPF
et le routeur ISP
à l'aide des
messages d'information ICMP
echo/reply. Le propriétaire du
processus doit avoir la capacité à ajouter ou supprimer une route
au niveau noyau.
-
Sur le routeur
R1
, la passerelle à joindre est à l'adresse10.1.30.2
. Le code du script est téléchargeable à partir du lien suivant : r1-keepalive.sh.#!/bin/bash #* Adaptation d'un script publié par Lukas Ruf en 2006 #* License: GPL3 neighbor=10.1.30.2 scriptname=`basename $0` scriptname=${scriptname%.*} delay=10 # sleep time logfile=/var/log/$scriptname.log # file for debug messages lockfile=/var/lock/$scriptname.lock # locking to avoid races # control where to log debug messages to: # debugfile = 0 : log to /dev/null # debugfile = 1 : log to file specified in ${logfile} debugfile=1 # log a message to the log-file specified by debugfile function keepalive_debug() { local msg="$1" local dat=$(date "+%b %d %H:%M:%S") # time stamp if [ "${debugfile}" == "1" ]; then lockfile -r 1 ${lockfile} if [ "$?" == "0" ]; then touch ${logfile} >/dev/null 2>&1 chmod 0644 ${logfile} >/dev/null 2>&1 echo -n "${dat}: " >>${logfile} 2>&1 echo "${msg}" >>${logfile} 2>&1 rm -f ${lockfile} >/dev/null 2>&1 fi else echo "${msg}" >/dev/null 2>&1 fi } # redirect messages from stdin to debug function redirect() { local msg="$(cat -)" keepalive_debug "${msg}" } # ping the ${neighbor} and sleep ${delay} seconds function alive_ping() { local msg="" keepalive_debug "alive_ping" while $(true) ; do msg=$(/bin/ping -W 2 -n -c 1 ${neighbor} 2>&1 | egrep '(bytes from|100% packet loss)') if [[ "${msg}" =~ "bytes from" ]] && [[ ! -e /tmp/${neighbor}_up ]]; then ip route add default via ${neighbor} touch /tmp/${neighbor}_up keepalive_debug "${neighbor} is reachable, default route added" fi if [[ "${msg}" =~ "100% packet loss" ]] && [[ -e /tmp/${neighbor}_up ]]; then ip route del default via ${neighbor} rm -f /tmp/${neighbor}_up keepalive_debug "${neighbor} is not reachable, default route deleted" fi sleep ${delay} done } # start up and handle proper daemonization function main() { local argument="daemon" if [ "$1" == "${argument}" ]; then alive_ping else keepalive_debug "START" keepalive_debug "daemonize $0" nohup /bin/bash $0 ${argument} $* >/dev/null 2>&1 & keepalive_debug "daemonized $0" fi } main $* exit 0
-
Sur le routeur
R3
, la passerelle à joindre est à l'adresse10.1.30.10
. Le code du script est téléchargeable à partir du lien suivant : r3-keepalive.sh.Le code de ce script est identique au précédent à l'exception de la valeur attribuée à la variable
${neighbor}
.