Un point d'accès Wifi sur votre Raspberry Pi

Date de publication: 20/12/2016

Bonjour à tous et à toutes, bande de geeks! :D Que ce soit pour bricoler, coder, jouer ou pour fouiner, avoir un accès à sa Raspberry Pi est essentiel. De par sa petite taille, elle est très mobile… Enfin, pas totalement.

En effet, pour avoir accès à l'invite de commande de la RPi (par SSH), il faut être connecté sur le même réseau que cette dernière (souvent filaire), ce qui n'est pas toujours le cas quand on est en déplacement. Mais alors, serait-il possible d'y accéder à n'importe quel moment ? La réponse est oui ! Comment ? En la configurant en tant que point d'accès Wifi.

D'ici là nous aurons la possibilité d'accéder à notre RPi à n'importe quel moment, sans avoir à passer par un réseau filaire. Créer un point d'accès (AP) est souvent un sujet à controverse sur Internet. La majorité des tutoriels ne sont pas complets ou n'expliquent pas les méthodes utilisées. Je vais donc tacher de vous expliquer le fonctionnement de ce déploiement, tout en restant très simple dans la réalisation. Motivés ? Alors c'est parti !

Prérequis

Commençons par le matériel requis pour ce projet:

En ce qui concerne l'adaptateur Wifi, je vous conseil très chaleureusement l'Edimax EW-7811Un, qui est très performant et à un prix dérisoire (5€). Une fois reçu, vous n'aurez qu'à le brancher pour le faire fonctionner. Aucune configuration n'est requise. La grande classe! Au niveau des logiciels nous utiliserons:

Pour être sûr d'avoir ces logiciels tapez la commande:

sudo apt-get install dnsmasq hostapd

Configuration des interfaces

La première chose que nous devons faire est de configurer notre interface wlan0 avec une adresse IP statique. Par défaut la nouvelle version de Raspbian utilise le service dhcpcd afin d'attribuer une adresse IP dynamique à la RPi. Nous devons donc lui dire d'ignorer l'interface wlan0 comme nous voulons la configurer avec une adresse IP statique. Ouvrons le fichier de configuration de dhcpcd avec la commande sudo nano /etc/dhcpcd.conf et ajoutons les lignes suivantes à la fin du fichier:

denyinterfaces wlan0

Maintenant nous devons configurer notre adresse IP statique. Pour ce faire, ouvrons le fichier de configuration des interfaces réseau de la RPi avec la commande sudo nano /etc/network/interfaces et éditons la section wlan0 pour qu'elle ressemble à ceci:

allow-hotplug wlan0  
iface wlan0 inet static  
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Redémarrons dhcpcd avec la commande sudo service dhcpcd restart et rechargeons la configuration pour wlan0 avec sudo ifdown wlan0; sudo ifup wlan0

Configuration de Hostapd

Maintenant, nous devons configurer hostapd afin de créer notre réseau Wifi. Générons son fichier de configuration avec sudo nano /etc/hostapd/hostapd.conf et mettons-y les lignes suivantes:

# Nom de l'interface Wifi
interface=wlan0
# Utilise le driver nl80211
driver=nl80211
# Le nom de notre point d'accès
ssid=Raspberry-Wifi
# Utilise la fréquence 2.4Ghz
hw_mode=g
# Utilise le canal 6
channel=6
# Active le 802.11n
ieee80211n=1
# Active le WMM
wmm_enabled=1
# Active les canaux 40MHz avec un intervalle de garde de 20ns
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# Accepte toutes les adresses MAC
macaddr_acl=0
# Utilise l'authentifiaction WPA
auth_algs=1
# Exiger que les clients connaissent le nom du réseau
ignore_broadcast_ssid=0
# Utilise WPA2
wpa=2
# Utilise une pre-shared key
wpa_key_mgmt=WPA-PSK
# Mot de passe du réseau
wpa_passphrase=raspberry
# Utilise AES, à la place de TKIP
rsn_pairwise=CCMP

Nous pouvons vérifier si notre réseau fonctionne pour le moment en tapant sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf Si tout va bien, vous devriez voir un réseau Raspberry-Wifi !

Si vous essayez de vous connecter à ce dernier, vous verez des lignes de log apparaître sur votre terminal, sans recevoir aucune adresse IP. C'est normal, car notre RPi n'a pas encore de serveur DHCP de configuré. Pour stopper le test, tapez sur Ctrl+C. Pour en finir avec Hostapd, nous devons lui préciser le chemin vers son fichier de configuration. Pour ce faire, il faut remplacer dans le fichier /etc/default/hostapd la ligne #DAEMONCONF=””_ avec DAEMONCONF=”/etc/hostapd/hostapd.conf”_

Configuration de DnsMasq

Le fichier de configuration de DnsMasq contient des tonnes d'informations qui peuvent être utiles. Comme nous allons le modifier intégralement, il est plus sage de le sauvegarder avant toute manipulation:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup
sudo nano /etc/dnsmasq.conf

Une fois en train d'éditer le fichier, placez-y ces lignes:

interface=wlan0      # Utilise l'interface wlan0  
listen-address=192.168.1.1 # Adresse d'écoute  
bind-interfaces      
server=192.168.1.1
dhcp-range=192.168.1.50,192.168.1.150,12h # Assigne des IP entre 50 et 150 pendant un bail de 12H

Redirection avec IpTables

Enfin, nous devons préciser à notre Raspberry Pi de redireiger les paquets qu'elle reçoit sur son interface wlan0 vers eth0. Pour cela, tapez simplement:

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 rendre persistantes ces règles, nous devons simplement installer le logiciel iptables-persistent via la commande:

sudo apt-get install iptables-persistent

Terminé !

Ah bon déjà ?! Je commençais tout juste à m'échauffer ! :(

Désolé de te décevoir, mais notre réseau Wifi est totalement opérationnel. Pour que tous les changements soient bien pris en compte, redémarrez la RPi avec sudo reboot Rappelez-vous, votre RPi a l'adresse 192.168.1.1 sur son réseau Wifi. Une fois connecté au réseau, vous pouvez y accéder comme sur n'importe quel autre réseau. Dans un prochain article je vous apprendrai à mettre en place un serveur Samba afin de partager des fichiers sur le réseau très facilement (encore une fois). :)

J'espère que ce tutoriel vous a plut! Si c'est le cas, n’hésitez pas à le partager et à me le dire 🙂 Je vous donne rendez-vous pour un nouvel article, en attendant Stay Tuned!