Vous utilisez le Raspberry Pi comme routeur?


50

Quelqu'un at-il utilisé leur Raspberry Pi comme périphérique de routage?

Je souhaite principalement l'utiliser pour surveiller mon réseau. Ce serait bien d'avoir une entrée et une sortie pour Ethernet, mais ce n'est pas le cas. Je me demande donc s'il est très efficace de surveiller le réseau avec l'entrée Ethernet. puis en utilisant un dongle USB comme routeur Wi-Fi. Quelqu'un at-il fait quelque chose comme ça? Cela ralentit-il beaucoup Internet?


3
Cela dépend de la rapidité de votre connexion Internet. Le mien est 100Mb, donc je suis sûr qu'il ralentirait;)
John La Rooy

3
J'ai une connexion Internet à 30 Mbits / s et, à l'heure actuelle, avec un trafic de 5 Mbits / s, mon inline fraspberry pi avec snort consomme environ 50 à 95% de CPU et 85% de mémoire. Ma configuration n'est pas encore réglée, mais je veux vous montrer quelques chiffres réels.
Pipe

est-ce que quelqu'un ne sait pas comment l'allocation de largeur de bande fonctionne avec un routeur personnalisé utilisant Raspberry Pi? comme, j'ai une vitesse de 3Mbps connexion internet, j'ai 10 utilisateurs. pouvez-vous expliquer comment cela va être divisé? la vitesse de 3Mbps. Merci. J'espère que tu as compris. :)
kirbs

2
Bonjour Kirbs. Veuillez vous abstenir de poser une question sur une autre question. Au lieu de cela, ouvrez une nouvelle question avec le lien Poser une question en haut de la page. Je vous remercie.

Peut être ça? learn.adafruit.com/…
zengr

Réponses:


30

J'utilise mon modèle B en tant que routeur avec gestion du trafic, en utilisant uniquement le port Ethernet fourni. Voici un rapide et sale comment:

  1. Activez le transfert IPv4 pour que votre Pi agisse comme un routeur en transférant le trafic reçu
  2. Configurez votre Pi avec une configuration réseau statique de sorte qu'il ne soit pas influencé par les modifications DHCP suggérées ci-dessous. Voici le contenu de mon /etc/network/interfacescomme référence:

    # 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. Modifiez maintenant les paramètres DHCP de votre réseau afin que la passerelle / routeur par défaut soit votre Pi. Cela signifie probablement que vous devez modifier les paramètres de votre boîte de routeur ADSL existante. Dans mon exemple ci-dessus, l'adresse IP de mon Pi est 192.168.1.1.

Lorsque vos appareils se reconnecteront ensuite au réseau, ils se verront dire que votre Pi est leur passerelle vers Internet et que tout le trafic lié à Internet leur sera envoyé. Votre Pi va à son tour relayer tout ce trafic vers votre routeur habituel. Vous devrez peut-être déconnecter puis reconnecter vos appareils pour que ces modifications prennent effet.

Vous pouvez maintenant créer ou installer un outil pour effectuer votre surveillance, tel que vnstat .

Mise en forme du trafic

En ce qui concerne le profilage du trafic, voici un autre guide rapide qui utilisera ma propre variante personnelle de WonderShaper .

Pour que cela soit utile, vous devez connaître la rapidité de votre connexion Internet. Vous pouvez généralement le trouver à partir de l'interface Web de votre routeur (d'origine), mais à défaut, vous pouvez obtenir une estimation à l'aide d'un test de vitesse .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0affichera l’état actuel de la gestion du trafic. Évidemment, le statut attendu est qu'il n'y a pas de mise en forme, ce qui signifie qu'il n'y a qu'une seule règle en vigueur, appelée pfifo_fast:

    • ( eth0correspond au nom de la carte réseau câblée sur un modèle B. Voir ifconfigles noms des interfaces sur votre système)
    # 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, où:

    • 3000est la vitesse de ma liaison internet en kbit . Donc 3Mbit == 3000kbit
    • 370 est la vitesse de la liaison montante de ma connexion Internet, en kbit encore.
  5. sudo ./wondershaper eth0 devrait maintenant montrer beaucoup plus de sortie:

    # 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
    

Votre trafic réseau est en train de façonner votre trafic réseau sortant et votre trafic entrant est légèrement réduit afin de garantir que le Pi, et non votre zone de routage d'origine, contrôle le trafic.

Pour désactiver la mise en forme, lancez simplement sudo ./wondershaper eth0 clear. Vous pouvez modifier les taux de liaison montante et de liaison descendante sans compensation préalable, mais cela ne fait pas de mal.

Mise à jour: vous devez également désactiver la transmission des redirections ICMP , car tout le trafic doit traverser le Pi pour que la mise en forme se produise. Il s'avère que le noyau Linux est suffisamment intelligent pour comprendre que les clients de votre réseau domestique pourraient communiquer directement avec le boîtier ADSL, plutôt que de faire rebondir le trafic via le Pi, et le leur dit à chaque occasion. Les clients envoient ensuite leur trafic directement à votre boîte ADSL, et le Pi n’a aucune chance de le façonner. Désactivez-le à la volée comme suit (perdu au prochain redémarrage):

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

Mettez à jour les éléments suivants pour définir cela au démarrage: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Merci à https://unix.stackexchange.com/a/58081/22537 pour cette astuce)

Vous pouvez également être intéressé par mes notes personnelles sur la configuration d’une passerelle Linux: http://www.robmeerman.co.uk/unix/gateway


comment définir le nom du réseau wifi et le mot de passe auxquels les autres appareils peuvent se connecter?
Premier

Un excellent guide. J'ai cependant une question à propos de votre wondershapersuggestion: la limite est-elle par client ou globalement?
Bob le

@fommil: Mon guide ci-dessus suppose que vous utilisez toujours le modem / routeur / point d'accès WiFi que votre FAI vous a fourni, mais que vous le configurez de manière à ce que tous les clients qui se connectent reçoivent le message "Envoyer le trafic vers le Pi". Cela se fait généralement en entrant l'adresse IP de votre Pi (statique!) Dans les paramètres DHCP de votre boîte ISP. Généralement, dans un champ appelé "Passerelle", "Passerelle par défaut" ou peut-être "Route par défaut".
RobM

@Bob: Les chiffres que vous entrez sont le total de votre lien internet. Le script miracle que tente de partager équitablement ceci avec tous vos clients en fonction de la demande . Donc, si un seul client utilise Internet, il devrait en obtenir 100%. Si un autre client démarre, après un peu de "temps d'établissement" (~ 10 secondes), il utilisera 50% chacun, et ainsi de suite.
RobM

Parfait. Juste une remarque pour @fommil, aucun de mes routeurs (et je suppose que beaucoup d’autres sont identiques) ne fournit un moyen simple de configurer la passerelle attribuée via DHCP. J'ai fini par désactiver DHCP sur le routeur et configurer un serveur DHCP sur le Pi - c'est un processus assez simple (recherchez un guide si vous le souhaitez).
Bob

10

Avec un peu d’arrière-plan de réseau, la première chose qui me vient à l’esprit est de l’utiliser comme boîte Snort, sans avoir à vous soucier de la présence d’une seule interface. Vous devez configurer votre commutateur / routeur pour transférer tout le trafic vers le Pi, mais également pour le transférer sur le périphérique final. Cela s'appelle un moniteur Switchport, mais votre appareil peut ne pas le prendre en charge. Vous aurez peut-être besoin d'un commutateur géré pour le faire. Snort analyserait alors le trafic et en rendrait compte. Plus d'informations sur Snort http://www.snort.org/

La bonne chose à propos de ce type de configuration est que votre Pi est assis sur le côté en train de regarder tout ce qui se passe via le commutateur, plutôt que de rester en ligne avec les données. Si vous avez un problème logiciel de cette façon, le trafic peut toujours circuler, mais ne pas être surveillé. Avec ce que vous décrivez avec deux interfaces, votre programme se bloque, votre réseau se bloque.

Cela n'utilise pas le pi en tant que routeur, mais vous permet de surveiller et de générer des rapports sur le trafic en transit sur votre réseau.


7

J'ai utilisé le Raspberry Pi pour le routage, et cela a bien fonctionné. Comme vous le dites, vous avez besoin d'au moins une interface réseau supplémentaire, car le Raspberry Pi ne dispose que d'un seul port Ethernet. Vous pouvez ajouter une autre interface connectée au port USB. J'ai utilisé un modem GSM et une clé Wi-Fi.

Choses à noter:

  • Utilisez un concentrateur USB alimenté. Les appareils Wi-Fi et GSM exigent plus d'énergie que les ports USB du Raspberry Pi.
  • Si vous achetez des périphériques Wi-Fi, procurez-vous-en un avec un bon support Linux. Vous en voulez un qui fonctionne en mode point d'accès, ce que ne font pas tous les bâtons. Vérifiez sur linuxwireless.org .

Voici mon billet de blog sur le routage et un autre sur la configuration d'un point d'accès Wi-Fi . Ce guide m'a aidé à configurer le routage. Le routage n’est pas très spécifique au Raspberry Pi; tout ce qui fonctionne sous Linux en général devrait être possible. Les détails dépendent un peu de la distribution que vous utilisez.


4

J'utilise le Raspberry Pi comme routeur depuis environ un mois maintenant, sans aucun problème. J'ai un véritable port d'accès Wi-Fi commercial, pas un routeur Wi-Fi domestique, donc je l'ai utilisé. J'ai également un convertisseur USB-à-Ethernet qui a été "emprunté" à la Wii. Cela va au réseau local domestique, et Ethernet intégré du Raspberry Pi va au WAN / Internet.

Obtenez une copie de IPFire pour le Raspberry Pi. Vous voulez la version ARM, sans console série et la dernière version stable. Cliquez sur l'onglet ARM. Téléchargez le "Image pour l'architecture armv5tel".

Commencez. Branchez un téléviseur HDMI et un clavier. Répondez aux premières questions. Le reste de la configuration peut être effectué à partir d'un navigateur sur le réseau domestique. Vous n'aurez plus besoin du téléviseur ni du clavier par la suite.

Ce n'était pas trop difficile et fonctionnait comme un champion! Voici les instructions formelles: http://wiki.ipfire.org/en/hardware/arm/rpi

Une dernière chose. Si vous envisagez d’utiliser un dongle Wi-Fi alimenté par USB, vérifiez l’alimentation de votre Raspberry Pi. Une alimentation USB 700 mA peut suffire à alimenter le Raspberry Pi, mais cela ne laisse pas grand chose d’alimenter le Wi-Fi. Utilisez un concentrateur USB alimenté ou alimentez le Raspberry Pi avec une alimentation USB de 1 à 2 A.
Bonne chance!


1

(Cet addendum fait suite à ma réponse précédente , qui était un guide sur la configuration de votre Pi en tant que passerelle Internet de votre réseau local.)

Non content de surveiller mon utilisation globale d’ Internet, j’ai écrit un outil qui surveille l’utilisation d’Internet de chaque périphérique de mon réseau local. Cela me permet de voir l’utilisation instantanée dans une fenêtre de console et de générer des graphiques d’utilisation historique afin de voir ce qui s’est passé la nuit.


Rhodes , un outil de surveillance de l'utilisation réseau en temps réel et historique des périphériques LAN (basé sur l'adresse MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Exemple de sortie de la 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 première colonne indique la quantité d'appareils en cours de transmission, ce qui signifie généralement un téléchargement sur Internet. L'exception à cette règle est le routeur ADSL lui-même (home.gateway dans l'exemple ci-dessus), qui transmet les données reçues du fournisseur de services Internet (ISP) à l'appareil qui les a demandées (c'est-à-dire les téléchargements). Bien sûr, il transmet également les téléchargements vers Internet, mais il le fait à l'aide de son modem ADSL, qui n'est pas sur le réseau local et donc invisible pour cet outil.

L'autre exception serait le Raspberry Pi ("Flux" ci-dessus) lui-même, qui transmet bien sûr toutes les données qu'il gère, dans les deux sens.

Mais à part ces exceptions, les numéros TX (transmission) font référence au téléchargement et les numéros RX (réception) à télécharger. La troisième colonne est l'adresse MAC du périphérique (sans les séparateurs habituels ":" ou "-"). La quatrième colonne indique le nom du périphérique, s'il est connu, du nom lisible par l'homme.

Les graphiques sont générés en cours d'exécution ./index.py, ce qui est appelé à être appelé à partir d'un serveur Web comme lighttpd(avec index.pyajouté au index-file.namesparamètre de configuration dans /etc/lighttpd/lighttpd.conf). Vous pouvez simplement l'exécuter manuellement, il générera des images et imprimera du HTML sur STDOUT. Donc, vous voudriez rediriger cela vers un fichier que vous pourrez ouvrir dans un navigateur:

./index.py > index.html

Ensuite, ouvrez index.html dans votre navigateur préféré.

Conditions d'installation requises (toutes peuvent être installées avec apt-get install):

  • tcpdump - Outils de ligne de commande pour capturer et décrire le trafic réseau
  • rrdtool - Outil de base de données Round Robin, enregistrements et graphiques de données chronologiques
  • rrdcached - Démon de mise en cache Caching de base de données Round Robin, service qui réduit les frais généraux lorsque vous travaillez simultanément avec plusieurs fichiers RRD.
  • pypy-upstream (une implémentation rapide du langage de programmation Python)

    • Vous pouvez utiliser le stock Python que vous aimez: python rhodes.py( pypyest une implémentation alternative du langage de programmation Python qui effectue la compilation Just-In-Time (JIT), afin que les scripts à exécution longue utilisent moins de cycles de processeur au prix de plus de mémoire)

Note d'utilisation : L'outil 'tcpdump' utilisé par ce script nécessite des privilèges root pour accéder au trafic réseau brut. Pour ce sudo tcpdumpfaire, lancez-le au démarrage du script. Il vous sera donc peut-être demandé de saisir votre mot de passe. Personnellement, j'ai ajouté une règle NOPASSWD afin /etc/sudoersque je ne sois jamais invité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.