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 dat=$(date "+%b %d %H:%M:%S") # time stamp if [[ ${debugfile} == "1" ]]; then if lockfile -r 1 "${lockfile}"; 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 } # 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 | grep -E '(bytes from|100% packet loss)' || true) 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}
.