Com fer un segiment d'una ADSL: Ús d'ample de banda i si està penjada o no amb cacti.

Logo del cactiUna ADSL sobre XDSI que funiona amb un Nokia M1112 no proporciona ni snmp ni un "watchdog" que reinicii la connexió quan es penja (no és que passi sovint, però si de tant en tant quan es tracta d'una connexió a 2 Megues..). Per resoldre-ho, es pot fer via un script... és una d'aquelles coses coses que un cop fetes, t'en oblides de manera que val més documentar-ho. A més, és interessant com a exemple: En cas de tractar-se d'un altre router, es pot canviar fàcilment per adaptar-ho a les noves necessitats fent servir el mateix sistema canviant el diàleg.

En primer lloc, es tracta de construir un script, que en aquest cas és el que executarà el cacti (normalment cada 5 minuts) i que ens fa la doble funció: En primer lloc mira si la connexió a internet funciona, en cas de que sí, ens proporciona una sortida indicant-nos tota la informació sobre estadístiques de comunicació que hi ha al router, i en cas de que no, el reinicia per tal de intentar establir la connexió de nou.
Aquest script està fet amb TCL i requereix del paquet expect, que en un guinux ja ens l'hauriem de trovar instal·lat
En el meu cas, l'scrpit és el següent:

#!/usr/bin/expect --
#
# Modifiqueu:
# %PASSWORD% per la paraula de pas del reouter
# %IPDELROUTER% per la IP del Router
# %PROMPT% pel prompt que et proporciona el router
# guifi.net i la seva IP, per una IP que gestionis tu, o ben coneguda pero estable
#

exp_version -exit 5.0

set timeout 60
set force_conservative 1 ;
if {$force_conservative} {
set send_slow {1 .010}
proc send {ignore arg} {
sleep .2
exp_send -s -- $arg
}
}
puts "\n"
spawn host guifi.net
expect -exact "guifi.net has address 80.32.45.226" {puts "Router Nokia M1112 ok\n"
spawn telnet %IPDELROUTER%
expect "ogin-id:*"
send -- "adminttd\r"
expect "assword:*"
send -- "%PASSWORD%\r"
expect "%PROMPT%>"
send -- "sh atm\r"
expect "%PROMPT%>"
send -- "sh st\r"
expect "%PROMPT%>"
send -- "log\r"
;exit}
send_user "\ reset del router ADSL Nokia M1112: "
spawn telnet %IPDELROUTER%
expect "ogin-id:*"
send -- "adminttd\r"
expect "assword:*"
send -- "%PASSWORD%\r"
expect "%PROMPT%>"
send -- "reload\r"
expect -gl "\\\[*]\$*"
puts "\n"
exit
close

Un cop tenim aquest script, li donem els permisos d'execució i el provem. Veureu que en principi fa tota la feina, si hi ha internet, ens diu quants bytes a rebut i enviat i tota la resta de informació estadística, i en cas de no haver-hi connexió a internet, simplement envia la comanda reload, que és la que reinicia el router, per tant intentarà connectar-se de nou.

Ara ja només queda "netejar" la sortida amb un altre script perquè en el cas de que no estigui penjat, obtenir la informació, en aquest cas de bytes enviats i rebuts. Aquest és l'script que li direm al cacti que faci servir per a obtenir la informació estadística.

#!/usr/bin/perl
#
# adsl.pl
#
# Autor : Ramon Roca # Date : 06/25/04 # Version : 0.1 # Description : Script to output the bandwith usage of a Nokia M1112 device. # Output is @queue = `/var/www/cacti/scripts/m1112.sh|grep payload`; @tx = split " ",$queue[0]; @rx = split " ",$queue[1]; print "tx:" .$tx[2] . " rx:" . $rx[2];

Adoneu-vos que m1112.sh és l'altre script que hem fet avans.

A partir d'aquí, seguint la resta d'instruccions del cacti per a incorporar una nova gràfica...

Per a més informació sobre aquests scripts i/o altres routes, això ho he tret fent collage de www.adslnet.ws i www.bandaancha.st

Nota: Potser hauria de fer alguna explicació més sobre el cacti? Eye-wink
En tot cas, de moment en podeu veure exemples si aneu a mirar l'Estat de la Xarxa de guifi.net

rroca – dm, 06/07/2004 – 17:59

Opcions de visualització de comentaris

Escull com vols veure els comentaris i clica 'Desa configuració' per activar els canvis.

L'Script adaptat al router SpeedStream 5660

Nomes serveix per a reiniciar el Router quan es penja la adsl, no proporciona info per a les estadistiques...
cada cop que reinicia el router guarda una entrada al fitxer de log /var/log/caigudesADSL

#!/usr/bin/expect --

#

# Modifiqueu:

# %PASSWORD% per la paraula de pas del router

# %IPDELROUTER% per la IP del Router

# guifi.net i la seva IP, per una IP que gestionis tu, o ben coneguda pero estable

# http://www.comesfa.org/node/785

exp_version -exit 5.0

set timeout 60

set force_conservative 1 ;

if {$force_conservative} {

set send_slow {1 .010}

proc send {ignore arg} {

sleep .2

exp_send -s -- $arg

}

}

puts "\n"

spawn host guifi.net

expect -exact "80.24.16.164" {puts "Router SpeedStream 5660 OK\n"

;exit}

send_user "\ reboot del router ADSL SpeedStream 5660: \n"

log_file /var/log/caigudesADSL

send_log "[exec date]: Reboot del Router\n"

log_file

spawn telnet %IPDELROUTER%

expect "Password:*"

send -- "%PASSWORD%\r"

expect "Command->"

send -- "reboot\r"

expect "Are you sure? default: n \\\[y,n]"

send -- "y \r"

sleep 1

exit

close

tictacbum – ds, 19/03/2005 – 00:14

estadistiques

Thx! Smiling. Per les estadístiques, no cal, el Speedstream 5660 ja suporta snmp Eye-wink

rroca – dg, 20/03/2005 – 00:41

Logs

Hola, amb l'script de sobre (speedstream i linksys) rebo un correu cada cop que fa la comprovació de conexió, com puc fer-ho perque no ho envii, o ho faci a un fitxer de log?

tictacbum – ds, 13/08/2005 – 20:42

deu ser la sortida del cron...

L'script no genera cap mail enlloc (que jo sàpiga). Què hi tens en el correu que t'envia? Si penja del cron i hi ha sortida, podria ser això.
Llavors hauries d'afegir ">/dev/null " al final de la comanda perquè no generi sortida.

rroca – ds, 13/08/2005 – 21:41

logs...

Si que es del cron, on he d'afegir ">/dev/null"? si ho poso despres de l'spawn, "expect" no rep la tornada del ping i reinicia l'AP..

aquest es el correu q m'envia:

From: root@penedessensefils.net (Cron Daemon)
To: root@penedessensefils.net
Subject: Cron /etc/init.d/vigilantAPS
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id:
Date: Sat, 13 Aug 2005 20:46:03 +0200
Status: RO

spawn ping -c 3 172.16.0.229
PING 172.16.0.229 (172.16.0.229): 56 data bytes
64 bytes from 172.16.0.229: icmp_seq=0 ttl=64 time=3.4 ms
Enllac cap a NORD, OK

tictacbum – ds, 13/08/2005 – 23:03

treient la sortida....

si l'script es diu "test_router.sh", en la comanda cron hi hauries de tenir això:

test.sh >7dev/null 2>&1

rroca – dg, 14/08/2005 – 00:22

treient la sortida....

suposo que en comptes de ">7dev/null" es ">/dev/null" no? entenc el que fa això però "2>&1" per que serveix?

tictacbum – dm, 16/08/2005 – 14:19

si... /dev/null

el 7 és un typo. Això hio envia la sortida (stdout).
el 2>&1 és per enviar-hi també l'sderr, que son els missatges d'error si és que n'hi han. Opcional, potser voldries rebre el mail si hi ha errors.

rroca – dm, 16/08/2005 – 15:02

solventat

Gracies, ara ja no ho rebo Smiling

tictacbum – dm, 16/08/2005 – 15:14

El mateix script, per al Linksys

L'script adaptat per tal de fer que si es penja un enllaç entre Linksys reboti un dels Linksys per intentar restablir l'enllaç:

#!/usr/bin/expect --
#
# Modifiqueu:
# %PASSWORD% per la paraula de pas del Linksys
# %IP1% per la IP del Linksys de l'altre banda de l'enllaç
# %IP2% per la IP del Linksys accesible (el que rebotarem)
#
exp_version -exit 5.0
set timeout 60
set force_conservative 1 ;
if {$force_conservative} {
set send_slow {1 .010}
proc send {ignore arg} {
sleep .2
exp_send -s -- $arg
}
}
puts "\n"
spawn ping -c 3 %IP1%
expect -exact "64 bytes from %IP1%" {puts "Enllac cap a %IP1%, OK\n"
#log_file /var/log/caigudesADSL
#send_log "[exec date]: Enllac cap a %IP1% OK\n"
;exit}
send_user "\ reboot de %IP2%: \n"
log_file /var/log/caigudesAPS
send_log "[exec date]: Reboot de %IP2%\n"
log_file
spawn ssh %IP2%
expect "root@%IP2%'s password:*"
send -- "%PASSWORD%\r"
expect "~ #"
send -- "reboot & exit\r"
sleep 2
exit
close

tictacbum – dj, 02/06/2005 – 22:08