Blog geekesque... ou presque

Aller au contenu | Aller au menu | Aller à la recherche

Configurer le Raspberry Pi en point d'accès Wifi

Transformer son Raspberry Pi en point d'accès wifi est quelque chose de très simple à faire.

Si vous avez un Pi3, vous n'aurez aucun investissement particulier à faire. Si vous avez une version précédente, il faudra investir dans un dongle wifi qui le permette. Pour ma part, j'utilise le dongle officiel, mais la plupart le permettent.

Attention: vous devez soit être connecté en ethernet, soit être directement sur votre machine (clavier + écran) pour procéder à la suite des opérations, car vous allez modifier la configuration wifi. Elle ne sera donc plus fonctionnelle pendant un certain temps.

Le point d'accès nécessite, outre une clé wifi supportant le mode Access point, deux logiciels pour pouvoir fonctionner: hostapd et dnsmasq

sudo apt-get install dnsmasq hostapd

Réglage de l'adresse IP

La première étape consiste à forcer une adresse IP pour le point d'accès. Par défaut, le wifi du RPi étant en dhcp, nous allons éditer /etc/dhcpcd.conf pour forcer une adresse IP statique (192.168.3.1 dans notre cas), en ajoutant les lignes suivantes:

interface wlan0  
   static ip_address=192.168.3.1/24

Ensuite, nous allons bloquer la négociation automatique de bail dans le fichier /etc/network/interfaces.

Il faut rechercher le bloc suivant:

allow-hotplug wlan0  
iface wlan0 inet manual  
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Il suffit de commenter la ligne d'appel à wpa_supplicant.conf (en la précédent d'un #) et le tour est joué.

Nous pouvons maintenant redémarrer le wifi:

sudo service dhcpcd restart

hostapd

hostapd est le logiciel qui permet de gérer le point d'accès, il est donc le coeur de notre système. Sa configuration se fait dans le fichier /etc/hostapd/hostapd.conf

# Nom de l'interface wifi (celle par défaut)
interface=wlan0
# Utilisation du driver nl80211, 
driver=nl80211
# Nom du réseau wifi (SSID)
ssid=RPi-AP
# Mode du wifi (bande 2.4GHz)
hw_mode=g
# Canal 6
channel=6
# Activer le 802.11n
ieee80211n=1
# Activer le WMM
wmm_enabled=1
# Activer les canaux 40MHz avec 20ns d'intervalle
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# Accepter toutes les adresses MAC (pas de restriction d'appareil)
macaddr_acl=0
# Utiliser l'authentification WPA
auth_algs=1
# Ne pas diffuser le SSID
ignore_broadcast_ssid=0
# Utiliser WPA2
wpa=2
# Utiliser une clé partagée
wpa_key_mgmt=WPA-PSK
# Mot de passe du réseau
wpa_passphrase=raspberry
# Utilisation d'AES plutôt que de TKIP
rsn_pairwise=CCMP

On peut maintenant tester le fonctionnement du point d'accès de la manière suivante:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Ceci va lancer le point d'accès et permettra d'avoir le log d'activité directement dans la console. Avec un équipement wifi (gsm, tablette, portable, ...), il faut essayer de se connecter au réseau RPi-AP, normalement on voit la tentative de connexion.

Une fois que c'est fonctionnel, on peut couper le point d'accès (Ctrl+C) et le mettre en démarrage automatique, en éditant le fichier /etc/default/hostapd. Il suffit de remplacer la ligne #DAEMON_CONF="" par:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

dnsmasq

dnsmasq est un petit serveur DNS qui intègre un serveur DHCP. C'est lui qui permettra d'attribuer les adresses IP aux clients qui se connecteront sur le point d'accès.

Sauvegardez son fichier de configuration initial (/etc/dnsmasq.conf) puis créez sa nouvelle version:

# Interface à utiliser
interface=wlan0
# Limiter le fonctionnement à l'interface déclarée
bind-interfaces
# Transférer les requêtes DNS sur les DNS d'OpenDns
server=208.67.222.222
# Ne pas forwarder les requêtes "locales" (sans nom de domaine)
domain-needed
# Fausse résolution inverse pour les réseaux privés. Toutes les requêtes DNS inverses pour des adresses IP privées (ie 192.168.x.x, etc…) qui ne sont pas trouvées dans /etc/hosts ou dans le fichier de baux DHCP se voient retournées une réponse “pas de tel domaine” (”no such domain”) au lieu d’être transmises
bogus-priv
# Plage DHCP : on attribuera les adresses IP entre 192.168.3.50 et 192.168.3.150 pour une durée de 12h
dhcp-range=192.168.3.50,192.168.3.150,12h

Accéder à internet

Vous avez actuellement un point d'accès fonctionnel mais limité au réseau local. C'est parfait si vous faites une PirateBox, mais le but est de donner accès à internet. Nous allons donc utiliser iptables pour ajouter des règles de routage.

Sécurité

Il faut commencer par modifier les règles de sécurité dans /etc/sysctl.conf pour autoriser le transfert IPv4 (ou IP forwarding). Pour cela, décommenter la ligne:

net.ipv4.ip_forward=1

Ceci ne sera pris en compte qu'au prochain redémarrage de votre raspberry, mais il est possible de forcer son activation immédiate:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Règles de transfert

Maintenant que le transfert IPv4 est autorisé, nous alloons créer les règles qui vont transférer les requêtes wifi vers le port ethernet:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Pour que ces règles soient appliquées à chaque redémarrage, nous allons commencer par les sauvegarder dans un fichier /etc/iptables.ipv4.nat.

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Ensuite, nous allons créer un fichier qui sera appelé automatiquement au démarrage du serveur dhcp:

sudo echo "iptables-restore < /etc/iptables.ipv4.nat" > /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat

Démarrage final

Pour pouvoir tester votre système sans avoir à rebooter, il suffit de lancer les daemons à la main:

sudo service hostapd start  
sudo service dnsmasq start

Et normalement, tout devrait tourner parfaitement.

Commentaires

1. Le jeudi 12 mai 2016, 12:33 par Pi Home Server

Pour les clés wifi attention : il faut que la clé supporte l'Access Point mode. L'information se trouve avec la commande iwlist quand la clé est branchée (il y a une ligne AP : yes dans le résultat)

Petite coquille : net.ipv4.ip_forward n'active pas l'IPv4 mais l'IP forwarding pour l'IPv4

2. Le jeudi 12 mai 2016, 13:13 par CrazyCat

@Pi Home Server : Oui, tu as tout à fait raison pour la clé, j'ai édité l'introduction.

En ce qui concerne la coquille, j'ai écrit un peu trop vite et mal formulé ;)

3. Le dimanche 26 juin 2016, 10:05 par jvetbiz

Bonjour !
C'est avec plaisir que j'ai pu lire votre tutoriel (le plus récent et en français que j'ai trouvé, pile poil ce que je cherchais)
En effet j'ai testé PLEIN de configuration pour un AP avec la raspberry, la votre est vraiment la plus simple.
Juste, je voulais signaler une erreur qui peut entrainer de GROS quiproquo (j'ai franchement buggé sur cette erreur; j'suis pas un expert et j'ai donc du faire des recherches) Je m'explique :
Au début du tuto je cite :
<<<
Réglage de l'adresse IP

La première étape consiste à forcer une adresse IP pour le point d'accès. Par défaut, le wifi du RPi étant en dhcp, nous allons éditer /etc/dhcpd.conf pour forcer une adresse IP statique (192.168.3.1 dans notre cas), en ajoutant les lignes suivantes:
>>>

Le souci, c'est que c'est /etc/dhcpcd.conf qu'il faut éditer pour les OS récent (Jessie et + me semble -t'il) , et pas /etc.dhcpd.conf, qui est l'ancienne version !

Une fois ceci résolu, votre solution marche de bout en bout dans mon cas
(Raspberry pi2, Raspbian Jessie a jour, Dongle Officiel blanc (comme celui du lien))

Encore merci, cordialement,
BiZ Jvet

4. Le dimanche 26 juin 2016, 10:12 par jvetbiz

Oops ! j'ai oublié :

sudo echo "iptables-restore < /etc/iptables.ipv4.nat" > /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat

ne passe pas non plus, permission non accordé
J'ai tenté un
up iptables-restore < /etc/iptables.ipv4.nat
dans /etc/network/interfaces

mais ca ne marche pas

Je cherche comment faire actuellement !

5. Le dimanche 26 juin 2016, 10:19 par jvetbiz

Un
sudo apt-get install iptables-persistent

regle le probleme :p, comme son nom l'indique, il rends persistent les tables ip.

Donc, a faire apres avoir créer les regles, l'installation demandera si on veut faire des regles actives celles qui démarreront avec le systeme.

Désolé pour le spam, j'ai été un peu vite en t'envoyant le premier, mais cette fois ci ca marche, si tu veux condensée mes trois commentaires en un, tu es bienvenue ;)

Cordialement,

6. Le dimanche 26 juin 2016, 11:44 par CrazyCat

@jvetbiz : Merci pour tes précisions, je referai les manips pour remettre le billet à jour.

Je préfère garder tes 3 commentaires, ça permet de voir les recherches que tu as faites et les solutions trouvées, elles seront intégrées dans le billet.

7. Le dimanche 24 juillet 2016, 13:10 par pasco

Bonjour, merci pour le Tuto que je pense avoir bien suivi.cependant quand j'essaie de me connecté sur mon wifi il met en permanence "recuperation de l'adresse IP...". Ai-je loupé une information ou un setup qqpart?
merci pour votre aide.
cdt
Ps: j'utilise un pi 3

8. Le dimanche 24 juillet 2016, 17:09 par CrazyCat

@pasco : j'imagine que tu es dans la situation où avec un appareil quelconque, tu essayes de te connecter au réseau wifi créé par le RPi. Ca ressemble fort à un souci avec dnsmasq, il faut que tu regardes dans les logs (ainsi que dans ceux d'hostapd) pour vérifier qu'il n'y a pas un souci.

9. Le dimanche 24 juillet 2016, 17:58 par pasco

Re bonjour Crazycat,
J'avais des msg d'erreur du genre dans la log "
wlan0: STA cc:3d:bf:d0:9a:58 WPA: received EAPOL-Key msg 2/4 in invalid state (10) - dropped"

J'ai rajouté les deux valeurs PSK ci-dessous dans /etc/network/interfaces

wpa-ssid "Mon_SSID"
wpa-psk 12345.....def

que j'ai générées via wpa_passphrase Mon_SSID

puis un A/R de mon RPI et là j'ai pu me connecter.
Je ne sais pas si c'est la meilleure méthode.
Ou peut-être qu'il fallait procéder autrement.

Merci

10. Le lundi 7 novembre 2016, 22:10 par julien

Bonjour !
super tuto ça fonctionne à merveille !
Petite question :
Combien de connexion wifi maxi peut supporter le raspberry pi 3 ? j'ai testé et à 12 personnes sous différents OS, certains sous windows avaient du mal à se connecter ...

11. Le mardi 8 novembre 2016, 09:49 par CrazyCat

@julien : C'est une excellente question, mais je pense qu'au-delà de la dizaine d'utilisateurs, on peut arriver à la saturation du système en fonction de l'activité. C'est indépendant de l'OS en théorie, mais certains gestionnaires wifi sont moins sensibles aux ralentissements que d'autres.

Je pense que lorsqu'on arrive à plus de 10 connectés, il faut mettre en place de la QoS pour faire un partage équitable des ressources et limiter les risques de déconnexion.

12. Le mardi 15 novembre 2016, 16:05 par Rasp

Bonjour,
j'ai une petite question. Lorsqu'il est dit au début du tuto "La première étape consiste à forcer une adresse IP pour le point d'accès. Par défaut, le wifi du RPi étant en dhcp, nous allons éditer /etc/dhcpd.conf pour forcer une adresse IP statique (192.168.3.1 dans notre cas), en ajoutant les lignes suivantes:", cette adresse ip que nous imposons c'est l'adresse ip que le raspberry aura sur notre réseau ? Car si tel est le cas j'ai déjà alloué une ip fixe a mon raspberry car je fais de temps a autre tourner des serveurs de jeux et l'utilise en ssh depuis l’extérieur de mon réseau. Dois-je donc remplacer l'adresse ip proposée par mon adresse ip fixe?

13. Le mardi 15 novembre 2016, 23:50 par CrazyCat

@Rasp : Si ton RPi est connecté en wifi à ton réseau local, il ne pourra pas faire point d'accès en même temps, à moins que tu n'y ajoutes un dongle wifi. Ce tuto est fait pour créer le schéma suivant: box-(eth)-rpi-(wifi)-clients
Ton RPi agit alors comme un firewall.

Au cas où, passe sur http://forum.raspfr.org ou sur le tchat de http://www.zeolia.net/canaux/raspfr... pour qu'on en discute un peu plus, j'ai peur de ne pas bien comprendre ta question.

14. Le mercredi 16 novembre 2016, 12:48 par Rasp

merci pour la réponse. J'avais bien compris que c’était pour "partager la connexion ethernet ". Plus simplement je voudrais savoir si toute la partie réglage de l'adresse ip est nécessaire si j'ai déjà fixé mon adresse ip dans les paramètres de la box ? De plus dans la partie hostapd on parle du fichier hostapd.conf mais je ne trouve pas celui ci . Est-ce car c'est à moi de le créer en recopiant les lignes écrites dans cette partie ?

15. Le jeudi 17 novembre 2016, 12:43 par CrazyCat

@Rasp : C'est bien plus clair ainsi.

Donc pour répondre simplement:

  • si tu as déjà configuré ton wifi en fixe, ce n'est effectivement pas la peine de le refaire, il suffit que tu adaptes la suite de la configuration à l'IP que tu as déterminé,
  • le fichier /etc/hostapd/hostapd.conf est effectivement à créer, tu peux soit partir des exemples qui sont disponible dans /usr/share/doc/hostapd/examples/hostapd.conf.gz soit le créer directement avec un copié/collé
16. Le jeudi 17 novembre 2016, 21:34 par Rasp

parfait merci pour ces précisions. :)@CrazyCat :

17. Le lundi 21 novembre 2016, 13:18 par Rasp

@CrazyCat :
merci pour les réponses ;)

18. Le vendredi 20 janvier 2017, 00:31 par wilsonwilsoff

salut! d'abord merci pour le tuto ;)
juste pr faire remonter une co(q)uille ds l'ètape : reglage de l'adresse ip : editer /etc/dhcpd.conf vs avez oublié un c >>> /etc/dhcpcd.conf
c'etait juste pr faire avancer le schmilblick....pas de reproches bien au contraire....encore merci pour le tuto

19. Le vendredi 20 janvier 2017, 08:57 par CrazyCat

@wilsonwilsoff : Bien vu, c'est corrigé.

Merci bien.

20. Le vendredi 27 janvier 2017, 09:40 par Aurel

Salut
Petit souci de mon côté.
J'ai suivi à la lettre ce tuto (mais j'avais déjà fait pas mal de modif dans les fichiers de conf, donc peut-être qu'il reste quelques boulettes), mais je n'arrive pas à me connecter.
Le SSID est bien visible depuis mon smartphone, mais j'ai l'erreur "mot de passe incorrect".
Sur le terminal de la rasp, je ne vois pas de tentative de connexion.
Si vous avez une idée...

Merci!

21. Le dimanche 29 janvier 2017, 16:24 par CrazyCat

@Aurel : Ton SSID est-il bien unique, es-tu sûr qu'il s'agit de celui créé par la RPi ?

Si oui, l'absence d'entrées dans le log est peut-être dû à la configuration du log, vérifies donc la valeur de logger_syslog (plus c'est élevé moins c'est parlant).

Au cas où, passe sur http://forum.raspfr.org/ pour expliquer ton souci et montrer ton fichier hostapd.conf, plusieurs personnes pourront sûrement t'aider.

22. Le lundi 13 février 2017, 17:53 par Akhlan

Bonjour,

j'ai actuellement un Rpi avec OSMC dessus connecté en LAN à l'étage, je voudrai mettre cette conf dessus, comment faire ?

Les package s'installe bien mais la conf diffère un peu..

Merci

23. Le vendredi 17 février 2017, 19:09 par kage

Salut!
J'ai un petit probleme au moment de tester le fonctionnement du reseau apres la creation du fichier hostapd.conf .
J'execute la commande: sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf ,et celle-ci me renvoie :
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211 driver initialization failed.

Je pense que ce commentaire est postee un peu tard mais si on peut m'aider c'est pas de refus :p
Merci d'avance!

24. Le samedi 18 février 2017, 17:30 par CrazyCat

@kage : Avec quelle RPi et/ou adaptateur wifi ?
Il est possible que ton adaptateur ne supporte pas le mode Access Point, tu peux vérifier ça en tapant: iw list

Tu devrais avoir en retour toute une liste de données sur ton adaptateur, et particulièrement:

Supported interface modes:
  * IBSS
  * managed
  * AP
  * P2P-client
  * P2P-GO
  * P2P-device

Si tu n'as pas la ligne "* AP", c'est que ton adaptateur wifi ne peut pas convenir

25. Le mardi 28 février 2017, 11:22 par jmbdeblois

Bonjour et merci pour ce tuto.
Cela fonctionne jusqu'à la connexion que je vois s'établir parfaitement entre mon RPI et mon smartphone, mais ensuite ma connexion n'aboutit pas car mon réseau wifi du RPI me signifie "Pas d'internet"; alors que mon RPI est connecté en ethernet et que Internet fonctionne !!!
j'avoue ne pas comprendre ce qui se passe.
Merci pour votre aide.

26. Le vendredi 10 mars 2017, 23:30 par dass24

Bonjour
J'ai moi aussi un problème au moment de tester le fonctionnement du réseau après la création du fichier hostapd.conf (j'ai pour ma part une raspberry b+).
J’exécute la commande: sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf ,et celle-ci me renvoie :
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211 driver initialization failed.

J'ai bien vérifié que mon adaptateur supporte le mode access point. Est-ce-que ça pourrait être un problème d'installation de driver ?

Merci d'avance.

27. Le dimanche 12 mars 2017, 13:34 par CrazyCat

@jmbdeblois : Ca semble être un souci d'iptables, je te conseille de bien revoir les règles mises en place.

@dass24 : cela peux venir du fait que Network Manager continue à gérer le réseau, essaye ceci:

sudo nmcli nm wifi off
sudo rfkill unblock wlan

Ensuite, relance ta commande

28. Le lundi 20 mars 2017, 13:32 par dass24

@CrazyCat : J'ai fais les 2 commandes, du coup j'ai pu vérifier ensuite le Network Manager ne gère plus le réseau, mais quand je relance ma commande ça ne fonctionne toujours pas.

29. Le mercredi 29 mars 2017, 11:03 par Baptiste

Bonjour,

Avant de me lancer dans la programmation, je voudrais savoir si cette méthode permet au final une communication entre le RasPi et l'ordi SANS passer par une connexion à un réseau internet.
En fait mon objectif est uniquement de transférer des données en wifi de mon RasPi vers mon ordi en extérieur (donc sans box, modem, abonnement internet...), pas de me connecter à internet depuis l'un ou l'autre.

Merci.

30. Le mercredi 17 mai 2017, 22:39 par deftones

bonjour, quand je lance sudo service dnsmasq start
il me met cette erreur, que faire? j'ai suivie le tuto depuis le debut, je ne trouve pas la solution.

[email protected]:~ $ sudo service dnsmasq start
Job for dnsmasq.service failed. See 'systemctl status dnsmasq.service' and 'journalctl -xn' for details.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

La discussion continue ailleurs

URL de rétrolien : https://www.g33k-zone.org/index.php?trackback/104

Fil des commentaires de ce billet