Verwenden Sie den Raspberry Pi als Router?

50

Hat jemand seinen Raspberry Pi als Routing-Gerät verwendet?

Hauptsächlich möchte ich es verwenden, um mein Netzwerk zu überwachen, und es wäre großartig, wenn es einen Ein- und Ausgang für Ethernet hätte, aber nicht, also frage ich mich, ob es sehr effektiv ist, das Netzwerk über den Ethernet-Eingang zu überwachen und dann mit einem USB-Dongle als WLAN-Router. Hat jemand so etwas getan? Verlangsamt es das Internet um ein Vielfaches?

Clifgray
quelle
3
Hängt davon ab, wie schnell Ihre Internetverbindung ist. Meins ist 100 MB, also bin ich mir ziemlich sicher, dass es es verlangsamen würde;)
John La Rooy
3
Ich habe eine 30-Mbit / s-Internetverbindung und zur Zeit verbrauchen meine Inline-Himbeer-Pi mit Snort bei 5 Mbit / s etwa 50-95% CPU und 85% Arbeitsspeicher. Mein Setup ist noch nicht fertig, aber ich möchte Ihnen ein paar echte Zahlen zeigen.
Pipe
Weiß jemand nicht, wie schlecht die Zuweisung der Bandbreite mit einem benutzerdefinierten Router mit Himbeer-Pi funktioniert? Wie, ich habe eine Geschwindigkeit von 3 Mbit / s Internetverbindung, ich habe 10 Benutzer. Kannst du erklären, wie es aufgeteilt wird? die 3Mbps Geschwindigkeit. Vielen Dank. Ich hoffe du verstehst. :)
kirbs
2
Hallo kirbs Bitte stellen Sie keine Frage zu einer anderen Frage. Öffnen Sie stattdessen eine neue Frage mit dem Link Frage stellen oben auf der Seite. Danke.
Vielleicht das? learn.adafruit.com/…
zengr

Antworten:

30

Ich habe mein Modell B als Router mit Traffic-Shaping verwendet und nur den einen Ethernet-Port verwendet, mit dem es geliefert wird. Hier ist ein kurzer Überblick darüber, wie:

  1. Aktivieren Sie die IPv4-Weiterleitung , damit Ihr Pi als Router fungiert und den empfangenen Datenverkehr weiterleitet
  2. Konfigurieren Sie Ihren Pi mit einer statischen Netzwerkkonfiguration, damit er nicht von den unten vorgeschlagenen DHCP-Änderungen beeinflusst wird. Hier sind die Inhalte von my /etc/network/interfacesals Referenz:

    # 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. Ändern Sie nun die DHCP-Einstellungen Ihres Netzwerks so, dass der Standard-Gateway / -Router Ihr Pi ist. Dies bedeutet wahrscheinlich, dass Sie die Einstellungen an Ihrer vorhandenen ADSL-Router-Box ändern müssen. In meinem obigen Beispiel lautet die IP-Adresse meines Pi 192.168.1.1.

Wenn Ihre Geräte das nächste Mal eine Verbindung zum Netzwerk herstellen, wird Ihrem Pi mitgeteilt, dass es das Gateway zum Internet ist, und der gesamte internetgebundene Datenverkehr wird an das Pi gesendet. Ihr Pi leitet den gesamten Datenverkehr an Ihren üblichen Router weiter. Möglicherweise müssen Sie Ihre Geräte trennen und erneut verbinden, damit diese Änderungen wirksam werden.

Jetzt können Sie ein Tool erstellen oder installieren, mit dem Sie Ihre Überwachung durchführen können, z. B. vnstat .

Verkehrsformung

Was die Gestaltung des Verkehrs angeht, ist hier eine weitere Kurzanleitung, in der meine persönliche Variante von Wondershaper zum Einsatz kommt .

Damit dies nützlich ist, müssen Sie wissen, wie schnell Ihre Internetverbindung ist. Normalerweise finden Sie dies auf der Weboberfläche Ihres (Original-) Routers . Andernfalls können Sie mithilfe eines Geschwindigkeitstests eine Schätzung abrufen .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0Gibt den aktuellen Status der Verkehrssteuerung aus. Offensichtlich ist der erwartete Status, dass es keine Formgebung gibt, was bedeutet, dass eine einzige Regel in Kraft ist pfifo_fast:

    • ( eth0ist der Name des verkabelten Netzwerkadapters in Modell B. ifconfigDie Namen der Schnittstellen in Ihrem System finden Sie unter.)
    # 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, wo:

    • 3000ist die Downlink-Geschwindigkeit meiner Internetverbindung in kbit . Also 3Mbit == 3000kbit
    • 370 ist die Uplink-Geschwindigkeit meiner Internetverbindung, wieder in kbit.
  5. sudo ./wondershaper eth0 sollte jetzt viel mehr anzeigen:

    # 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
    

Ihr ausgehender Netzwerkverkehr wird jetzt von Ihrem Pi geprägt, und Ihr eingehender Verkehr wird leicht gedrosselt, um sicherzustellen, dass der Pi und nicht Ihre ursprüngliche Routing-Box die Kontrolle über den Verkehr hat.

Zum Deaktivieren der Formgebung einfach ausführen sudo ./wondershaper eth0 clear. Sie können die Uplink- und Downlink-Raten ändern, ohne sie vorher zu löschen, aber das tut nicht weh.

Update: Sie müssen auch die Übertragung von ICMP-Weiterleitungen deaktivieren , da der gesamte Datenverkehr den Pi durchlaufen muss, damit die Formung stattfinden kann. Es stellt sich heraus, dass der Linux-Kernel klug genug ist, um herauszufinden, dass die Clients in Ihrem Heimnetzwerk direkt mit der ADSL-Box kommunizieren können, anstatt den Datenverkehr über den Pi zu leiten. Dies wird ihnen bei jeder Gelegenheit mitgeteilt. Die Clients senden dann ihren Datenverkehr direkt an Ihre ADSL-Box, und der Pi hat keine Chance, ihn zu formen. Deaktivieren Sie es sofort wie folgt (verloren, wenn Sie das nächste Mal neu starten):

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

Aktualisieren Sie Folgendes, um dies während des Startvorgangs festzulegen: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Vielen Dank an https://unix.stackexchange.com/a/58081/22537 für diesen Tipp)

Möglicherweise interessieren Sie auch meine persönlichen Hinweise zur Konfiguration eines Linux-Gateways: http://www.robmeerman.co.uk/unix/gateway

RobM
quelle
Wie stellen Sie den WLAN-Netzwerknamen und das Kennwort ein, mit denen andere Geräte eine Verbindung herstellen können?
2.
Eine großartige Anleitung. Ich habe jedoch eine Frage zu Ihrem wondershaperVorschlag: Ist das Limit pro Kunde oder insgesamt?
Bob
@fommil: In meinem obigen Leitfaden wird davon ausgegangen, dass Sie immer noch das Modem / den Router / den WiFi-Zugangspunkt verwenden, den Sie von Ihrem ISP erhalten haben, aber dass Sie diesen so konfigurieren, dass alle Clients, die eine Verbindung herstellen, die Meldung "Datenverkehr an den Pi senden" erhalten. Dies geschieht normalerweise, indem Sie die (statische!) IP-Adresse Ihres Pi in die DHCP-Einstellungen Ihrer ISP-Box eingeben. In der Regel in einem Feld mit dem Namen "Gateway", "Standard-Gateway" oder möglicherweise "Standardroute".
RobM
@Bob: Die von Ihnen eingegebenen Zahlen sind die Summe für Ihre Internetverbindung. Das Wondershaper-Skript versucht dann, dies allen Ihren Kunden je nach Bedarf gerecht zu machen . Wenn also nur ein Client das Internet nutzt, sollte er 100% davon erhalten. Wenn ein anderer Client gestartet wird, werden nach einer gewissen "Einschwingzeit" (~ 10 Sekunden) jeweils 50% verbraucht, und so weiter.
RobM
Perfekt. Nur ein Hinweis an @fommil: Keiner meiner Router (und ich nehme an, viele sind gleich) bietet eine einfache Möglichkeit, das über DHCP zugewiesene Gateway festzulegen. Am Ende habe ich DHCP auf dem Router ausgeschaltet und einen DHCP-Server auf dem Pi eingerichtet - es ist ein ziemlich einfacher Vorgang (suchen Sie nach einer Anleitung, wenn Sie möchten).
Bob
10

Wenn Sie ein wenig Netzwerk-Hintergrund haben, ist das erste, was Ihnen einfällt, die Verwendung als Snort-Box. Dann müssen Sie sich keine Sorgen mehr machen, dass Sie nur eine Schnittstelle haben. Sie würden Ihren Switch / Router so einrichten, dass der gesamte Datenverkehr zum Pi weitergeleitet wird, aber auch an das Endgerät weitergeleitet wird. Dies wird als Switchport-Monitor bezeichnet, wird jedoch möglicherweise von Ihrem Gerät nicht unterstützt. Möglicherweise benötigen Sie dazu einen verwalteten Switch . Snort würde dann den Verkehr analysieren und darüber berichten. Weitere Informationen zu Snort finden Sie unter http://www.snort.org/

Das Schöne an dieser Art von Setup ist, dass Ihr Pi abseits der Seite sitzt und alles beobachtet, was durch den Switch läuft, anstatt sich mit den Daten in Einklang zu setzen. Wenn Sie auf diese Weise eine Software-Panne haben, kann der Datenverkehr immer noch fließen und nur nicht überwacht werden. Mit dem, was Sie mit zwei Schnittstellen beschreiben, stürzt Ihr Programm ab, Ihr Netzwerk stürzt ab.

Dadurch wird der pi nicht als Router verwendet, Sie können jedoch den Datenverkehr überwachen und darüber Bericht erstatten, der sich in Ihrem Netzwerk bewegt.

Butters
quelle
7

Ich habe den Raspberry Pi für das Routing verwendet, und es hat gut funktioniert. Wie Sie sagen, benötigen Sie mindestens eine weitere Netzwerkschnittstelle, da der Raspberry Pi nur über einen Ethernet-Port verfügt. Sie können eine weitere Schnittstelle hinzufügen, die an den USB-Anschluss angeschlossen ist. Ich habe ein GSM-Modem und einen WLAN-Stick verwendet.

Dinge zu beachten:

  • Verwenden Sie einen USB-Hub mit eigener Stromversorgung. WLAN- und GSM-Geräte benötigen mehr Strom, als die USB-Anschlüsse des Raspberry Pi liefern können.
  • Wenn Sie Wi-Fi-Geräte kaufen, erwerben Sie eines mit guter Linux-Unterstützung. Sie möchten einen, der im Access Point-Modus funktioniert, und nicht alle Sticks. Überprüfen Sie bei linuxwireless.org .

Hier ist mein Blogbeitrag zum Thema Routing und ein weiterer zum Einrichten eines WLAN-Zugangspunkts . Diese Anleitung hat mir bei der Einrichtung des Routings geholfen. Das Routing-Zeug ist nicht sehr spezifisch für den Raspberry Pi; Alles, was unter Linux im Allgemeinen funktioniert, sollte möglich sein. Die Details hängen ein wenig davon ab, welche Distribution Sie verwenden.

Frepa
quelle
4

Ich benutze den Raspberry Pi seit ungefähr einem Monat ohne Probleme als Router. Ich habe einen tatsächlichen kommerziellen Wi-Fi Access Port, keinen Heim-Wi-Fi-Router, also habe ich diesen verwendet. Ich habe auch einen USB-zu-Ethernet-Konverter, der von der Wii "ausgeliehen" wurde. Das geht an das Heim-LAN und das eingebaute Ethernet des Raspberry Pi geht an das WAN / Internet.

Holen Sie sich eine Kopie von IPFire für den Raspberry Pi. Sie möchten die ARM-Version ohne serielle Konsole und die neueste stabile Version. Klicken Sie auf die Registerkarte ARM. Laden Sie das "Image für die armv5tel-Architektur" herunter.

Booten Sie davon. Schließen Sie einen HDMI-Fernseher und eine Tastatur an. Beantworten Sie die ersten Fragen. Der Rest der Konfiguration kann über einen Browser im Heimnetzwerk vorgenommen werden, sodass Sie danach weder das Fernsehgerät noch die Tastatur benötigen.

Es war nicht zu schwer und wirkte wie ein Champion! Hier sind die formalen Anweisungen: http://wiki.ipfire.org/en/hardware/arm/rpi

Eine letzte Sache. Wenn Sie einen USB-fähigen WLAN-Dongle verwenden, überprüfen Sie das Netzteil Ihres Raspberry Pi. Ein 700-mA-USB-Netzteil reicht möglicherweise aus, um den Raspberry Pi mit Strom zu versorgen, aber es bleibt nicht viel übrig, um das Wi-Fi mit Strom zu versorgen. Verwenden Sie entweder einen USB-Hub mit eigener Stromversorgung oder versorgen Sie den Raspberry Pi mit einem 1 bis 2 A USB-Netzteil.
Viel Glück!

Bruce Kives
quelle
1

(Dieser Anhang folgt meiner vorherigen Antwort , die eine Anleitung zur Konfiguration Ihres Pi als Internet-Gateway Ihres LANs war.)

Ich bin nicht damit zufrieden, meine gesamte Internetnutzung zu überwachen, sondern habe ein Tool geschrieben, das die Internetnutzung jedes Geräts in meinem LAN überwacht. Auf diese Weise kann ich die momentane Nutzung in einem Konsolenfenster anzeigen und Diagramme zur historischen Nutzung erstellen, um zu sehen, was über Nacht passiert ist.


Rhodes , ein Tool zur Überwachung der Echtzeit- und historischen Netzwerknutzung von LAN-Geräten (basierend auf der MAC-Adresse): https://github.com/meermanr/adsl/tree/master/rhodes

Beispiel für die Konsolenausgabe:

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

Die erste Spalte zeigt an, wie viele Geräte übertragen, was normalerweise das Hochladen ins Internet bedeutet. Die Ausnahme bildet der ADSL-Router selbst (home.gateway im obigen Beispiel), der die vom ISP empfangenen Daten an das Gerät sendet, das sie angefordert hat (dh herunterlädt). Natürlich überträgt es auch Uploads ins Internet, aber es verwendet dazu sein ADSL-Modem, das sich nicht im LAN befindet und daher für dieses Tool nicht sichtbar ist.

Die andere Ausnahme wäre der Raspberry Pi ("Flux" oben) selbst, der natürlich alle von ihm verwalteten Daten in beide Richtungen überträgt.

Abgesehen von diesen Ausnahmen beziehen sich die TX- (Sende-) Nummern auf den Upload und die RX- (Empfangs-) Nummern auf den Download. Die dritte Spalte ist die MAC-Adresse des Geräts (ohne die üblichen Trennzeichen ":" oder "-"). In der vierten Spalte wird der für den Menschen lesbare Name des Geräts angezeigt, sofern dieser bekannt ist.

Diagramme werden durch Ausführen generiert ./index.py, das von einem Webserver wie lighttpd(mit index.pyder index-file.namesKonfigurationseinstellung in hinzugefügt) aufgerufen werden soll /etc/lighttpd/lighttpd.conf. Sie können es einfach manuell ausführen, und es werden einige Bilder generiert und HTML in STDOUT gedruckt. Sie möchten das also in eine Datei umleiten, die Sie in einem Browser öffnen können:

./index.py > index.html

Dann öffne index.html in deinem bevorzugten Browser.

Installationsvoraussetzungen (alle können mit installiert werden apt-get install):

  • tcpdump - Befehlszeilen-Tools zum Erfassen und Beschreiben des Netzwerkverkehrs
  • rrdtool - Round Robin Database Tool, zeichnet Zeitreihendaten auf und stellt sie grafisch dar
  • rrdcached - Round Robin Database Caching Daemon, ein Dienst, der den Overhead beim gleichzeitigen Arbeiten mit mehreren RRD-Dateien verringert.
  • pypy-upstream (eine schnelle Implementierung der Programmiersprache Python)

    • Sie können das Standard-Python verwenden, wie Sie es möchten: python rhodes.py( pypyDies ist eine alternative Implementierung der Programmiersprache Python, die die Just-In-Time-Kompilierung (JIT) ausführt, sodass bei langen Skripten weniger CPU-Zyklen erforderlich sind und mehr Arbeitsspeicher erforderlich ist.)

Hinweis zur Verwendung : Für das von diesem Skript verwendete Tool 'tcpdump' sind Root-Berechtigungen erforderlich, um auf unformatierten Netzwerkverkehr zugreifen zu können. Dies wird durch Starten sudo tcpdumpdes Skripts erreicht, sodass Sie möglicherweise aufgefordert werden, Ihr Kennwort einzugeben. Persönlich habe ich eine NOPASSWD-Regel hinzugefügt, /etc/sudoerssodass ich nie dazu aufgefordert werde.

RobM
quelle