howto:raspberry-pi:wirelessaccespoint

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

howto:raspberry-pi:wirelessaccespoint [2020/11/26 11:24] (Version actuelle)
Ligne 1: Ligne 1:
 +======= Création d'un point d'accès Wifi sur un Raspberry Pi (Raspbian Buster) =======
 +
 +Pour s'amuser avec des ESP et autres objets connectés on a besoin souvent de créer un réseau wifi local. Si vous n'avez pas de vieux routeur Wifi pour faire ça, vous pouvez utiliser un Raspberry Pi qui vous permettra de créer un tel point d'accès Wifi.
 +
 +#1- Le principe
 +
 +Sur la base d'une distribution Raspbian on va :
 +  * Configurer l'interface Wifi pour lui donner une ip fixe
 +  * Installer puis configurer un logiciel qui s'occupera d'attribuer des adresses ip aux clients qui se connecteront à notre point d'accès : **dnsmasq**
 +  * Installer puis configurer un logiciel qui permet de créer un point d'accès Wifi : **hostapd**
 +
 +#2- Install Raspbian
 +
 +À l'aide d'Etcher ([[https://www.balena.io/etcher/|Disponible ici]]) on copie une image raspbian buster lite sur une carte microSD.
 +
 +#3- Configuration du réseau Internet
 +
 +On part du principe que notre Raspberry Pi est connecté à Internet par son interface filaire nommée *eth0*, l'interface Wifi nommée *wlan0* sera utilisée par le point d'accès.
 +
 +On active l'interface filaire par la commande :
 +
 +`sudo ifconfig eth0 up`
 +
 +On vérifie qu'on a bien une adresse ip de notre réseau local avec la commande :
 +
 +`ip a`
 +
 +qui doit nous retourner un truc du style :
 +
 +```
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 +    inet 127.0.0.1/8 scope host lo
 +       valid_lft forever preferred_lft forever
 +    inet6 ::1/128 scope host 
 +       valid_lft forever preferred_lft forever
 +2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 +    link/ether b8:27:eb:53:0b:b0 brd ff:ff:ff:ff:ff:ff
 +    inet 192.168.88.136/24 brd 192.168.88.255 scope global eth0
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::e82e:71df:7349:3289/64 scope link 
 +       valid_lft forever preferred_lft forever
 +3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
 +    link/ether b8:27:eb:06:5e:e5 brd ff:ff:ff:ff:ff:ff
 +```
 +
 +On voit dans cet exemple que l'interface filaire nommée *eth0* a l'adresse ip 192.168.88.136
 +
 +Dans le cas contraire il peut être nécessaire de désactiver l'interface filaire eth0 :
 +
 +`sudo ifconfig eth0 down`
 +
 +avant de la réactiver :
 +
 +`sudo ifconfig eth0 up`
 +
 +#3- Mise à jour du système
 +
 +On met à jour la liste des paquets disponibles dans le dépôt par la commande :
 +
 +`sudo apt-get update`
 +
 +puis on met à jour les paquets installés.
 +
 +`sudo apt-get upgrade`
 +
 +Il sera peut être nécessaire de redémarrer le système avec la commande:
 +
 +`sudo reboot`
 +
 +#4- Configuration de l'interface Wifi
 +
 +On prépare notre interface Wifi en ajoutant à la fin du fichier **/etc/dhcpcd.conf** 
 +
 +```
 +interface wlan0
 +static ip_address=192.168.0.254/24
 +nohook wpa_supplicant
 +```
 +
 +Bien entendu vous pouvez donner l'adresse ip que vous souhaitez à votre interface, dans cet exemple notre Raspberry créera un réseau local avec des adresses de type 192.168.0.xxx et lui même utilisera l'adresse 192.168.0.254.
 +
 +On vérifie que wlan0 ne soit pas bloquée par RF-kill
 +Si la commande ''rfkill list'' renvoie un résultat tel que : 
 +```
 +0: phy0: Wireless LAN
 +        Soft blocked: yes
 +        Hard blocked: no
 +```
 +
 +alors wlan0 est bloquée. Pour y remédier on débloque l'interface par la commande ''sudo rfkill unblock 0''
 +
 +#5- Installation et configuration du DHCP
 +Lorsqu'un client se connecte au point d'accès wifi on doit lui assigner une adresse ip. C'est le rôle de dnsmasq qui fera office à la fois de serveur dhcp ainsi que de cache DNS.
 +
 +On l'installe avec la commande : 
 +`sudo apt-get install dnsmasq`
 +
 +On fait une copie du fichier de configuration par défaut (ça peut toujours servir un jour...) :
 +
 +`sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak`
 +
 +On crée et on édite un nouveau fichier /etc/dnsmasq.conf en y insérant simplement :
 +
 +```
 +# On utilise l'interface wifi wlan0
 +interface=wlan0
 +#On définit une plage d'adresse ip ainsi que la durée du bail
 +dhcp-range=192.168.0.1,192.168.0.100,255.255.255.0,24h 
 +```
 +Bien entendu, à vous de dimensionner l'étendue de la plage d'adresses ainsi que la durée du bail en fonction du besoin. Dans cet exemple notre serveur dhcp pourra attribuer 100 adresses ip de 192.168.0.1 à 192.168.0.100, la bail est fixé à 24h avant renouvellement.
 +
 +#6- Mise en place du point d'accès Wifi
 +
 +On installe le logiciel hostapd par la commande :
 +
 +`sudo apt-get install hostapd`
 +
 +La configuration se fait en créant un fichier **/etc/hostapd/hostapd.conf** :
 +
 +===== Exemple 1 : Un simple point d'accès ouvert  =====
 +
 +```
 +# interface wlan du Wi-Fi
 +interface=wlan0
 +
 +# nl80211 avec tous les drivers Linux mac80211 
 +driver=nl80211
 +
 +# Nom du réseau Wi-Fi
 +ssid=Raspiwifi
 +
 +# mode Wi-Fi utilisé : a = IEEE 802.11a (5GHz) , b = IEEE 802.11b (2.4GHz), g = IEEE 802.11g) (2.4GHz)
 +hw_mode=g
 +
 +# canal de fréquence Wi-Fi (1-14)
 +channel=6
 +
 +```
 +Si votre réseau local n'a pas besoin d'être connecté à Internet, c'est une solution simple et rapide à mettre en œuvre mais dans un le cas contraire il serait peut être plus sage d'utiliser une clef WPA2...
 +
 +===== Exemple 2 : Un point d'accès avec clef WPA2 =====
 +
 +```
 +# interface wlan du Wi-Fi
 +interface=wlan0
 +
 +# nl80211 avec tous les drivers Linux mac80211 
 +driver=nl80211
 +
 +# Nom du réseau Wi-Fi
 +ssid=Raspiwifi
 +
 +# Sécurité activée
 +auth_algs=1
 +
 +#Type de clef
 +wpa=2
 +
 +#La clef
 +wpa_passphrase=CeciEstMaClefWPA2
 +
 +# Modes de sécurité
 +wpa_key_mgmt=WPA-PSK
 +wpa_pairwise=TKIP
 +rsn_pairwise=CCMP
 +
 +# mode Wi-Fi utilisé : a = IEEE 802.11a (5GHz) , b = IEEE 802.11b (2.4GHz), g = IEEE 802.11g) (2.4GHz)
 +hw_mode=g
 +
 +# canal de fréquence Wi-Fi (1-14)
 +channel=6
 +
 +```
 +
 +On indique à hostpad qu'il doit utiliser ce fichier de configuration en éditant le fichier **/etc/default/hostapd** afin qu'il contienne :
 +
 +`DAEMON_CONF="/etc/hostapd/hostapd.conf"`
 +
 +#7- On relance les services
 +
 +On (re)démarre le serveur dhcp :
 +
 +`sudo systemctl restart dnsmasq`
 +
 +On active le service hostapd :
 +
 +`sudo systemctl unmask hostapd`
 +
 +`sudo systemctl enable hostapd`
 +
 +`sudo systemctl start hostapd`
 +
 +#8 - On teste et on vérifie
 +
 +Si les services ont démarré sans message d'erreur alors votre point d'accès Wifi est en place, tentez de connecter un périphérique quelconque type smartphone, ordi, ESP...
 +Vous devriez voir les évènement consignés dans le fichier de log **/var/log/syslog**.
 +
 +Par exemple :
 +`cat /var/log/syslog`
 +
 +nous montre :
 +```
 +Apr  1 15:43:08 raspberrypi hostapd: wlan0: STA 28:48:ca:e9:da:ff IEEE 802.11: associated
 +Apr  1 15:43:08 raspberrypi hostapd: wlan0: STA 28:48:ca:e9:da:ff RADIUS: starting accounting session E2B35E97F7D9D551
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPDISCOVER(wlan0) 28:48:ca:e9:da:ff
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPOFFER(wlan0) 192.168.0.83 28:48:ca:e9:da:ff
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPDISCOVER(wlan0) 48:88:ca:f9:ea:dd
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPOFFER(wlan0) 192.168.0.83 28:48:ca:e9:da:ff
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPREQUEST(wlan0) 192.168.0.83 28:48:ca:e9:da:ff
 +Apr  1 15:43:11 raspberrypi dnsmasq-dhcp[974]: DHCPACK(wlan0) 192.168.0.83 28:48:ca:e9:da:ff
 +```
 +
 +Le service hostapd a bien associé le périphérique dont l'adresse MAC est : 28:48:ca:e9:da:ff
 +
 +Le serveur dnsmasq a bien répondu à la demande d'adresse ip du client en lui offrant l'adresse 192.168.0.83
 +
 +#9- Les baux d'adresse ip
 +On peut consulter les baux en cours d'utilisation par notre serveur dhcp en ouvrant le fichier **/var/lib/misc/dnsmasq.leases**
 +
 +Par exemple :
 +
 +`cat /var/lib/misc/dnsmasq.leases`
 +
 +Affiche 
 +
 +`1554216191 28:48:ca:e9:da:ff 192.168.0.83 * 28:48:ca:e9:da:ff`
 +
 +avec :
 +  * 1554216191 = expiration du bail en temps posix soit le nombre de secondes écoulées depuis le 1er janvier 1970
 +  * 28:48:ca:e9:da:ff = adresse MAC du client
 +  * 192.168.0.83 = adresse ip du client
 +  * * = nom de du périphérique (s'il est disponible) 
 +  * Client-ID s'il est disponible, sinon une nouvelle fois l'adresse MAC du client
 +
 +Si toutefois vous souhaitez résilier manuellement un bail il suffit de supprimer la ligne correspondante dans ce fichier.
 +
 +#10- Et si on leur donnait accès à Internet ?
 +
 +Jusqu'à présent les clients connectés au point d'accès du Raspberry Pi n'ont pas accès à Internet, si on veut leur ouvrir l'accès il reste un 'bridge' à configurer :
 +
 +  * Activer l'IP Forwarding en modifiant le fichier **/etc/sysctl.conf** pour dé-commenter la ligne (= supprimer le # devant)
 +
 +`net.ipv4.ip_forward=1`
 +
 +  * Ajouter une règle de parefeu : 
 +
 +`sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE`
 +
 +Pour rendre cette règle persistante après redémarrage :
 +
 +`sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"`
 + 
 +Puis on édite le fichier **/etc/rc.local** pour ajouter juste au dessus de la ligne *exit 0* :
 +
 +`iptables-restore < /etc/iptables.ipv4.nat`
 +
 +  * Construire un pont de connexion à l'aide de bridge-utils :
 +
 +On installe bridge-utils :
 +
 +`sudo apt-get install bridge-utils`
 +
 +On crée un nouveau pont nommé //br0// :
 +
 +`sudo brctl addbr br0`
 +
 +On connecte notre interface //eth0// au pont //br0// :
 +
 +`sudo brctl addif br0 eth0`
 +
 +On ajoute notre pont en tant qu'interface réseau en ajoutant au fichier /etc/network/interfaces :
 +
 +```
 +auto br0
 +iface br0 inet manual
 +bridge_ports eth0 wlan0
 +```
 +
 +Enfin on on modifie le fichier **/etc/hostapd/hostapd.conf** pour **ajouter __sous la ligne__** interface=wlan0 :
 +
 +`bridge=br0`
 +
 +Après redémarrage du système les clients ont accès à Internet !
  
  • howto/raspberry-pi/wirelessaccespoint.txt
  • Dernière modification: 2020/11/26 11:24
  • (modification externe)