DGND4000 - Amod script check porta WAN

 

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
.................