Ecco un piccolo script per effettuare i check della rete WAN e riavviare l'interfaccia (eth4) del router stesso.
Premessa
Il router DGND4000 della Netgear deve preventivamente essere modificato con la mod di Amod, le istruzioni per l'installazione della mod le trovate qui: http://alfie.altervista.org/amod4000/
La directory con le config è scrivibile senza rimontare la root in rw:
mtd:xxx on /config/xxx type jffs2 (rw,relatime)
mtd:xxx 2048 464 1584 23% /config/xxx
Le varie config e gli script che creeremo saranno sotto la dir /config/xxx/amod
Lo script
Creare lo script nella dir qua sotto con le seguenti permission:
/config/xxx/amod # ls -l check_wan.sh
-rwxr-xr-x 1 root root 2551 Jun 18 10:19 check_wan.sh
Lo script prende in input un array di ip, io ho inserito i dns google, uno telecom,opendns e cloudflare e li testa con un ping. Per lanciarlo manualmente eseguire:
./usr/etc/amod/conf/check_wan.sh 8.8.8.8,8.8.4.4,85.37.17.51,208.67.222.222,208.67.220.220,1.1.1.1,1.0.0.1
Verranno eseguiti i ping dei seguenti ip:
8.8.8.8 --> dns google
8.8.4.4 --> dns google
85.37.17.51 --> dns telecom
208.67.222.222 --> dns opendns
208.67.220.220 --> dns opendns
1.1.1.1 --> dns cloudflare
1.0.0.1 --> dns cloudflare
Al primo ip che risponde al ping lo script esce, altrimenti continua a testare gli altri ip, se non ne risponde nemmeno uno, esegue lo script di down dell'interfaccia WAN (script di sistema: /usr/sbin/rc_app/rc_wan stop/start) aspetta 20 secondi e la rimette up:
#!/bin/sh
is_alive_ping()
{
ping -c 1 $1 > /dev/null
[ $? -ne 0 ] && return 0
}
pong=0
filelog=/tmp/check_wan.log
IN=$1
int_ips=$(echo $IN | tr "," "\n")
echo "--------------------------------------------------------" >> $filelog
for int_ip in $int_ips
do
is_alive_ping "$int_ip"
pong=$?
done
if [ $pong -eq 0 ]
then
echo "$(date) Rete WAN non risponde faccio down up interfaccia" >> $filelog
echo "Rete WAN non risponde faccio down up interfaccia"
/usr/sbin/rc_app/rc_wan stop
sleep 20
/usr/sbin/rc_app/rc_wan start
else
echo "$(date) Rete WAN risponde tutto ok!!!" >> $filelog
echo "Rete WAN risponde, tutto ok!!!"
fi
Inserimento in crontab
Controllare che esista e abbia queste permission il file rcS1.user usato per l'esecuzione degli script di boot del router:
/config/xxx/amod # ls -latr rcS1.user
-rwxr-xr-x 1 root root 259 Jun 18 09:23 rcS1.user
Bisogna aggiungere questa riga di codice al file di cui sopra, in modo che venga inserito lo script nel crontab amod, questo script verrà eseguito ogni 5 minuti
# cat /etc/amod/conf/rcS1.user
#!/bin/sh
...
...
/etc/amod/bin/cron add "*/5 * * * * /usr/etc/amod/conf/check_wan.sh 8.8.8.8,8.8.4.4,85.37.17.51,208.67.222.222,208.67.220.220,1.1.1.1,1.0.0.1"
Controllare se dopo il reboot del router ci sono le schedulazioni corrette:
# cat /etc/crontabs/root
..................
*/5 * * * * /usr/etc/amod/conf/check_wan.sh 8.8.8.8,8.8.4.4,85.37.17.51,208.67.222.222,208.67.220.220,1.1.1.1,1.0.0.1
.................