Un routeur sans fil à base de Raspberry Pi: la mise en place du réseau

Je me suis lancé dans la construction d'un petit routeur sans fil que je pourrai brancher sur une batterie portable, et l'utiliser sur les appareils que j'aurais sous la main. D'accord, ce ne serait "que" mon ordinateur portable et un téléphone, mais ça reste une bonne excuse pour s'exercer non ?

Cet article sera lié avec d'autres articles qui aborderont étapes de la mise en place du bidule. Ici, on se concentre sur le matériel et la configuration initiale de hostapd ainsi que dnsmasq.

Le matériel

Tout d'abord, avant d'aborder la configuration et des sujets annexes intéressants, il serait bien de parler du matériel utilisé. Les liens ci-dessous ne sont pas des liens affiliés; j'ai juste été dans ces magasins pour acheter le matériel en personne ou bien commandé en ligne sur ces plateformes.

Je vois venir les personnes qui viendront me dire qu'un Raspberry Pi avec 4 GB de RAM est un peu overkill pour un routeur sans fil. Je suis d'accord là-dessus. Ce Raspberry Pi a servi pour un cours. Au lieu de prendre un autre dimensionné plus raisonnablement, d'autant plus avec les délais de livraison de l'impossible, je prends ce que j'ai sous la main; ce Pi fera très bien l'affaire.

De plus, si j'ai besoin de faire tourner quelque chose en plus, je pourrai le faire sans trop de soucis. Pour l'instant, ce n'est pas le but.

Le câble USB type C à USB type C servira à brancher dans la sortie correspondante de la batterie. Je pourrai charger le téléphone portable en même temps, si besoin est. Oui, ça m'a déjà servi dans le train à l'heure que j'écris cet article; 30 pourcent de batterie et hop, un coup de recharge avec le Pi sur la sortie USB type C et le téléphone sur une sortie USB type A !

Pour ce qui est de la clef USB pour faire la deuxième interface réseau, je savais qu'il y aurait un module à compiler et installer avec dkms. Pas un grand problème, avec les guides que l'on peut trouver sur Internet.

Le point d'accès sur la carte réseau sans fil embarquée

Maintenant que j'ai tout le matériel nécessaire1, on peut songer à mettre en place la partie point d'accès sans fil. Ce dernier sera mis en place à coup de hostapd qui enverra ce qui faut sur l'interface réseau wlan0, la carte intégrée du Raspberry Pi, pour monter un réseau auquel on pourra se connecter. J'ai basé ma configuration sur l'article que j'ai lié, modulo quelques directives.

Maintenant, on a un réseau sans fil qui sera régulièrement annoncé. Une machine ─ un ordinateur, au hasard ─ s'y connecte et commence à chercher un serveur DHCP pour récupérer une adresse IP et les configurations nécessaires. S'il n'y a rien de trouvé, cet appareil va s'assigner une adresse IP de l'étendue APIPA. Ceci dit, je pense que distribuer une adresse avec un serveur DHCP peut être pas mal, notamment pour passer des paramètres réseau intéressants ou s'assurer que ça routera correctement.

Pour ce faire, on va configurer le service dnsmasq pour distribuer des adresses IP, en plus de faire la résolution DNS.

interface=wlan0
dhcp-range=192.168.5.200,192.168.5.250,255.255.255.0,6h
domain=local
address=/le-routeur.local/192.168.5.1

Cette configuration écoutera les DHCP Discover arrivant sur l'interface wlan0. Les adresses distribuées vont de 192.168.5.200/24 à 192.168.5.250/24, assignées pendant 6h. Le domaine de recherche sera local (dans cet exemple) et le routeur aura le nom le-routeur.local.

La machine qui passait par là a une adresse IP et les configurations nécessaires pour que ça marche. Jusqu'à maintenant, l'appareil connecté au réseau WiFi nouvellement créé pourra communiquer avec le réseau "interne", mais pas avec le réseau "externe"2. Cela peut se régler avec une règle au pare-feu qui NAT. Le double-NAT qui en résulterait n'est pas forcément élégant. Cependant, pour ce cas d'utilisation, je m'en moque un peu.

To be continued...

Le prochain article de la série parlera certainement de comment faire fonctionner la clef USB WiFi avec un driver à compiler ainsi que la gestion de la connexion aux points d'accès avec iwd.



  1. Techniquement, on peut le faire sans la deuxième carte réseau puisqu'un Raspberry Pi peut se brancher à un réseau avec un câble Ethernet ↩︎

  2. Si on part du principe que le Raspberry Pi communique à l'extérieur avec un câble Ethernet ↩︎