Usi il Raspberry Pi come router?


50

Qualcuno ha usato il proprio Raspberry Pi come dispositivo di routing?

Principalmente voglio usarlo per monitorare la mia rete, e sarebbe bello se avesse un input e un output per Ethernet, ma non lo fa, quindi mi chiedo se sia molto efficace monitorare la rete avendo l'ingresso Ethernet e quindi usando un dongle USB come router Wi-Fi. Qualcuno ha fatto qualcosa del genere? Internet rallenta di molto?


3
Dipende dalla velocità della tua connessione Internet. Il mio è 100Mb, quindi sono abbastanza sicuro che lo rallenterebbe;)
John La Rooy

3
Ho una connessione Internet a 30 Mbps e in questo momento con 5 Mbps di traffico, il mio lampone in linea con snort consuma ~ 50-95% di CPU e 85% di memoria. La mia configurazione non è ancora ottimizzata, ma voglio mostrarti alcune figure reali.
Pipe

qualcuno non sa come funziona l'allocazione della larghezza di banda con un router personalizzato usando raspberry pi? come, ho una velocità di connessione Internet a 3 Mbps, ho 10 utenti. puoi spiegare come sarà diviso? la velocità di 3 Mbps. Grazie. Spero che tu capisca. :)
Kirk,

2
Ciao Kirk. Si prega di astenersi dal porre una domanda su un'altra domanda. Apri invece una nuova domanda con il link Poni domanda nella parte superiore della pagina. Grazie.

Risposte:


30

Ho usato il mio modello B come router con traffic shaping, usando solo una porta Ethernet che viene fornita. Ecco un veloce e sporco su come:

  1. Abilita l'inoltro IPv4 , in modo che il tuo Pi funga da router inoltrando tutto il traffico che riceve
  2. Configura il tuo Pi con una configurazione di rete statica in modo che non sia influenzato dalle modifiche DHCP suggerite di seguito. Ecco i contenuti del mio /etc/network/interfacescome riferimento:

    # pi@flux:/home/pi/projects/adsl/rrdlogger (master *)
    # cat /etc/network/interfaces 
    auto lo
    
    iface lo inet loopback
    #iface eth0 inet dhcp
    iface eth0 inet static
            address 192.168.1.1
            netemask 255.255.255.0
            gateway 192.168.1.254    # IP of my ADSL router box
    
    allow-hotplug wlan0
    iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp
    
  3. Ora modifica le impostazioni DHCP della tua rete in modo tale che il gateway / router predefinito sia il tuo Pi. Ciò probabilmente significa modificare le impostazioni sulla casella del router ADSL esistente. Nel mio esempio sopra, l'indirizzo IP del mio Pi è 192.168.1.1.

La prossima volta che i tuoi dispositivi si riconnetteranno alla rete, verrà loro comunicato che il tuo Pi è il loro gateway verso Internet e tutto il traffico diretto a Internet verrà inviato ad esso. Il tuo Pi a sua volta inoltrerà tutto il traffico al tuo solito router. Potrebbe essere necessario disconnettersi e riconnettere i dispositivi affinché queste modifiche abbiano effetto.

Ora puoi creare o installare uno strumento per eseguire il monitoraggio per te, come vnstat .

Modellamento del traffico

Per quanto riguarda la modellatura del traffico, ecco un'altra guida rapida che utilizzerà la mia variante personale di Wondershaper .

Perché questo sia utile devi sapere quanto è veloce la tua connessione Internet. Di solito è possibile trovarlo dall'interfaccia Web del router (originale), ma in caso contrario è possibile ottenere un preventivo utilizzando uno speedtest .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0stamperà lo stato corrente del traffic shaping. Ovviamente lo stato atteso è che non vi è alcuna modellatura, il che significa che esiste una sola regola, chiamata pfifo_fast:

    • ( eth0è il nome della scheda di rete cablata su un modello B. Vedere ifconfigi nomi delle interfacce sul proprio sistema)
    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
     Sent 1908 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0
    
  4. sudo ./wondershaper eth0 3000 370, dove:

    • 3000è la velocità di downlink della mia connessione Internet in kbit . Quindi 3Mbit == 3000kbit
    • 370 è la velocità di uplink della mia connessione Internet, di nuovo in kbit.
  5. sudo ./wondershaper eth0 ora dovrebbe mostrare molto più output:

    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 0
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 40: parent 1:40 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 10: parent 1:10 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 20: parent 1:20 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 30: parent 1:30 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc ingress ffff: parent ffff:fff1 ---------------- 
     Sent 768 bytes 12 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    class htb 1:1 root rate 370000bit ceil 370000bit burst 10Kb cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 3459453 ctokens: 540531
    
    class htb 1:10 parent 1:1 leaf 10: prio 1 rate 370000bit ceil 370000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 540531 ctokens: 540531
    
    class htb 1:20 parent 1:1 leaf 20: prio 2 rate 246000bit ceil 246000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 813000 ctokens: 813000
    
    class htb 1:30 parent 1:1 leaf 30: prio 3 rate 74000bit ceil 74000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 2702687 ctokens: 2702687
    
    class htb 1:40 root leaf 40: prio 0 rate 100000Kbit ceil 100000Kbit burst 512Kb cburst 1600b 
     Sent 3486 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 15 borrowed: 0 giants: 0
     tokens: 654609 ctokens: 1250
    

Il tuo traffico di rete in uscita viene ora modellato dal tuo Pi e il tuo traffico in entrata viene leggermente rallentato per garantire che il Pi, e non la tua casella di routing originale, abbia il controllo del traffico.

Per disabilitare la modellatura, basta eseguire sudo ./wondershaper eth0 clear. È possibile modificare le velocità di uplink e downlink senza cancellare prima, ma non fa male.

Aggiornamento: è inoltre necessario disabilitare la trasmissione dei reindirizzamenti ICMP , poiché è necessario tutto il traffico per passare attraverso il Pi affinché si verifichi la modellazione. Si scopre che il kernel Linux è abbastanza intelligente da capire che i client sulla tua rete domestica potrebbero parlare direttamente con la casella ADSL, piuttosto che far rimbalzare il traffico attraverso il Pi, e questo lo dice ad ogni occasione. I client inviano quindi il loro traffico direttamente alla tua casella ADSL e il Pi non ha la possibilità di modellarlo. Disabilitalo al volo in questo modo (perso al prossimo riavvio):

echo 0 | sudo tee /proc/sys/net/ipv4/conf/*/send_redirects

Aggiorna quanto segue per impostarlo durante l'avvio: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Grazie a https://unix.stackexchange.com/a/58081/22537 per questo suggerimento)

Potresti anche essere interessato alle mie note personali sulla configurazione di un gateway Linux: http://www.robmeerman.co.uk/unix/gateway


come si imposta il nome e la password della rete wifi a cui altri dispositivi possono connettersi?
fommil

Un'ottima guida. Ho una domanda sul tuo wondershapersuggerimento, però: il limite è per cliente o complessivo?
Bob,

@fommil: La mia guida sopra presuppone che tu usi ancora il punto di accesso modem / router / WiFi che ti ha fornito il tuo ISP, ma che lo configuri in modo tale che tutti i client che si connettono ricevano "Invia traffico al Pi". Questo di solito viene fatto inserendo l'indirizzo IP del tuo Pi (statico!) Nelle impostazioni DHCP della tua casella ISP. In genere in un campo chiamato "Gateway", "Default Gateway", o forse "Default route".
RobM

@Bob: i numeri inseriti rappresentano il totale del tuo collegamento Internet. Lo script Wondershaper che tenta di condividere equamente questo con tutti i tuoi clienti in base alla domanda . Quindi, se un solo client utilizza Internet, dovrebbe ottenerne il 100%. Se un altro client si avvia, dopo un po 'di "tempo di assestamento" (~ 10 secondi) finirà per usare il 50% ciascuno, e così via.
RobM

Perfetto. Solo una nota a @fommil, nessuno dei miei router (e presumo che molti altri siano uguali) fornisce un modo semplice per impostare il gateway assegnato tramite DHCP. Ho finito per disattivare il DHCP sul router e impostare un server DHCP sul Pi: è un processo abbastanza semplice (cerca una guida se vuoi).
Bob,

10

Avendo un po 'di background di rete, la prima cosa che viene in mente è usarlo come una Snort box, e quindi non devi preoccuparti di avere solo un'interfaccia. Dovresti impostare il tuo switch / router per inoltrare tutto il traffico verso il Pi, ma anche passarlo al dispositivo finale. Questo è noto come monitor switchport, ma il dispositivo potrebbe non supportarlo. Potrebbe essere necessario un interruttore gestito per farlo. Snort avrebbe quindi analizzato il traffico e riferito su di esso. Ulteriori informazioni su Snort http://www.snort.org/

La cosa bella di questo tipo di configurazione è che il tuo Pi è seduto di lato a guardare tutto ciò che viene eseguito attraverso l'interruttore, piuttosto che stare in linea con i dati. Se hai un problema tecnico del software in questo modo, il traffico può ancora fluire, ma non può essere monitorato. Con ciò che stai descrivendo con due interfacce, il tuo programma si arresta in modo anomalo, la tua rete si arresta in modo anomalo.

Questo non utilizza pi come router, ma consente di monitorare e riferire sul traffico che si sta spostando attraverso la rete.


7

Ho usato Raspberry Pi per il routing e ha funzionato bene. Come dici tu, hai bisogno di almeno un'altra interfaccia di rete, poiché Raspberry Pi ha solo una porta Ethernet. È possibile aggiungere un'altra interfaccia collegata alla porta USB. Ho usato un modem GSM e una chiavetta Wi-Fi.

Cose da notare:

  • Utilizzare un hub USB alimentato. I dispositivi Wi-Fi e GSM richiedono più energia di quella che possono fornire le porte USB del Raspberry Pi.
  • Se acquisti dispositivi Wi-Fi, acquistane uno con un buon supporto Linux. Ne vuoi uno che funzioni in modalità access point e non tutti gli stick lo fanno. Controlla su linuxwireless.org .

Ecco il mio post sul blog sul routing e un altro sulla configurazione di un punto di accesso Wi-Fi . Questa guida mi ha aiutato con la configurazione del routing. Il routing non è molto specifico per il Raspberry Pi; tutto ciò che funziona su Linux in generale dovrebbe essere possibile. I dettagli dipendono in parte dalla distribuzione utilizzata.


4

Uso Raspberry Pi come router da circa un mese ormai, senza problemi. Ho una vera porta di accesso Wi-Fi commerciale, non un router Wi-Fi domestico, quindi l'ho usato. Ho anche un convertitore da USB a Ethernet che è stato "preso in prestito" dal Wii. Questo va alla LAN di casa e l'Ethernet integrata del Raspberry Pi va alla WAN / Internet.

Vai a ottenere una copia di IPFire per il Raspberry Pi. Volete la versione ARM, senza una console seriale e l'ultima versione stabile. Fai clic sulla scheda ARM. Scarica "Immagine per l'architettura armv5tel".

Avvialo. Collega una TV e una tastiera HDMI. Rispondi alle prime domande. Il resto della configurazione può essere eseguito da un browser sulla rete domestica, quindi non sarà necessario il televisore o la tastiera.

Non è stato troppo difficile e ha funzionato come un campione! Ecco le istruzioni formali: http://wiki.ipfire.org/en/hardware/arm/rpi

Un'ultima cosa. Se stai per utilizzare un dongle Wi-Fi alimentato tramite USB, controlla l'alimentatore del tuo Raspberry Pi. Un alimentatore USB da 700 mA potrebbe essere sufficiente per alimentare il Raspberry Pi, ma non lascia molto per alimentare il Wi-Fi. Utilizzare un hub USB alimentato o alimentare Raspberry Pi con un alimentatore USB da 1 a 2 A.
In bocca al lupo!


1

(Questo addendum segue la mia risposta precedente , che era una guida su come configurare il tuo Pi come gateway Internet della tua LAN)

Non contento di monitorare il mio utilizzo generale di Internet, ho scritto uno strumento che monitora l'utilizzo di Internet di ciascun dispositivo sulla mia LAN. Questo mi permette di vedere l'uso istantaneo in una finestra della console e di generare grafici di utilizzo storico in modo da poter vedere cosa è successo dall'oggi al domani.


Rodi , uno strumento per il monitoraggio dell'utilizzo della rete in tempo reale e storico dei dispositivi LAN (basato sull'indirizzo MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Esempio di output della console:

193 kiB/s TX     17 kiB/s RX   0004edbf98c0   home.gateway (Billion Electric Co.)
  0 kiB/s TX      0 kiB/s RX   2002af18dc15   Samsung Galaxy Tab 10.1, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c01197b   Nintendo 3DS:XL, Robert
  0 kiB/s TX      0 kiB/s RX   34af2c3af204   Nintendo 3DS:XL, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c9cfffd   Nintendo WiiU
  0 kiB/s TX      0 kiB/s RX   6045bd9c9dbc   Xbox360 Slim
  0 kiB/s TX      0 kiB/s RX   745e1c56c297   Pioneer SX-LX57
 13 kiB/s TX    109 kiB/s RX   7831c1be0c34   Az Pro (Macbook Pro)
  0 kiB/s TX      0 kiB/s RX   80ea96e6214e   Roberts-AirPort-Time-Capsule
  0 kiB/s TX      0 kiB/s RX   88308a770370   Samsung Galaxy S3, Vicky
189 kiB/s TX    211 kiB/s RX   b827eb8fc0f3   Flux (Raspberry Pi)
  2 kiB/s TX     39 kiB/s RX   b8e8563acb34   Macbook Pro, Vicky
  0 kiB/s TX      0 kiB/s RX   d022be2c26ef   Samsung Galaxy Note 3, Rob
  0 kiB/s TX      0 kiB/s RX   f82fa89368ea

La prima colonna mostra quanti dispositivi stanno trasmettendo, il che di solito significa caricare su Internet. L'eccezione a questo è il router ADSL stesso (home.gateway nell'esempio sopra) che trasmette i dati ricevuti dall'ISP il dispositivo che lo ha richiesto (ovvero i download). Naturalmente trasmette anche caricamenti su Internet, ma lo fa usando il suo modem ADSL, che non è sulla LAN e quindi non visibile a questo strumento.

L'altra eccezione sarebbe il Raspberry Pi ("Flux" in precedenza) stesso, che ovviamente trasmette tutti i dati che gestisce, in entrambe le direzioni.

A parte queste eccezioni, i numeri TX (trasmissione) si riferiscono al caricamento e i numeri RX (ricezione) da scaricare. La terza colonna è l'indirizzo MAC del dispositivo (senza i soliti separatori ":" o "-"). La quarta colonna mostra il nome leggibile dall'uomo del dispositivo, se è noto.

I grafici vengono generati eseguendo ./index.py, che è destinato a essere chiamato da un server web come lighttpd(con l' index.pyaggiunta index-file.namesall'impostazione di configurazione in /etc/lighttpd/lighttpd.conf). Puoi semplicemente eseguirlo manualmente e genererà alcune immagini e stamperà HTML su STDOUT. Quindi vorresti reindirizzarlo su un file che puoi aprire in un browser:

./index.py > index.html

Quindi apri index.html nel tuo browser preferito.

Requisiti di installazione (tutti possono essere installati con apt-get install):

  • tcpdump - Strumenti da riga di comando per acquisire e descrivere il traffico di rete
  • rrdtool - Strumento Round Robin Database, registra e traccia i dati delle serie storiche
  • rrdcached - Round Robin Database Caching Daemon, servizio che riduce le spese generali quando si lavora contemporaneamente con più file RRD.
  • pypy-upstream (una rapida implementazione del linguaggio di programmazione Python)

    • Puoi usare lo stock Python come preferisci: python rhodes.py( pypyè un'implementazione alternativa del linguaggio di programmazione Python che esegue la compilazione Just-In-Time (JIT), quindi gli script di lunga durata utilizzeranno meno cicli della CPU al costo di più memoria)

Nota sull'utilizzo : lo strumento 'tcpdump' utilizzato da questo script richiede i privilegi di root per accedere al traffico di rete non elaborato. Ciò si ottiene avviando sudo tcpdumpall'avvio dello script, quindi potrebbe essere richiesto di inserire la password. Personalmente, ho aggiunto una regola NOPASSWD /etc/sudoersquindi non mi viene mai richiesto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.