Créer un routeur Wifi avec un Raspberry Pi et RaspAP
Sommaire
I. Présentation
Il existe de nombreux routeurs Wifi sur le marché, fournissant un niveau de service plus ou moins élevé et sur lequel vous avez plus ou moins la main.
Les "singleboard computers" (comprendre les ordinateurs à carte unique) dont le Raspberry Pi en tête, offre une myriade de possibilités de réalisations aussi bien pour des applications IoT et domotique, que pour des utilisations réseau.
Dans ce tutoriel, je vais vous montrer comment réaliser son propre routeur Wifi avec un Raspberry Pi et RaspAP, et le configurer pour avoir un résultat se rapprochant des meilleurs matériels disponibles.
Parmi les fonctionnalités offertes par RaspAP, nous pouvons retrouver :
- Mode Pont (pour "étendre" votre réseau filaire)
- Intégration OpenVPN et Wireguard
- Bloqueur de pubs intégré
- Utilisation du trafic en temps réel
- Liste des clients connectés
- Historique d'usage de la bande passante sur un mois
II. Prérequis
Pour réaliser ce tutoriel, j'ai besoin de :
- Un RaspBerry Pi modèle 3 ou plus récent (avec wifi intégré)
- Un PC
- Un câble réseau
- Une carte micro SD de 8 Go minimum (16 Go recommandé)
- Le cas échéant un lecteur de carte micro SD
Vous aurez également besoin de RaspberryPi OS (anciennement Raspbian). Par chance, la fondation RaspberryPi qui est à l'origine de ce portage de Debian, met à disposition un logiciel sur son site permettant de faciliter la création de la carte SD, ce programme est disponible sur leur site officiel.
III. Création de la carte SD du Raspberry Pi
Téléchargez le logiciel cité plus haut, installez-le et lancez-le.
Vous arriverez sur une interface minimaliste laissant apparaître les trois étapes de la création de la carte SD :
On commence donc par le premier : le choix de l'OS. Pour ma part, comme j’aime avoir le contrôle de ce que j’installe, je suis parti pour la version minimale (Lite), mais c’est à vous de juger, ça fonctionnera très bien avec une autre, il n'y a aucun problème.
Une fois la version de l'OS choisie, il nous reste à sélectionner notre carte micro SD dans la section stockage.
Note : l'opération effacera tout le contenu de la carte, aussi, veillez bien à sauvegarder vos données si besoin et surtout à sélectionner le bon lecteur avant de lancer l'écriture !
Une fois l'opération terminée, un pop-up vous avertira de la possibilité de retirer la carte SD du lecteur :
Note : pour les personnes réalisant ce tuto sous Windows, vous risquez d'avoir plusieurs fenêtres de l'Explorer qui s'ouvrent automatiquement une fois l'opération terminée. Certaines d'entre elles afficheront un message d'erreur et inviteront à formater la carte. Bien sûr, il ne faudra en aucun cas le faire, fermez simplement ces fenêtres sans en tenir compte.
La seule partition lisible sous Windows sera la partition "boot". Ça tombe bien puisque c'est justement dans celle-ci qu'il faudra rajouter un fichier nommé "ssh" sans aucune extension et vide directement à la racine. Ceci afin d'activer automatiquement le SSH au démarrage du Raspberry.
Dans cette même partition, un autre fichier va nous intéresser. Il s'agit de cmdline.txt qui indique plusieurs instructions pour configurer certains paramètres du noyau Linux. Comme son nom l'indique, il ne contient qu'une ligne. Ce fichier est intéressant pour nous afin de donner directement une adresse IP au Raspberry; cela nous permettra d'éviter d'avoir à le chercher sur le réseau pour s'y connecter ou de devoir brancher un écran dessus.
Pour assigner une adresse IP, il suffit de rajouter à la fin de la ligne :
ip=192.168.1.85
Enregistrez le fichier puis retirez la carte SD de l'ordinateur afin de l'insérer dans le Raspberry Pi.
IV. Connexion et installation de RaspAP
Une fois le Raspberry démarré, nous allons déjà vérifier que l'adresse IP préconfigurée a bien été appliquée. pour cela, un petit "ping" suffit à nous rassurer :
ping 192.168.1.85 Envoi d’une requête 'Ping' 192.168.1.85 avec 32 octets de données : Réponse de 192.168.1.85 : octets=32 temps=5 ms TTL=64 Réponse de 192.168.1.85 : octets=32 temps=3 ms TTL=64 Réponse de 192.168.1.85 : octets=32 temps=4 ms TTL=64 Réponse de 192.168.1.85 : octets=32 temps=4 ms TTL=64
On peut donc se connecter en SSH avec l'utilisateur par défaut "pi" et le mot de passe "raspberry":
ssh [email protected]
Une fois connecté, la première chose à faire est bien entendu de changer le mot de passe par défaut :
pi@raspberrypi:~ $ passwd Changing password for pi. Current password: New password: Retype new password: passwd: password updated successfully
Si vous êtes orienté réseau, vous avez peut-être remarqué que j'ai uniquement spécifié une adresse IP, sans masque de sous réseau ni passerelle. En réalité, la modification du fichier cmdline.txt ne configure pas une adresse IP, mais en assigne une secondaire, ce que nous pouvons vérifier avec la commande ip a :
On voit bien l'adresse précédemment citée, mais on voit aussi que le service DHCP a récupéré une adresse IP depuis ma box, ainsi que les autres paramètres IP.
Pour que ce soit plus propre, on va assigner directement depuis le service dhcpd qui est le client dhcp. Pour cela, il faut modifier le fichier dhcpcd.conf :
sudo nano /etc/dhcpcd.conf
Puis on ajoute les lignes suivantes :
#interface filaire interface eth0 static ip_address=192.168.1.85/24 static routers=192.168.1.1 static domain_name_servers=9.9.9.9 1.1.1.1
- On déclare d'abord le nom de l'interface : interface eth0
- On assigne l'adresse IP souhaitée en précisant le masque : 192.168.1.85/24
- On déclare le routeur : 192.168.1.1
- Et enfin, les serveurs DNS que l'on souhaite utiliser. Pour ma part, j'ai choisi ceux de CloudFlare et Quad9, mais vous pouvez faire comme bon vous semble.
Après un redémarrage, on retape la commande ip a juste pour vérifier qu'on est propre :
Parfait, on peut passer à la suite.
On réalise tout d'abord une mise à jour des paquets :
sudo apt-get update && sudo apt-get upgrade
Le processus peut être long en fonction du nombre de mises à jour et de votre connexion.
Une fois l'opération terminée, il ne nous reste plus qu'à installer RaspAP. Ici, plusieurs techniques sont disponibles : copie du dépôt GitHub, à partir des sources ou avec un script. Par souci de facilité, je choisis la méthode du script. Celui-ci est disponible à l'adresse suivante : https://install.raspap.com
Pour ceux qui souhaitent accéder directement au dépôt GitHub, voici le lien
Nous allons donc télécharger le script et le mettre dans un fichier que nous nommerons "raspap.sh" :
wget https://install.raspap.com -O raspap.sh
L'option -O permet de spécifier un fichier en sortie.
Pour pouvoir exécuter ce script, il faut d'abord le rendre... exécutable! Pour cela, ajouter le droit +x, "x" correspondant à "exécution" :
chmod +x raspap.sh
Puis, exécuter le script :
sudo ./raspap.sh
Note : n'oubliez pas le "sudo" ici, car le script doit faire des modifications sur des services système ou des permissions. Sans celui-ci, l'installation se poursuivra, mais ne fonctionnera pas.
Ce qui devrait normalement vous conduire à ceci :
La question qu’il nous pose concerne l’emplacement du dossier racine de lighttpd, pour le site web de configuration. À part si vous voulez le mettre ailleurs pour une raison X ou Y, je vous conseille de taper « Y », le script vous posera alors une deuxième question (« Complete installation with this value? ») à laquelle nous répondrons oui aussi.
S'en suit un listing des différentes dépendances du package à l'issue de laquelle on nous demande si on veut bien installer ces paquets, bien évidemment, il faut répondre oui :
Après plusieurs minutes, l'installation des principaux packages est faite, il ne reste que la configuration. Ici encore, tout est automatisé et quelques questions vous seront posées (elles n'apparaitront pas les unes à la suite des autres comme dans le texte ci-dessous, le regroupement a été fait dans un souci de lisibilité):
Enable HttpOnly for session cookies (Recommended)? [Y/n]: Y Enable RaspAP control service (Recommended)? [Y/n]: Y Install ad blocking and enable list management? [Y/n]: Y
- La première option confirme l’ajout de l’attribut « HttpOnly » pour éviter l’accès en JavaScript aux cookies de session (afin d’empêcher les injections)
- La deuxième va installer le démon RaspAP et l’activer afin qu’il démarre automatiquement
- La troisième va installer un bloqueur de pubs qui sera intégré au point d’accès, rien que ça!
Encore une dernière question :
RaspAP Install: Configure OpenVPN support Install OpenVPN and enable client configuration? [Y/n]:
Là, on vous demande si vous voulez installer OpenVPN, car oui, ce soft intègre aussi la gestion de connexions VPN. Pour ma part, je ne vais pas m’en servir donc je vais mettre « non », mais il est tout à fait possible de créer un mini serveur VPN embarqué!
À la fin de l'installation, un redémarrage est demandé, je vous conseille de le faire immédiatement.
The system needs to be rebooted as a final step. Reboot now? [y/N]:
V. Configuration de RaspAp
Au redémarrage du Raspberry Pi, on peut remarquer cette phrase :
Wi-Fi is currently blocked by rfkill. Use raspi-config to set the country before use.
Donc comme on veut que le wifi fonctionne, on va l’activer en tapant la commande :
sudo raspi-config
On sélectionne « System options » puis « Wireless LAN » :
Sélectionnez le pays, pas besoin d’entrer un SSID, vous pouvez abandonner ici (« Cancel »), le Raspberry Pi va redémarrer et le wifi sera alors actif.
Si on se fie au dépôt GitHub, au redémarrage, votre point d’accès va prendre cette configuration :
- IP address: 10.3.141.1
- Username: admin
- Password: secret
- DHCP range: 10.3.141.50 to 10.3.141.255
- SSID: raspi-webgui
- Password: ChangeMe
Modifions certains paramètres maintenant.
Premièrement, il faut nous connecter à notre nouvelle interface graphique. Pour cela, on ouvre un navigateur et on tape l’adresse IP du RPi (pour moi et pour rappel : 192.168.1.85) avec les identifiants cités plus haut:
On va maintenant changer le SSID. Pour cela, direction le menu Hotspot sur la gauche.
Changez la valeur « SSID », pour un maximum de compatibilité et de performance, je vous conseille également de changer le « Wireless Mode » en 802.11n 2,4Ghz. Pour le canal, vous pouvez utiliser une application tel que Wifi Analyzer pour choisir le canal le moins occupé dans votre voisinage.
Enregistrer les modifications en cliquant sur le bouton "Save settings".
Maintenant, direction l’onglet sécurité. Par défaut, la sécurité est définie sur WPA2 et CCMP, mis à part s’il y a des problèmes de connexion, je vous conseille de laisser en l’état et, si vous voulez savoir pourquoi, direction Wikipedia. Vous voyez au passage que la page nous génère un code QR pour la connexion.
En revanche, il est évident qu'il faut changer le mot de passe, un bouton est disponible pour en générer un, ce que j'ai fait, mais à vous de voir, il est plutôt...complexe :
Vous remarquerez que le soft génère automatiquement un code QR pour la connexion des smartphones par exemple. Très pratique si on met en place un wifi partagé.
Enregistrez et cliquez sur « Restart hotpsot ».
Normalement à ce stade, vous devriez voir apparaître le réseau wifi tel que vous l’avez configuré. Mais peut-être n’avez-vous pas envie d’utiliser la plage IP proposée par RaspAp ? C’est mon cas !
Pour les modifications, il faut se rendre dans le menu "DHCP server" pour mettre la plage réseau que vous souhaitez. Il faut dans un premier temps assigner une nouvelle adresse IP à l'interface wlan0 (qui est celle de notre Wifi):
Pour ma part, ce sera 172.16.0.0/24 avec une plage DHCP allant de 172.16.0.10 à 172.16.0.99. Pour les serveurs DNS, vous pouvez mettre ce que vous souhaitez.
Cliquez sur le bouton "Save Settings" encore une fois pour enregistrer les changements. Redémarrez ensuite le service dnsmasq en cliquant sur "Stop dnsmasq" puis sur "Start dnsmaq".
Pour appliquer ces nouveaux changements, il faut retourner dans le menu précédent (HotSpot) et redémarrer le service (Restart HotSpot).
De retour sur la fenêtre ssh, on peut vérifier que tout a été pris en compte avec la commande ip a :
Votre HotSpot est désormais opérationnel, vous pouvez commencer à connecter vos équipements.
VI. Conclusion
Nous avons vu dans ce tuto comment mettre en service un point d'accès wifi complet à partir d'un RaspBerry Pi et de RaspAP.
Le tout avec une interface graphique complète et détaillée, notamment au niveau de l’usage du réseau, ce qui peut être utile pour surveiller sa bande passante (menu "Data usage").
Ses possibilités de configuration et sa flexibilité en font une solution tout à fait viable face aux autres produits du marché.
Bonjour Florian,
Petite coquille dans le commande « sudo rapsi-config » qui est en réalité « sudo raspi-config » 😉
Merci pour le tuto, simple et clair par ailleurs,
Thomas
Bonjour Thomas,
Bien vu, j’ai corrigé, merci beaucoup !
Bonne journée
Florian
Oouuups!
Bonjour Thomas et merci pour cette relecture.
Et merci Florian pour l’avoir corrigé.
Bonne journée
Florian (l’autre…)
Pour ceux qui rencontrerais une erreur lors de la configuration de l’iptables, il faut exécuter « sudo apt-get install iptables-persistent » avant de relancer le script RaspAP 😉
ça a résolu pour moi la problématique wifi ON mais accès à internet KO
Bonjour,
Merci pour le tuto.
Je suis arrivé à l’étape finale ou normalement je devrais avoir accès à internet par le mobile mais rien je suis connecté en wifi mais pas d’internet.
Ma configuration est la suivante
Modem 4G Ip 192.168.1.1
Routeur Asus 192.168.3.1
et le PI branché au routeur directement.
Y’a t’il un truc à remplacer dans Defaut gateway et dns 1 et 2 ?
Merci à vous.
Bonjour Thomas,
Dans cette installation, quelle est l’adresse IP du RPI?
Il est difficile de répondre sans plus d’info mais concernant ta question, effectivement il faut bien mettre quelque chose dans DNS et default gateway.
Dans le cas d’un routeur, la default gateway est le RPI lui-même, ans le cas d’un hot-spot ce sera le routeur Asus.
Pour les DNS, on peut mettre ceux qu’on veut (Google, CloudFLare, Quad9, etc.).
Pourrais-tu nous donner les infos suivantes :
– Adresse LAN du RPI
– Adresse WLAN du RPI
– Plage DHCP du RPI
– DNS renseignés
Merci en tous cas pour la lecture de l’article et à bientôt!
Bonsoir Florian et merci pour cet article exhaustif et très abordable. Il m’a permis d’effectuer l’installation du routeur wifi en moins d’une heure sur un PI 3B. Aucun bug, pas de questions à se poser, cet article est un régal.
Merci! Ça fait plaisir à entendre!
Possible de donner un peu les perfs ? nombre d’appareils max ? débit ?
Merci d’avance,
Bonjour Nicolas,
Hum, difficile de répondre factuellement a cette question tant elle dépends de plusieurs facteurs…
Selon le modèle de RPI choisi déjà, le RPI 3b+ utilise le même bus pour l’Ethernet et l’USB donc possible goulot d’étranglement, ce qui n’est pas le cas du RPI 4 par exemple. Le RPI zéro quand à lui ne supporte que la norme 802.11n, alors que les 3 et 4 supportent la 801.11ac, encore faut-il l’activer dans les paramètres…
Et enfin, selon les matériels en amont et les débits offerts par les différents FAI et en fonction de l’endroit où on se trouve, je pense qu’il y a autant de réponses que de possibilités!
Si ça peut t’aider, avec un RPI 3b+ en 802.11n sur une box Free en VDSL 40mb/s, je suis à 28 en down et 5 en UP avec 3 appareils connectés (et le flux TV en fonction).
Bonjour,
Très bon tuto, auriez-vous la même chose avec openwrt pour faire d’un rpi un routeur tout court? en ajoutant par exemple un adaptateur usb vers rj45
Merci
Bonjour Sebastien,
Merci pour le commentaire!
Je n’ai jamais tenté l’installation d’OpenWRT sur un RPi. De manière générale, je ne me sert jamais de ce type de périphérique pour en faire un routeur car tous les adaptateurs ne sont pas reconnus en fonction des distributions et les performances sont souvent assez basses du au fait que les ports USB et Ethernet partagent le même BUS de la carte mère (ce qui provoque un goulot d’étranglement).
Bonjour,
merci pour ce tuto. Je l’ai suivi et mon Raspi diffuse un SSID auquel je peux me connecter. Internet fonctionne, mais j’ai toujours accès aux autres machines du réseau local ?
Ma config :
Livebox 192.168.1.1
raspi 192.168.1.13 (câble)
RaspAP : je n’ai pas changé les adresses IP de 10.3.141.1 – pour le reste, j’ai scrupuleusement suivi le tuto. Aurais-je loupé une étape ?
J’ai toujours accès à 192.168.7.1.1 depuis le réseau wifi du RaspAP.
Merci 🙂
Bonjour,
j’ai toujours accès à mon réseau local. Est-ce normal ? Ai-je loupé une étape ?
Merci
Bonjour Sven,
De base RaspAP est juste un routeur, donc cela ne me surprends pas. IL n’y a pas de pare-feu intégré donc rien n’empêche les réseaux de communiquer.
Pour interdire au réseau « A » d’accéder au réseau « B », il faut à ce moment là ajouter une règle au niveau d’IPtables sur le RPi (ou utiliser ufw).
La fonctionnalité est prévue dans le projet (pour l’instant au rang expérimental : https://docs.raspap.com/firewall/)
merci Florian pour ce tutoriel très détaillé.
C’est bien grâce à vous que j’ai pu transformer mon Raspberry en routeur.
C’est très utile pour travailler en groupe quand il n’y a pas de wifi public.
A mon tour de donner un petit tuyau.
Nous pouvons éviter d’attribuer une adresse et retrouver celle où le Raspberry s’est connecté, ce dernier étant relié par un câble Ethernet à votre box, il suffit de faire depuis le terminal de son Mac ou de son pc.
ping [nom d’hôte].local
Soit par défaut:
ping raspberrypy.local
Mais cette astuce m’a été communiquée plus tard, j’avais commencé par attribuer une adresse ip, comme vous le montrez, ça marche aussi très bien.
Merci pour ce tuto .
J’aurais bien voulu savoir si une variante sans liaison ethernet est possible : le RPI est connecté en wifi à la box, le RPI est donc utilisé comme routeur wifi mais connecté egalement en wifi et non en filaire par ethernet.
Merci.
Bonjour à tout le monde,
pour ma part je constate que sans la détection d’internet la page splash.html ne s’affiche pas ce qui peut poser problème si on souhaite connecter des utilisateurs sur son réseau local privé.
Ensuite, je n’arrive pas à basculer sur une page (adresse ip) d’un serveur local sur mon réseau à l’issue de la connexion après la page splash.html !
-> Cette question revient partout mais aucune réponse à ce jour où j’ai loupé un truc ^^^
=> Si quelqu’un à une idée pour basculer sur une page (une ip) à l’issue de la connexion ce serait génial !
Merci à vous.
Bonjour j’ai tout suivi d’abord merci pour ce tuto mais la j’arrive pas à arriver à l’étape « The system needs to be rebooted as a final step. Reboot now? [y/N]: » mais par contre j’ai ça :
RaspAP Install: Configure WireGuard support
Install WireGuard and enable VPN tunnel configuration? [Y/n]: n
[ ✓ ok ] (Skipped)
RaspAP Install: Configure VPN provider support
Enable VPN provider client configuration? [Y/n]: n
[ ✓ ok ] (Skipped)
RaspAP Install: Adding raspap.sudoers to /etc/sudoers.d/090_raspap
RaspAP Install: Copying RaspAP debug log control script
RaspAP Install: Copying RaspAP install loader
RaspAP Install: Symlinked wpa_supplicant hooks for multiple wlan interfaces
[ ✓ ok ]
RaspAP Install: Installation completed
Join RaspAP Insiders for early access to exclusive features!
> https://docs.raspap.com/insiders/
> https://github.com/sponsors/RaspAP/
Bonjour,
Selon vos logs, la solution est installé, il n’y a pas d’erreur.
Je vais vérifier mais il semblerai d’après ce que vous dites que le redémarrage n’est plus necéssaire.
Cordialement