SamKnows Whitebox - come utilizzarla come router preservando le misurazioni

  • 462 Risposte
  • 216112 Visite

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

livingsilver94

  • Visitatore
Discussione in aggiornamento!Introduzione alla Whitebox
Chiunque si sia interessato al progetto di SamKnows saprà che, una volta aderito, verrà spedita a casa una Whitebox. Che roba è? Questa Whitebox altro non è che un router a tutti gli effetti, impostato per funzionare come mero switch e privato, lato software, di ogni funzionalità di routing e interfaccia grafica; infatti il suo unico obiettivo è misurare la bontà della propria connessione ADSL senza interferire in alcun modo con la rete di casa.
I più esperti (e a mio parere un po' disonesti...) hanno cominciato a rimpiazzare il software di SamKnows con build come DD-WRT, Tomato o OpenWrt, sbloccando la parte router ottenendo quindi un dispositivo completamente funzionante, che però non ha più nulla a che fare con SamKnows: le misurazioni sono sparite.

Da qui ho cominciato a documentarmi se e come fosse possibile ottenere la botte piena e la moglie ubriaca, e sono incappato in questa discussione. Essa parla di come installare gli script di misurazione su un'altra build OpenWrt, ma è vecchia e parla di un modello di Whitebox non più distribuito. Per fortuna non è stato difficile adattare gli insegnamenti del 2011/2012 con l'attuale router  ;)
In questo thread si parla della Whitebox in senso tecnico, per aderire al progetto SamKnows vi rimando alla discussione dedicata (2017).

Nozioni base e installazione della build
DISCLAIMER: la guida andrà a toccare, almeno all'inizio, la ROM del router. Benché il rischio di brick sia quasi assente, non mi ritengo responsabile di tentativi di flash falliti, sia per mia presunta responsabilità sia per altri motivi, come interruzione della corrente elettrica durante il processo o qualsiasi altra eventualità. In caso di soft brick, dovrete essere in grado di rimettere in sesto il router attraverso TFTP o seriale, argomenti non trattati in questa guida, almeno non per il momento. E' comunque possibile trovare tutto online,  eccezion fatta per la seriale che richiede dell'hardware che andrebbe acquistato.
Infine, nonostante le misurazioni di SamKnows continueranno a funzionare, da contratto non siete autorizzati a manomettere la Whitebox.


Anzitutto, la Whitebox a cui questa guida è indirizzata è il TP-LINK WDR3600. Non ci dovrebbero essere grossi problemi nel caso in cui, in futuro, SamKnows deciderà di cambiare dispositivo. Fatemi sapere se riceverete qualcosa di diverso  :)

Caratteristiche della build:
Oltre a far funzionare le misurazioni, la build ha delle feature in più come:
  • Codice compilato ottimizzato per il processore del WDR3600
  • Interfaccia grafica preinstallata
  • Installazione basata sull'ultima versione stabile di OpenWrt
  • Supporto preinstallato ai pendrive USB (ext4 e FAT/FAT32)
  • Supporto preinstallato per SQM (un QoS avanzato. Fare riferimento alla wiki per le impostazioni) e UPnP
  • Spazio disponibile per applicazioni pari a circa 3.29 MB
  • Installazione dei pacchetti kmod a loro volta ottimizzati!
Changelog (non necessariamente completo):
Codice: [Seleziona]
07/04/2016:
  Build aggiornata a OpenWrt Chaos Calmer 15.05.1
  Spazio disponibile sensibilmente superiore a prima: siamo a 3.29 MB liberi, 3.28 dopo la configurazione iniziale
  Ordinati i permessi dei file da me aggiunti (non che fosse necessario, ma è bene avere i permessi ben sistemati: rwxr-xr-x)
  Sostituito OpenSSL in favore di PolarSSL (uno dei motivi per cui la build è stata ridotta in dimensione)
  Aggiunto in autoavvio lo script editcrontab. A cosa serve: attende che gli eseguibili SamKnows popolino il file /etc/crontabs/root, successivamente
   accoda al file il testo salvato nel file /etc/crontabs/mycrontab, in modo tale da far convivere senza magheggi le operazioni pianificate
   da SamKnows con le vostre. Lo script è semplicissimo e il percorso è /usr/bin/editcrontab
 
16/09/2015:
  La build è ora basata su OpenWrt 15.05 Chaos Calmer
  Impostato nano come editor di default (vi non è nemmeno presente)
  Sostituito il QoS con il nuovo SQM, più semplice da configurare e più efficace (non è più necessario "indovinare" il protocollo da priorizzare )
  Viene ora rispettato il region domain della rete WiFi (grazie mavelot)
  Fixato il supporto alle penne USB (grazie mavelot)
  La password viene salvata con codifica SHA256, non più in MD5 (l'idea mi è venuta dopo aver letto dello scandalo di Ashley Madison)
  I binari SamKnows contenuti in /tmp/ispmon/bin possono ora utilizzare le librerie contenute nella loro directory

Bene, partiamo con l'installazione. Ci sarebbero due metodi. Il primo è da preferire in quando non si va ad interagire col bootloader. Usate il secondo metodo se non riuscite in nessun modo a entrare in failsafe.

METODO 1:
  • Scaricate PuTTY, la mia build e IndiFTPD. Se usate Mac o Linux, cercate un software alternativo.
  • Collegate un PC alla Whitebox via cavo ethernet se ancora non l'avete fatto. Impostate l'IP del computer a 192.168.1.2 e spegnete la Whitebox.
  • Riaccendete la Whitebox e premete il pulsante di reset (quello a sinistra) non appena vedete la spia a forma di asterisco accendersi (grazie all'utente otaku). Se avete premuto in tempo, la spia comincerà a lampeggiare più velocemente. Se invece di lampeggiare diventa fissa, spegnete e riprovate, dovete soltanto beccare il momento giusto in cui premere il pulsante (al limite provate a premerlo ripetutamente...)
  • Ora che siete in failsafe, aprite PuTTY, cliccate sul pallino a fianco alla voce Telnet e nella casella di testo scrivete 192.168.1.1
    A questo punto aprite IndiFTPD (deve essere nella stessa cartella del .bin) e date questi comandi da PuTTY:
    cd /tmp
    wget ftp://192.168.1.2/openwrt-ar71xx-generic-tl-wdr3600-v1-squashfs-sysupgrade.bin
    sysupgrade -n openwrt-ar71xx-generic-tl-wdr3600-v1-squashfs-sysupgrade.bin
METODO 2:
  • Scaricate la mia build e Tftpd32.
  • Collegate il PC direttamente alla Whitebox via ethernet e assegnate l'IP a 192.168.0.66. Spegnete la Whitebox.
  • Rinominate il .bin (verificate che il nome finisca con factory) in wdr3600v1_tp_recovery.bin e avviate Tftpd32 nella stessa cartella del .bin
  • Accendete la Whitebox tenendo premuto il tasto reset. Non rilasciatelo finché non vedrete l'ultimo LED a destra (le due frecce) diventare fisso. A un certo punto, il router dovrebbe cominciare a trasferire e installare il firmware in maniera automatica, riavviandosi al termine dell'operazione.
Per qualunque metodo usato, terminato il riavvio, la Whitebox funzionerà come router! Il suo indirizzo IP sarà 192.168.1.1, Cambiate pure l'IP del PC adesso.

NOTA: se l'ultimo LED a destra (freccette) lampeggia anche dopo diversi minuti dall'accensione, le misurazioni non stanno funzionando. Scrivetemi che cerchiamo di risolvere. Ho notato che a molte persone le misurazioni non vanno perché la Whitebox è collegata in cascata a una stramaledettissima Vodafone Station. Risolvete con questa guida (un grazie a varma), dopo aver seguito la guida per impostare OpenWrt come access point.

Se ti sono stato d'aiuto, ricambia il favore con un caffè ;)

Mi piacerebbe fare una lista dei donatori ma nella ricevuta compare il vero nome, non il nome utente.

FACOLTATIVO - Ripristinare l'accesso alla GUI del modem
Se state usando la Whitebox come router, avrete notato che non è più possibile accedere alla sua pagina web. Si può rimediare facilmente alla cosa a patto che Whitebox e modem siano su due sottoreti diverse. Esempio: WDR3600 con indirizzo 192.168.1.1 e modem 192.168.0.1. Spesso e volentieri i modem non sono granché configurabili, quindi se il modem giace nella sottorete 1, cambiate pure l'indirizzo della Whitebox che non fa alcuna differenza.
Soddisfatta questa ipotesi, eccome come fare a ripristinare l'accesso:
  • In LuCI, andate in Network → Interfaces. Cliccate su "Add new interface...". La chiameremo "modem". l'interfaccia sarà la eth0.2 (quella della wan).
  • Impostate il campo Protocol in Static address. Adesso impostate:
    IPv4 address: un qualunque indirizzo che stia nella sottorete del modem
    IPv4 netmask: dipende, ma se l'indirizzo inizia con 192.168, impostate 255.255.255.0
    IPv4 gateway: l'indirizzo del modem
  • Spostatevi nella scheda "Firewall Settings" e selezionate "wan". Salvate

Impostare la Whitebox come switch e access point - da testare
Leggere bene il paragrafo prima di metterlo in pratica! - grazie a Ansuel per il contributo
Se non siete interessati ad avere un altro router, potete impostare OpenWrt per funzionare come switch ethernet e come access point wireless. Le misurazioni continueranno a funzionare. Però, dal momento che la build è principalmente pensata per essere un sistema operativo di routing, ci sono diverse modifiche da apportare, soprattutto riguardo la sostituzione di un algoritmo che "dice" agli script di SamKnows quando la vostra connessione è libera, così da non falsare i risultati ottenuti. La Whitebox non sarà più un router, per cui utilizzeremo il protocollo SNMP per chiedere al router l'utilizzo della banda. Bene, al lavoro.
Da LuCI, andate in Network → Interfaces ed eliminate tutto tranne l'interfaccia lan. Adesso andate a modificare la lan nel seguente modo:
  • Dove trovate "DHCP server", spuntate "disable dhcp for this interface".
  • Protocol, mettete "static address".
  • IPv4 address, mettete un IP che sia nella sottorete del router (esempio: router 192.168.1.1, IP impostato 192.168.1.2).
  • l'IP del gateway va impostato sull'IP del router.
Spostatevi nella scheda "Physical settings" e:
  • Spuntate "Bridge interfaces" (dovrebbe essere già spuntata comunque).
  • Spuntate eth0.1, eth0.2 e le due reti wireless.
  • Salvate ma non applicate.
Andate in Network → Switch e:
  • Cliccate su "Delete" alla seconda riga (la seconda VLAN).
  • Mettete su "untagged" la porta 1 invece di "off".
  • Salvate ma non applicate.
Spostatevi infine in System → Startup e:
  • Cliccate sul pulsante "Enabled" a fianco a "firewall".
  • Cancellate il contenuto dello script in fondo alla pagina.
  • Salvate, applicate e riavviate.
La Whitebox adesso è un semplice switch/access point Wi-Fi, che però manca della comunicazione SNMP con il router introdotta prima. Ci si addentra dunque in una parte più tecnica, che implica che voi sappiate mettere mano alla riga di comando di OpenWrt (ci sono decine di guide online ;)) e che il vostro router supporti il protocollo SNMP v2c. Se non soddisfate questi requisiti, le misurazioni funzioneranno comunque, ma siate consapevoli che ciò che verrà misurato quasi certamente non sarà consistente con la reale velocità della vostra ADSL.
Lo script qui in basso è da modificare perché ogni rete è storia a sé. Ci sono due modifiche da apportare: la variabile snmphost va inizializzata all'indirizzo del router (esempio: snmphost='192.168.1.1') e il nome dell'interfaccia del router che "esce" dalla vostra rete (variabile wan_iface).
Codice: [Seleziona]
#!/bin/sh
snmphost='da impostare'
snmpcommunity='public'
wan_iface='da impostare'
oid=$(snmpwalk -v2c -c "$snmpcommunity" $snmphost .1.3.6.1.2.1.2.2.1.2 | grep "$wan_iface" -w -m1 | cut -c23-24)
rx_oid=1.3.6.1.2.1.31.1.1.1.6.$oid
tx_oid=1.3.6.1.2.1.31.1.1.1.10.$oid
ETH_IFACE=eth0
interval=5
rx_old=0
tx_old=0

while true; do
values=$(snmpget -Oqv -c "$snmpcommunity" -v2c $snmphost $rx_oid $tx_oid)
rx_bytes=$(echo "$values" | head -n1)
tx_bytes=$(echo "$values" | tail -n1)
rx_traf=$(((rx_bytes - rx_old) / interval))
tx_traf=$(((tx_bytes - tx_old) / interval))
if [ $rx_traf -eq 0 -o $tx_traf -eq 0 ]; then
sleep $interval
continue
fi
rx_old=$rx_bytes
tx_old=$tx_bytes
echo -n $rx_traf > /tmp/${ETH_IFACE}_rx
echo -n $tx_traf > /tmp/${ETH_IFACE}_tx
echo -n 0 | tee /tmp/wlan0_pkt /tmp/wlan1_pkt
echo -n 1 > /tmp/threshold_pcap
sleep $interval
done
Per trovare il valore della X ci serviremo di un programma chiamato MIB Browser. Scaricate la Personal Edition che è gratis. Il programma è in Java, potete farlo girare su qualunque OS desktop.
Supponendo che abbiate Windows, lanciate il programma da bin\browser.bat. Alla voce Address mettete l'IP del router, come OID mettete  .1.3.6.1.2.1.2.2.1.2 e cliccate su Go. Nell'elenco che appare, scegliete il nome dell'interfaccia opportuna. Nel caso di OpenWrt, è la pppoe-wan, non "wan" e basta. Spesso i nomi possono essere confusionari, chiedete in questo thread cosa fare se avete dubbi. Scelta l'interfaccia, inizializzate la variabile col suo nome (da 'da impostare' mettete il nome, sempre tra gli apostrofi).
A script ultimato, salvatelo dove vi pare, diciamo /usr/bin/bandwidth_snmp.sh e date un po' di comandi alla Whitebox:
Codice: [Seleziona]
chmod +x /usr/bin/bandwidth_snmp.sh  #per rendere lo script eseguibile
opkg update && opkg install snmp-utils #per aggiornare i repo e installare il pacchetto con snmpget
echo '/usr/bin/bandwidth_snmp.sh &' > /etc/rc.local #per avviare lo script ad ogni riavvio
reboot
Occhio che l'ultimo comando riavvia la Whitebox. Collegate il cavo proveniente dal router nella porta WAN del WDR3600. Così avete tutte e 4 le porte dello switch libere ;)


Materiale utile
Documentazione SamKnows.
Raccolta firmware originali SamKnows
« Ultima modifica: 18 Aprile 2017, 21:37 da livingsilver94 »

Offline h7255

  • Nuovo Iscritto
  • *
  • 18
ma non c'è un modo per caricare gli script di samknows nel fw DD-WRT?

livingsilver94

  • Visitatore
Teoricamente sì ma dovrei compilare DD-WRT in modo da soddisfare alcune richieste degli script. Questo significa anche includere pacchetti extra, non so se DD-WRT è sufficientemente piccolo per farceli stare in 8MB. Per ora non mi interessa, mi concentro su OpenWrt.

Offline h7255

  • Nuovo Iscritto
  • *
  • 18
Teoricamente sì ma dovrei compilare DD-WRT in modo da soddisfare alcune richieste degli script. Questo significa anche includere pacchetti extra, non so se DD-WRT è sufficientemente piccolo per farceli stare in 8MB. Per ora non mi interessa, mi concentro su OpenWrt.
capito. Ti faccio qualche domanda numerandola così puoi rispondere velocemente:
1) Su quale versione di OpenWRT si basa la tua build precisamente?
2) Ci sono bug noti di rilevante importanza?
3) Mi sapresti dire velocemente le differenze tra openWrt e dd-wrt?
4) Tu quale preferisci e perchè?
5) E' possibile installare anche Transmission in questa tua build? E il supporto via USB delle stampanti?
scusa per tutte queste domande, ma vorrei saperne un pò di più prima di flashare questa build

livingsilver94

  • Visitatore
Ti invierei volentieri la mia risposta ma la board continua a darmi "forbidden". 'Sta situazione sta diventando insostenibile... sono scocciato di dover cercare ogni volta la parola che, chissà perché, manda in vacca la board.

Offline h7255

  • Nuovo Iscritto
  • *
  • 18
Ti invierei volentieri la mia risposta ma la board continua a darmi "forbidden". 'Sta situazione sta diventando insostenibile... sono scocciato di dover cercare ogni volta la parola che, chissà perché, manda in vacca la board.
LOL
scrivi troppe parolacce... ahahah
sto scherzando, ovviamente

livingsilver94

  • Visitatore
Guarda, le parolacce non le scrivo perché ho paura che pure quelle mandino "forbidden". Sono intimorito da quel messaggio O_O

Offline Miguel89

  • Ex-Staff
  • VIP
  • *****
  • 5047
  • Sesso: Maschio
@livingsilver94
Scusaci... Stiamo cercando di capire dov'è il problema...

Offline fabiobassa

  • Esperto
  • ****
  • 728
  • Sesso: Maschio
@livingsilver94

innanzitutto grazie per il tuo lavoro.

Volevo chiederti due cose:

1) hai un bin dell'attuale fw che gira sul TP-LINK WDR3600 ??  Per capirci, hai il firmware originale samknows??

2) In pratica col primo metodo è un sys-upgrade, col secondo è un factory. Ma se qualcosa andasse per il verso storto... c'è modo di caricargli un samknows.bin  :P  ??

Grazie ancora, Fabio

livingsilver94

  • Visitatore
Ehi! Abbiamo lo stesso nome :)

1) No, ma QUI puoi trovare i sorgenti. Compilarli è una sciocchezza. In caso di necessità, il .bin si rimedia senza problemi.
2) Beh... dipende come va storto. Alla peggio devi aprire il router e collegare la seriale (NON la RS232). L'ho dovuto fare una volta perché nelle mie varie prove non avevo incluso un pacchetto critico e OpenWrt non bootava più. Con TFTP non riuscivo a risolvere perché avevo un bootloop. Ma è una possibilità davvero remota, la build l'ho testata a fondo e credo che solo l'interruzione di alimentazione può causare quel soft brick.

Offline zoomx

  • Esperto
  • ****
  • 589
In rete c'è un post in una lingua dell'europa orientale, mi pare bulgaro, dove spiega come effettuare il backup del firmware Samknows.
Se non ricordo male si opera come nel metodo 1 in modo da avere una shell e poi si danno dei comandi da li.
Alla fine il tizio allegava il firmware.
Fa uso di comandi noti in openWRT e probabilmente in Linux embedded che però io non ricordo.

livingsilver94

  • Visitatore
Fare il backup in OpenWrt è semplice, basta scrivere una partizione (una delle mtd) in un file e poi prenderselo. Ma è una fatica inutile, nessuna build è specifica per il proprio router.

Offline angben

  • Membro Giovane
  • **
  • 72
living... ottimo lavoroo!! Ho messo su il tuo firmware cosi da mantenere il lavoro per la samknows... ho solo un problema abbastanza noioso... via wifi i pc e il cell non mi navigano su internet ma, cosa assurda, whatsapp e telegram vanno! Ma come è possibile? via cavo nessun problema solo che non posso raggiungere l'interfaccia web del mio agpwi originale telecom...

Offline ToToNn87

  • Nuovo Iscritto
  • *
  • 14
Grandissimo progetto, alla fine siamo tutti contenti, noi e loro :D

Mi pare di aver letto in passato che ci sono problemi con il wifi, è vero?

livingsilver94

  • Visitatore
Grandissimo progetto, alla fine siamo tutti contenti, noi e loro :D

Mi pare di aver letto in passato che ci sono problemi con il wifi, è vero?
Grazie!
No, falso, fatta eccezione per il post sopra il tuo ahahah xD

Citazione da: angben
living... ottimo lavoroo!! Ho messo su il tuo firmware cosi da mantenere il lavoro per la samknows... ho solo un problema abbastanza noioso... via wifi i pc e il cell non mi navigano su internet ma, cosa assurda, whatsapp e telegram vanno! Ma come è possibile? via cavo nessun problema solo che non posso raggiungere l'interfaccia web del mio agpwi originale telecom...
Strano per il WiFi... non credo serva a qualcosa, però prova a postare il System Log. Lo trovi sotto Status, in LuCI.
Oh bravissimo per l'AGPWI! Si può rimediare ma ho scordato di inserire la cosa nella guida. Rimedio ;)