Construire votre propre Routeur avec un Raspberry Pi

Lorsque vous essayez de comprendre pourquoi Internet est lent, il peut être difficile de savoir exactement quel périphérique du réseau consomme toute la bande passante. De nombreuses solutions à ce problème nécessitent l’installation d’un logiciel sur chaque appareil à surveiller. Au lieu de cela, j’ai essayé de créer un moniteur réseau Raspberry Pi personnalisé.

Construire votre propre routeur

Un Raspberry Pi 4 est un routeur tout à fait capable dans les bonnes circonstances.

Mais d’abord, soyons clairs sur les termes.

Un commutateur mélange les données sur le réseau. Un routeur aide à diriger ce trafic.

Construire un « routeur », dans ce contexte, signifie que nous allons implémenter DHCP, DNS et un pare-feu.

Si vous ne savez pas ce que cela signifie, ne vous inquiétez pas. Pour l’instant, supposons simplement que vous ayez un Raspberry Pi 4 (voir la liste des pièces en bas). Le bit ”version 4″ est important car il dispose d’une carte réseau nettement meilleure (eth0) que les modèles précédents (Gigabit). Cela pointe la plus grande limitation de l’utilisation du RPi en tant que routeur: la bande passante est plafonnée à 1000 Mbps.

La bande passante et le débit sont souvent confondus.

La « largeur de bande” est la quantité maximale de données qui peut circuler dans le système (dans ce cas, de la maison à Internet). Le débit mesure la quantité de bande passante utilisée à tout moment.

Incidemment, ce guide devrait fonctionner pour tout système linux basé sur Debian que vous souhaitez transformer en routeur. Vous pouvez utiliser un meilleur matériel pour créer une solution encore plus efficace. J’ai choisi un Pi4 car notre vitesse Internet n’est de toute façon que de 30Mbps (DSL). Comme je l’ai décrit dans le post de surveillance du réseau, ce Raspberry Pi 4 s’est avéré beaucoup plus que suffisant pour ce cas. Voici les produits exacts que j’ai utilisés.

Si vous êtes nouveau sur Raspberry Pi, les CanaKits populaires sont un excellent point de départ. Je préfère acheter le Raspberry Pi 4, l’adaptateur secteur, les cartes micro SD et les dissipateurs séparément. Non seulement c’est moins cher, mais cela réduit les déchets électroniques.

Ce qui suit sont des liens d’affiliation vers d’autres parties que j’ai utilisées dans ce projet. Je ne fais jamais de lien vers un produit que je n’ai pas personnellement utilisé.

Avez-vous une connexion DSL/PPP ?

Découvrez les bizarreries spécifiques de l’utilisation d’un Raspberry Pi comme routeur DSL.

Un deuxième port ethernet est requis (voir la section suivante). J’ai utilisé le connecteur USB 3.0 Gigabit, ci-dessus.

Connexion à Internet

Je me référerai aux interfaces réseau comme wan et lan.

Si vous voulez que les choses soient copier-coller, vous pouvez renommer vos interfaces réseau pour qu’elles correspondent. Par exemple, lan est le nom de la plus rapide des deux interfaces (l’interface réseau embarquée, eth0, dans mon cas). Pour créer le nom statique, tapez d’abord ifconfig obtenez l’adresse MAC de l’interface (après ether). Si vous avez trouvé ether aa:bb:cc:dd:ee:ff, créez ou modifiez /etc/udev/rules.d/10-network.rules pour inclure:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan"

and puis répétez le processus pour l’interface wan.

Le réseau interne (LAN) doit gérer plus de débit que le WAN.

C’est pourquoi l’interface plus rapide est choisie pour le réseau local.

À ce stade, vous pouvez directement connecter l’interface wan au modem fourni par votre FAI. Vous voudrez peut-être mettre le modem en mode pont transparent, si possible, car le Pi prend en charge la fonctionnalité de routage (plus à ce sujet).

Pendant que vous êtes ici, prenez un moment pour vous assurer que le WAN est configuré correctement pour obtenir un bail DHCP. Si vous utilisez une méthode autre que le DHCP standard (par exemple, PPOE), vous devrez modifier cette étape en fonction de vos besoins. Mais dans la plupart des cas, il suffit de créer un fichier à /etc/network/interfaces.d/wan avec le contenu suivant:

auto wanallow-hotplug waniface wan inet dhcp

Serveur DHCP

Avec le Pi en ligne, il est temps de laisser les périphériques se connecter au Pi.

Dans cet exemple, le routeur Raspberry Pi aura une adresse IP de 192.168.0.1.

Soyez prudent si vous changez cette adresse IP!

Cet exemple utilise le sous-réseau 192.168.0.0/24. Si vous décidez de changer cela, assurez-vous de choisir parmi la gamme de sous-réseaux privés valides.

Cela signifie d’abord créer ou modifier /etc/network/interfaces.d/lan:

allow-hotplug laniface lan inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1

Maintenant, l’interface LAN aura une adresse IP statique et se traitera comme le routeur. Il est maintenant temps de le rendre capable d’attribuer des adresses IP à d’autres appareils du réseau. L’exécution d’un serveur DHCP permettra donc à de nombreux ordinateurs de se connecter au Pi.

Tout d’abord, désactivez dhcpcd et installez isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

Puis modifiez /etc/default/isc-dhcp-server, en remplaçant INTERFACESv4:

INTERFACESv4="lan"

Nous avons indiqué au serveur DHCP quelle interface contient le réseau local. Maintenant, il doit connaître les paramètres du réseau domestique. Pour continuer avec l’exemple, nous laisserons le serveur attribuer des adresses IP dans la plage allant de 192.168.0.100192.168.0.199 (plus sur pourquoi dans un instant). Modifiez /etc/dhcp/dhcpd.conf pour changer d’abord le nom de domaine et les serveurs de noms de domaine :

option domain-name "router.local";option domain-name-servers 8.8.8.8, 1.1.1.1;

Le suffixe .local est une convention pour un réseau local, mais vous pouvez remplacer le router nom. Les serveurs de noms de domaine seront bientôt modifiés, mais sont pointés vers Google pour l’instant.

Ajoutez également ce qui suit :

authoritative;subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.199; option routers 192.168.0.1; option subnet-mask 255.255.255.0;}

Cela indique au serveur DHCP qu’il peut attribuer des adresses IP aux périphériques qui s’y connectent dans la plage donnée. La raison de la plage relativement petite est que nous pouvons attribuer des adresses IP statiques en dehors de cette plage. Par exemple, vous pouvez prendre la même adresse MAC pour le lan ci-dessus et ajouter la section suivante :

host router { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 192.168.0.1;}

L’ajout de l’adresse IP statique pour le routeur signifie également que le serveur DHCP ne peut jamais être confus et attribuer accidentellement une adresse IP différente. En général, le codage des adresses IP dans le serveur DHCP centralise également l’autorité (plutôt que de coder des adresses IP statiques sur des périphériques spécifiques, ce qui est beaucoup plus fragile).

Si vous redémarrez le Raspberry Pi maintenant et connectez un ordinateur au port lan, vous devriez trouver une adresse IP dans la plage appropriée. À l’aide de Mac OSX, j’ai ouvert le volet Préférences réseau, puis l’onglet Matériel pour trouver l’adresse MAC de l’adaptateur USB-C vers Ethernet de mon ordinateur portable. Ensuite, j’ai attribué une adresse IP statique (comme ci-dessus) à cette adresse et redémarré le serveur DHCP:

sudo systemctl restart isc-dhcp-server
connectez-vous au routeur raspberry pi
L’adresse MAC provient de l’onglet Matériel. En appuyant sur le bouton ”Renouveler le bail DHCP », vous demanderez au serveur DHCP une nouvelle adresse IP, ce qui actualisera efficacement la connexion.

Même si l’adresse fixe est en dehors de la plage ci-dessus, ce type d’affectation IP statique fonctionnera avec n’importe quel périphérique. J’aime donner des adresses IP statiques à tous mes appareils connus et fiables qui sont en dehors de la portée publique. Ceci fait ce qui suit:

  • Aide à identifier les périphériques connus.
  • Permet d’appliquer des règles de sécurité pour les adresses IP connues.
  • Active les serveurs (c’est-à-dire la lecture de la température via un capteur Arduino bon marché).

Si, pour une raison quelconque, un ordinateur ne peut jamais se connecter au réseau domestique, l’exécution de votre propre serveur DHCP facilite le débogage. L’exécution de journalctl -xe | grep dhcpd montre toutes les tentatives de connexion des périphériques au réseau domestique :

May 03 15:50:44 router dhcpd: DHCPREQUEST for 192.168.0.106 from xx:xx:xx:xx:xx via eth0May 03 15:50:44 router dhcpd: DHCPACK on 192.168.0.106 to xx:xx:xx:xx:xx via eth0

Et jeter un coup d’œil à /var/lib/dhcp/dhcpd.leases révèle quels périphériques se sont connectés dernièrement.

Connexion d’appareils WiFi

Pour cela, vous aurez besoin d’un routeur ou d’un point d’accès WiFi.

L’approche typique consiste à utiliser le WiFi embarqué. Cela correspond principalement aux étapes ci-dessus, sauf en utilisant le périphérique wlan0 sur le Raspberry Pi pour l’interface lan et en configurant hostapd. Cependant, cela n’est pas recommandé dans le contexte de ce post. Laisser le Raspberry Pi servir de passage entre deux interfaces Ethernet est une approche plus simple et plus rapide.

Au lieu de cela, connectez simplement un routeur WiFi au port lan du Raspberry Pi, puis mettez le routeur en mode Point d’accès (ou pont). Maintenant, le routeur ne se souciera pas si les clients se connectent via Ethernet ou WiFi.

Je suis un grand fan des routeurs Orbi — non seulement ils sont extrêmement rapides, mais vous pouvez brancher le port « internet” de la station de base sur le Raspberry Pi et avoir une douzaine de connexions filaires à votre disposition autour de la maison:

Transfert de trafic

À ce stade

  • Le Raspberry Pi peut parler à Internet (WAN).
  • Les périphériques du réseau local peuvent se parler.

but mais il n’y a pas de communication entre les deux.

Entrez firewalld:

sudo apt install firewalld

Firewalld est la solution la plus simple que j’ai trouvée jusqu’à présent.

Les tables IP et les pare-feu peuvent être une douleur.

Au minimum, vous aurez besoin d’une zone domestique et publique, puis de masquer le trafic entre les deux. Cela indique simplement au pare-feu que l’interface lan est pour la maison et que les interfaces wan / ppp0 sont pour le public.

sudo firewall-cmd --zone=home --add-interface=lansudo firewall-cmd --zone=public --add-interface=ppp0sudo firewall-cmd --zone=public --add-interface=wansudo firewall-cmd --zone=public --add-masqueradesudo firewall-cmd --zone=home --add-service=dnssudo firewall-cmd --zone=home --add-service=dhcp

À ce stade, les ordinateurs connectés au réseau local devraient pouvoir accéder à Internet. Vous pouvez simplement exécuter sudo firewall-cmd --runtime-to-permanent maintenant pour tout enregistrer, mais il peut y avoir quelques étapes plus utiles (ci-dessous). Si à tout moment le trafic Internet (ou autre) ne fonctionne pas à partir du réseau, exécutez journalctl -xe et recherchez des lignes comme celle-ci :

FINAL_REJECT: IN=ppp0 OUT= MAC= SRC=77.247.109.40 DST=...

Dans ce cas, la règle fonctionne comme prévu. Quelqu’un d’une adresse IP inconnue a tenté de contacter mon réseau domestique via l’interface ppp0 (c.-à-d., de l’internet). Dans d’autres cas, vous devrez peut-être ouvrir le pare-feu pour autoriser certains trafics.

Firewalld est plus facile lorsque vous utilisez des règles basées sur des zones. Vous aurez besoin d’au moins deux zones, que j’ai appelées home et public au lieu de lan et wan (pour correspondre aux conventions de firewalld). J’ai également une troisième zone de confiance (facultative) dans ma configuration pour le sous-réseau kubernetes / docker. Ainsi, lorsque je tape firewall-cmd --get-active-zones, je vois:

home interfaces: lan lopublic interfaces: wan ppp0trusted interfaces: docker0 cni0 sources: 10.244.0.0/24 10.202.0.0/24 10.96.0.0/24

Les définitions des zones sont contenues dans des fichiers XML situés à /etc/firewalld/zones/:

<?xml version="1.0" encoding="utf-8"?><zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="wan"/> <interface name="ppp0"/> <service name="ssh"/> <service name="http"/> <service name="https"/> <masquerade/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Home</short> <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="lan"/> <interface name="lo"/> <service name="ssh"/> <service name="mdns"/> <service name="samba-client"/> <service name="dhcpv6-client"/> <service name="dhcp"/> <service name="dns"/> <service name="http"/> <service name="https"/> <port port="5000" protocol="tcp"/> <port port="3000" protocol="tcp"/> <port port="9999" protocol="tcp"/> <port port="10250" protocol="tcp"/> <port port="10250" protocol="udp"/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Trusted</short> <description>All network connections are accepted.</description> <interface name="docker0"/> <interface name="cni0"/> <source address="10.244.0.0/24"/> <source address="10.202.0.0/24"/> <source address="10.96.0.0/24"/> <service name="dns"/> <service name="dhcp"/> <service name="dhcpv6-client"/> <service name="https"/> <service name="http"/></zone>

Le trafic est classé en zones en fonction de l’interface ou de la source, telles que :

  • sudo firewall-cmd --zone=public --add-interface=ppp0
  • sudo firewall-cmd --zone=trusted --add-source=10.202.0.0/24

Et une zone peut recevoir du trafic vers un service ou un port :

  • sudo firewall-cmd --zone=public --add-service=http
  • sudo firewall-cmd --zone=home --add-port=10250/tcp

Notez que ces changements sont temporaires. Cela permet des tests sûrs. Pour les rendre permanents, exécutez sudo firewall-cmd --runtime-to-permanent. S’il n’y a pas de Si vous avez besoin de plus d’aide avec firewalld, consultez cet article.

Serveur DNS &Réécrit

Un serveur DNS peut rendre ce petit routeur encore meilleur.

Le travail du serveur DNS consiste à répondre avec une adresse IP pour un nom de domaine donné. Par exemple, il sait à quelle adresse IP votre ordinateur doit se connecter pour atteindre google.com . Beaucoup de gens aiment gérer les leurs pour des raisons de sécurité et de confidentialité.

Il existe des bloqueurs de publicités, par exemple, qui fonctionnent comme des serveurs DNS. En installant Pi Hole ou AdGuard Home, vous pouvez empêcher les ordinateurs du réseau de localiser les domaines publicitaires / spam / malwares. Ces deux outils prennent également en charge les réécritures DNS, de sorte que vous pouvez modifier « l’emplacement” de n’importe quel site.

Une fois que vous avez installé l’un des deux, modifiez simplement /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

Maintenant, tous les périphériques qui se connectent au réseau seront invités à utiliser ce serveur DNS.

Pourquoi les réécritures sont-elles si utiles ? Consultez le post suivant sur la création d’un serveur domestique. Les réécritures permettent d’utiliser la même URL en interne et en externe, permettant HTTPS n’importe où. Par exemple, en utilisant AdGuard Home pour réécrire *.snowy-cabin.com vers 192.168.0.100, tout trafic provenant du réseau domestique vers house.snowy-cabin.com ne quittera jamais le réseau domestique. Cela signifie que la même URL https:// peut être utilisée pour atteindre le proxy inverse, où la terminaison SSL se produit, assurant une communication sécurisée pour le trafic public et privé.

id du message introuvable: #8977

Cheat-sheet

Pour résumer, voici quelques concepts clés pour les serveurs domestiques :

  • IPS statiques: modifiez /etc/dhcp/dhcpd.conf pour ajouter un nouvel hôte, puis redémarrez isc-dhcp-server et renouvelez le bail sur le client.
  • Redirection de port : exécutez sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • Noms de domaine personnalisés : utilisez le serveur DNS pour faire fonctionner votre nom de domaine unique en interne et en externe.
  • Surveillance du trafic réseau : instructions.

De la sécurité à la vitesse, il existe de nombreuses raisons de comprendre votre connexion réseau domestique. Apprenez les bases du réseau et construisez votre propre routeur pour accélérer Internet à la maison.

Tagged Projets asDIY, projets Raspberry Pi
Écrit par

(zane)/Technically Wizardry

Ce site a commencé comme un lieu de documentation de projets de bricolage. Il est devenu une collection de projets IOT, de tutoriels techniques et de guides pratiques. En savoir plus sur ce site…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.