Guida per leggere i pacchetti che transitano da e verso la WAN, usando il protocollo SNMP su OpenWrt
Anzitutto, affinché la comunicazione sia possibile, il modem naturalmente dev'essere compatibile con tale protocollo. Immagino che la stragrande maggioranza di modem in comodato d'uso non sia compatile. Io ho ovviato la cosa installando il firmware Billion sul mio AGPWI (che, come dice Ansuel, oltretutto supporta l'IPv6).
Ogni LAN può essere un caso a parte, perciò sono costretto a fare l'ipotesi che il modem sia connesso alla Whitebox attraverso la porta WAN. Mi spiace per chi non rientra in questa casistica, ma suppongo che non ci siano grosse differenze. Casomai chiedete che vediamo il da farsi

Chiudo la premessa dando due nozioni base su come funziona l'SNMP: c'è un OID, che altro non è che una stringa, che serve a dire cosa vogliamo sapere dal modem, poi naturalmente serve l'IP del modem, e infine la community. Ce ne sono di due tipi. Queste di default mi sembra vengano chiamate “public” e “private”. Stando a quanto ho capito, dalla prima possiamo solo leggere i valori, sulla seconda possiamo anche scrivere.
Ok, cominciamo!
- Se il vostro modem è assegnato alla stessa sottorete della Whitebox, diciamo 192.168.1.x, dovete cambiare l'IP di uno o dell'altro, a piacere, mettendo i due dispositivi in due sottoreti diverse. Nel mio caso ho 192.168.0.1 per il modem e 192.168.1.1 per il WDR3600. Fate questo dall'interfaccia web di uno o dell'altro.
- Ora che avete gli indirizzi sistemati, in LuCI andate in Network → Interfaces e cliccate su “Add new interface”. Chiamate l'interfaccia con un nome che vi piaccia (“modem”
), selezionate Static address dal menu a tendina se già non è selezionato, cliccate sul radio button che riporta “eth0.2”, che dovrebbe essere l'interfaccia dedicata alla WAN e quindi cliccate “Submit”. Arrivati a questo punto mettete:
IPv4 address : un indirizzo a piacere che stia nella sottorete del modem. Io ho 192.168.0.2
IPv4 netmask : 255.255.255.0
IPv4 gateway : l'indirizzo del modem.
E avete finito questo passaggio. Cliccate su “Save & apply”.
- Ora dovreste vedere che l'interfaccia del modem non ha uno sfondo colorato a differenza di LAN e WAN. Questo significa che il firewall non ha assegnato l'interfaccia modem a nessuna zona. Per sistemare la faccenda andate in Network → Firewall e cliccate su “Edit” a destra di dove sta scritto “Wan → REJECT”. Ora dove trovate “Covered networks” spuntate l'interfaccia modem e di nuovo su “Save & apply”. Se tornate in Network → Interfaces dovreste vedere che la scritta “modem” ora ha un invitante sfondo rosso. Se non ce l'ha è perché il firewall va riavviato. Lasciate perdere che tanto lo faremo dopo.
- piccola parentesi: In questo passaggio dovrete trasferire un file alla Whitebox. Scegliete voi il metodo che preferite, io uso un server FTP.
E' ora di un po' di codice! Lo script da modificare e installare lo metto in fondo al post causa limitazioni del forum.
Modificate le variabili snmphost con l'indirizzo del modem e snmpcommunity con il nome che avete scelto per la community SNMP (ricordo che il default mi pare sia “public”. L'altra non ci interessa).
Adesso dovrete capire quale numero finale di rx_oid e tx_oid fa per voi. Quel numero 1 si riferisce alla porta LAN da cui parte il cavo che finisce alla porta WAN della Whitebox. In alcuni modem come l'AGPWI quel numero è inverito, nel senso che se vedete scritto 4 sulla scocca, in realtà è l'1, e viceversa. Il mio consiglio per trovare il numero giusto è scollegare ogni dispositivo dal modem TRANNE la Whitebox, riavviare sia Whitebox che modem e scaricare questo programma (è per Windows, ma esiste anche per altri SO): http://www.wtcs.org/snmp4tpc/FILES/Tools/SNMPUTIL/SNMPUTIL.zip. Utilizzate il comando snmputil get "192.168.0.1" "SamKnows_read" ".1.3.6.1.2.1.2.2.1.10.1" e provate a vedere quale porta vi dà un numero diverso da zero, provando da 1 a 4, supposto che il vostro modem abbia 4 porte LAN. Ancora una volta modificate community e indirizzo con quelli adatti a voi. Trovato il numero giusto, scrivetelo in entrambi gli oids nello script. Salvatelo come snmpcap.sh e trasferitelo nella Whitebox in una cartella a piacere, la mia è /usr/myscripts/ . Ricordate di marcare lo script come eseguibile con chmod 700 snmpcap.sh ! - Quarto e ultimo passaggio, andate il LuCI, sezione System → Startup, andate in fondo alla pagina e appena sopra exit 0 scrivete /usr/myscripts/snmpcap.sh & . Modificate la stringa con la vostra cartella corrispondente e NON dimenticate la e commerciale!! Salvate e riavviate. Al prossimo riavvio dovreste trovare alcuni file in /tmp. Controllate che i file /tmp/etho_tx e /tmp/eth0_tx vengano aggiornati ogni 5 secondi usando il comando cat.
Questo dovrebbe essere tutto. Non escludo che io possa aver scritto delle idiozie colossali quindi, in caso ci fossero problemi, fatemelo sapere che vediamo dove sta la magagna!
Script:
#!/bin/sh
snmphost="192.168.0.1"
snmpcommunity="SamKnows_read"
ETH_INTERFACE="eth0"
rx_oid=".1.3.6.1.2.1.2.2.1.10.1"
tx_oid=".1.3.6.1.2.1.2.2.1.16.1"
interval=5
rx_old=0
tx_old=0
while true; do
res="$(snmpget -v 1 -Oqv -c "$snmpcommunity" "$snmphost" "$rx_oid" "$tx_oid")"
rx_bytes="$(echo "$res" | head -n1)"
tx_bytes="$(echo "$res" | tail -n1)"
rx_traf=$(((rx_bytes - rx_old) / interval))
tx_traf=$(((tx_bytes - tx_old) / interval))
rx_old=$rx_bytes
tx_old=$tx_bytes
echo -n $rx_traf > /tmp/${ETH_INTERFACE}_rx
echo -n $tx_traf > /tmp/${ETH_INTERFACE}_tx
echo -n 0 > /tmp/wlan0_pkt
echo -n 0 > /tmp/wlan1_pkt
echo -n 1 > /tmp/threshold_pcap
sleep $interval
done