Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Ordinateurs embarqués (SBC) > La carte Raspberry PI > Installation et configuration de la R-Pi > Configurer la RasPi en Access-Point WiFi

Configurer la RasPi en Access-Point WiFi

lundi 7 octobre 2013, par Eric P.

Le contexte et le besoin

Dans le cadre de la réalisation d’un démonstrateur pédagogique pour la Fête de la Science, j’ai été amené à développer un système utilisant une Raspberry Pi pour piloter du matériel, en liaison avec une application s’exécutant sur un laptop.

Afin de rester simple et standard, la communication entre les deux parties utilise le réseau Ethernet via WiFi.

Petite particularité cependant, le démonstrateur ne doit pas avoir de dépendance vis à vis de l’accès à un quelconque réseau informatique présent (ou pas).

Une solution commune dans ce cas est de créer un réseau ad’hoc, et cela aurait très bien pu fonctionner ainsi. Cependant, l’ambition est de rendre possible le pilotage du dispositif via une tablette (et non plus un PC) moyennant l’application adéquate (et pas encore écrite).

Petit problème : toutes les tablettes (pour être précis, toutes les versions de l’OS qui y tourne) ne donnent pas l’accès aux réseaux ad’hoc, sauf à rooter le bazar, ce qui n’est pas forcément souhaitable pour tout un tas de raisons.

Solution : configurer le WiFi de la RasPi en mode Access Point. D’où cet article

Les sources

Pour commencer, rendons à César ce qui est à César : je n’ai bien entendu pas inventé la procédure, et me suis très fortement basé sur l’excellent tutoriel disponible sur le site d’Adafruit.

Ma seule contribution est de vous livrer les informations en Français, et en n’y retenant que ce qui nous concerne ici et en y ajoutant quelques remarques suite à mon expérience personnelle. Le tutoriel d’Adafruit porte en effet sur l’utilisation de la RasPi comme comme Access Point pour un réseau local, et inclut donc aussi tout ce qui concerne le routage du trafic sur l’interface Ethernet filaire, qui ne nous est pas utile ici.

Allons-y maintenant

Ma configuration

  • RasPi
    • distribution Occidentalis v0.2 (kernel 3.2.27 du 13/10/2102 - 19:03:02)
    • dongle WiFi WiPi, distribué par Farnell (puce Ralink 5370)
  • station de travail
    • Linux Ubuntu 12.04 LTS 64 bits

Avant de commencer

Faites une sauvegarde de votre système actuel. La méthode la plus simple et rapide est d’utiliser la commande dd [1].

Insérez la carte SD dans le lecteur approprié de votre machine, et repérez le device qui lui est associé en utilisant la commande df. Nous ne sommes pas intéressés par l’espace disque disponible ici, mais simplement par la liste des volumes montés. La carte SD de la RasPi comporte deux partitions, qu’on peut voir dans l’extrait ci-après :

pi@raspberry ˜ $ df /h
...
/dev/sdd1        56M   17M   40M  30% /media/A1B1-918F
/dev/sdd2       3.6G  2.0G  1.5G  58% /media/10b4c001-2137-4418-b29e-57b7d15a6cbc
...

Le volume correspondant à la carte est donc /dev/sdd dans notre cas.

Démontez les deux partitions, soit dans notre cas de figure :

pi@raspberry ˜ $ sudo umount /dev/sdd1
pi@raspberry ˜ $ sudo umount /dev/sdd2

Il est évident que vous devrez remplacer /sdd par ce que vous aurez noté dans le résultat de la commande df.

Faites maintenant l’image de la carte :

pi@raspberry ˜ $  sudo dd bs=4M if=/dev/sdd of=

Patientez environ 5 à 10 minutes (pour une carte de 4Gb), et ne vous inquiétez pas si rien ne se passe : dd n’est pas bavard du tout, et il ne vous parlera qu’à la fin de l’opération. Vous devriez voir clignoter le voyant d’accès à votre lecteur de cartes (s’il est externe).

Installation de hostapd et isc-dhcp-server

On passe maintenant sur la RasPi, direction la console [2].

Comme les noms le suggèrent, il s’agit du daemon qui assure la fonction d’access point, et du serveur DHCP qui va distribuer les adresses aux clients.

Pour alléger les commandes qui vont suivre, je suppose que vous êtes déjà passés en mode root via le sudo su qui va bien.

 # apt-get install hostapd isc-dhcp-server

Il se peut que le start du serveur DHCP échoue en fin de processus. Ce n’est pas grave, c’est tout simplement parce qu’il lui manque la configuration nécessaire.

Modification de /etc/dhcp/dhcpd.conf

Suivre les indications du tutoriel Adafruit (j’ai bien aimé l’utilisation de 42 dans l’IP du réseau 🙂, c’est à dire :

  • mettre en commentaire les déclarations de domain-name et domain-name-servers afin de les supprimer, car nous allons les redéfinir pour notre sous-réseau
  • déclarer notre sous-réseau, en ajoutant la section suivante :
    subnet 192.168.42.0 netmask 255.255.255.0 {
      range 192.168.42.10 192.168.42.50;
      option broadcast-address 192.168.42.255;
      option routers 192.168.42.1;
      default-lease-time 600;
      max-lease-time 7200;
      option domain-name "local";
      option domain-name-servers 8.8.8.8;
    }

Pour tous les détails sur ce fichier de config, se reporter à http://www.qnx.com/developers/docs/... par exemple, ou tout simplement les man pages.

A noter que je ne suis pas certain que l’option domain-name-servers soit utile ici, surtout si on considère l’IP suggérée dans le tutoriel.

Modification de /etc/default/isc-dhcp-server

Suivre les indications du tutoriel Adafruit. Rien de particulier à signaler ici, la seule modification étant de spécifier l’interface réseau (wlan0 normalement).

Modification de /etc/network/interfaces

Suivre les indications du tutoriel Adafruit. Rien de particulier à signaler ici si ce n’est que j’ai ajouté l’option wireless-power off pour éviter toute mauvaise surprise causée par un gestionnaire d’énergie trop zélé.

Ca donne ceci :

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow hotplug wlan0

# Wifi configuration for AP mode
iface wlan0 inet static
  address 192.168.42.1 
  netmask 255.255.255.0

# turn off WiFi adapter power management
wireless-power off

Création de /etc/hostapd/hostapd.conf

Suivre les indications du tutoriel Adafruit.

Le driver du dongle WiPi est le nl80211. Pas de panique, il est déjà installé dans la distribution utilisée (par contre je n’en sais rien sur la vôtre, et comme on le dit dans la langue de Shakespeare : YMMV [3]).

Cela donne :

interface=wlan0
driver=nl80211
ssid=<votre_ssid>
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=<la_passphrase_de_votre_réseau>
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Le choix du canal (6) peut-être ce que vous voulez (du moment que l’interface le supporte). Très souvent les interfaces Wifi des box et consorts sont configurées par défaut sur le canal 11. Utiliser un canal différent permet d’éviter que tout le monde se marche sur les pieds. De toute manière pas de panique, la quincaillerie Wifi saif faire ce qu’il faut (changement automatique de fréquence par exemple) pour que la cohabitation de plusieurs réseaux se passe de manière transparente pour les utilisateurs.

votre_ssid est bien entendu le nom sous lequel le réseau géré par la RasPi va apparaître sur les ondes et non pas le ssid du réseau de votre domicile ou lieu d’expérimentation.

Modification de /etc/default/hostapd

Suivre les indications du tutoriel Adafruit, consistant tout simplement à indiquer le path du fichier de configuration du daemon. Rien de spécial à signaler, et le résultat est :

# Defaults for hostapd initscript

# Absolute path of a hostapd configuration file
DAEMON_CONF="/etc/hostapd/hostapd.conf"

# Additional daemon options to be appended to hostapd command:-
# 	-d   show more debug messages (-dd for even more)
# 	-K   include key data in debug messages
# 	-t   include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
#DAEMON_OPTS=""

Et c’est tout

En effet, le reste du tutoriel concerne la fonction de gateway WiFi/Ethernet filaire, qui ne nous intéresse pas ici.

Les commandes d’activation des services ne sont pas non plus nécessaires, car les scripts d’installation exécutés au début s’en sont déjà chargé (d’où le message d’erreur sans conséquence mentionné plus haut).

A noter que la procédure de test manuel indiquée doit être précédée du démarrage du service DHCP (qui a échoué en tout début).

Conclusion

Pas bien difficile. En gros, une bonne demi-heure au total, y compris quelques recherches documentaires par curiosité, histoire d’en savoir un peu plus sur les dessous de l’affaire.

Il me manque encore quelques points de détail, comme par exemple l’utilité dans notre cas d’utilisation des options routers et domain-xxx du fichier dhcpd.conf. Je viendrai mettre cet article à jour lorsque j’aurais eu le temps (et le courage) de creuser la question,... ou si quelqu’un de charitable me donne les réponses.

Have fun

Mise à jour du 01/05/14

Ayant reproduit ce genre de configuration ces jours derniers en préparation d’un dispositif pour la prochaine POBOT Junior Cup, je me suis arraché les cheveux avec un problème de démarrage de hostapd / isc-dhcp-server causé par le fait qu’au moment du démarrage de hostapd l’interface wlan0 n’avait pas d’adresse IP. Ce qui est surprenant car son initialisation faite un peu avant se déroule sans problème.

Bien entendu, les divers fichiers de paramétrage de cette nouvelle configuration sont identiques à ceux décrit dans le présent article, puisque ça marche très bien (je l’ai vérifié à nouveau en remettant le système en route).

Après moult recherches sur le net, je suis tombé sur la page qui m’a sauvé la vie. Son explication est limpide : le mécanisme de gestion du hot plug des interfaces est buggé et zappe l’adresse qui avait été affectée à l’interface. Pour éviter cela, il suffit de le désactiver pour l’interface wlan0. Ca ne nous manquera pas beaucoup, car je doute qu’on s’amuse à débrancher et rebrancher à la hussarde le dongle Wifi d’un access point pendant qu’il est opérationnel.

Pour cela, éditez le fichier /etc/default/ifplugd et remplacez les lignes :

INTERFACES="auto"
HOTPLUG_INTERFACES="all"

par

INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"

Question : pourquoi ça marche avec la configuration décrite dans cet article ?

Réponse : elle a été montée sur une distro Occidentalis comme précisé en début d’article, alors que la nouvelle utilise une Noobs récente. Il semblerait que les mises à jour aient apporté leur lot de nouveaux bugs ;)


[1désolé pour les non-Linuxiens, il va vous falloir chercher la procédure équivalente pour votre cas de figure

[2nous sommes entre gens sérieux

[3Your Mileage May Vary

Vos commentaires

  • Le 17 septembre 2016 à 11:21, par Francis En réponse à : Configurer la RasPi en Access-Point WiFi

    Bonjour,
    Comment faire pour remettre le raspi en configuration habituelle où c’est lui qui se connecte à une box ?

    Répondre à ce message

  • Le 25 avril 2015 à 20:23, par frédéric En réponse à : Configurer la RasPi en Access-Point WiFi

    Merci Eric et Julien, effectivement c’était le serveur DHCP qui ne se lançait pas. Pour mémoire, la situation pour moi était la suivante :
     Je voyais le SSID de la Raspberry
     Je pouvais m’y connecter (mot de passe OK)
     je n’obtenais pas d’adresse IP
    en faisant un ifconfig je notais que la nouvelle interface créer par... (??) nommée mon.wlan0 n’avait pas d’adresse IP et mon interface wlan0 était configurée en client DHCP (pas static comme dans le tuto).
    — > solution (pour moi)
    dans /etc/rc.local j’ai rajouté les lignes

    ifconfig wlan0 192.168.42.1
    etc/init.d/isc-dhcp-server start

    De plus pour permettre d’accéder au web lorsque je branche mon cable ethernet vers mon réseau free, j’ai "natté" j’ai toujours dans rc.local avec la commande
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    CONCLUSION
    maintenant, ça fonctionne chez moi... Mais cela mériterait de comprendre exactement d’où vient cette fameuse interface mon.wlan0 qui n’est pas décrite dans /etc/network/interfaces. Je suppose que cela sert justement à permettre de d’attribuer une adresse IP fixe (indispensable pour le deamon sc-dhcp-server) et de pouvoir en même temps utiliser une autre interface wifi (wlan0) comme client DHCP et éventuellement natter les deux réseaux (pas testé —> je natte vers l’interface eth0)
    a++ Frédéric

    Répondre à ce message

  • Le 19 avril 2015 à 02:04, par Frédéric R En réponse à : Configurer la RasPi en Access-Point WiFi

    je ne suis pas arrivé à mettre ma Rpi en access Point !
    J’ai suivi les config
     /etc/dhcp/dhcpd.conf
     /etc/default/isc-dhcp-server
     /etc/network/interfaces
     /etc/hostapd/hostapd.conf
     /etc/default/hostapd
     /etc/default/ifplugd
    RESULTAT OBTENU :
     la Rpi diffuse le SSID
     la connexion me demande le mot de passe
     je n’obtiens pas d’adresse IP.

    • Le 19 avril 2015 à 10:43, par Eric P. En réponse à : Configurer la RasPi en Access-Point WiFi

      Le SSID est visible, donc le daemon access point fonctionne correctement.
      Si pas d’adresse fournie, cela signifie donc que le problème réside dans le serveur DHCP. Le daemon est-il bien démarré ?
      Si c’est le cas, un petit coup d’oeil circonspect dans sa configuration devrait donner la solution au problème.
      Autre suggestion, car on ne sait jamais : le mot de passe fourni (celui pour accéder au réseau je suppose) correspond-il ? Je sais, c’est stupide comme proposition, mais ce sont parfois les causes les plus évidentes qui sont écartées d’office, alors que c’étaient les bonnes ;)

    • Le 19 avril 2015 à 15:07, par Julien H. En réponse à : Configurer la RasPi en Access-Point WiFi

      Bonjour,
      Que donne un "ifconfig" sur la Raspberry Pi ?
      Cordialement,
      Julien.

    Répondre à ce message

  • Le 22 mars 2015 à 08:32, par invité En réponse à : Configurer la RasPi en Access-Point WiFi

    Merci pour l’article et l’astuce de la fin.
    J’ai rencontré le même problème puis réalisé la modification du fichier /etc/default/ifplugd qui a fonctionné.
    Puis j’ai repensé que dans le fichier /etc/network/interfaces il y avait la ligne :
    allow-hotplug wlan0
    En la commentant et en replaçant les valeurs par défaut dans le fichier /etc/default/ifplugd, tout semble fonctionner normalement.

    • Le 22 mars 2015 à 10:21, par Eric P. En réponse à : Configurer la RasPi en Access-Point WiFi

      Remarque très judicieuse. Il serait effectivement logique d’arriver au même résultat par la modification suggérée. C’est même plus intuitif d’ailleurs, puisque configuré au niveau de l’interface concernée.
      L’intervention au niveau de ifplug a l’intérêt d’être le "dernier rempart" : on passe forcément à cet endroit-là lors du processus. Mais on peut visiblement faire sans.
      A valider par l’usage par conséquent.

    Répondre à ce message

  • Le 29 avril 2014 à 19:07, par Flexbrane En réponse à : Configurer la RasPi en Access-Point WiFi

    Bonjour,
    Pouvez vous me dire s’il existe un autre tuto concernant le pont entre le point d’accès et le RJ45 ?
    Merci.

    Répondre à ce message

  • Le 24 mars 2014 à 13:36, par Julien H. En réponse à : Configurer la RasPi en Access-Point WiFi

    Merci Éric pour cet article ! J’ai suivi ces étapes, et j’ai complété avec les explications de Dave Conroy pour récupérer un exécutable "hostapd" en version spéciale pour le petit adaptateur low-cost à base de chip RTL8188CU.
    Et ensuite, ça marche !

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.