Vendredi 23 novembre 2018

2017-06-03-raspberry-hotspot-wifi

Raspbian/Raspberry

Créer un hotspot WiFi sur Raspberry

Un point d’accès WiFi peut être utile dans de nombreux projets à base de Raspberry Pi : créer un mini routeur pour partager une connexion réseau filaire ou simplement permettre la connexion de périphériques réseaux à un système isolé de tout réseau (Raspberry Pi embarqué dans une voiture par exemple). Nous allons voir comment mettre en place très simplement un point d’accès WiFi complet.

Il existe une multitude d’adaptateurs WiFi USB : miniature pour un encombrement minimal, avec antenne pour une meilleure portée, compatible normes g/n/ac… Certains sont compatibles directement avec Raspbian, d’autres nécessitent l’installation de pilotes spécifiques. Il faut se renseigner sur la compatibilité de l’adaptateur avant tout achat. Le site eLinux.org est une mine d’or pour trouver ce genre d’information.

Adaptateur TP-LINK TL-WN821N. Il faut vérifier que votre adaptateur supporte le mode Access Point (AP).

Cas spécifique le Raspberry Pi dans sa version 3 embarque directement un chipset WiFi, il n’est donc pas nécessaire d’en acquérir un connectable en USB.

Préparation logicielle

L’ensemble des manipulations ont été effectuées sur la distribution Raspbian Jessie Lite (mettre à jour le système et le firmware) .

Nous allons installer hostapd le « moteur » du point d’accès et udhcpd un serveur DHCP permettant d’attribuer automatiquement les adresses IP aux périphériques :

sudo apt install hostapd udhcpd

Vérification initiale

Après avoir connecté notre adaptateur WiFi en USB (A faire HORS TENSION), vérifions que celui-ci est bien reconnu par Raspbian :

lsusb

Dans mon cas une ligne concerne mon adaptateur WiFi dans la réponse de la commande :

Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter

Il est possible que votre périphérique ai besoin de pilotes spécifiques pour fonctionner sur Raspbian. Dans ce cas il faut vous renseigner en fonction de l’adaptateur que vous avez choisi.

On vérifie ensuite les modes supportés par l’adaptateur :

iw list

Dans la catégorie Supported interface modes il faut que le mode mode AP soit présent.

[...]
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * monitor
		 * P2P-client
		 * P2P-GO
[...]

Configuration DHCP et réseau

Pour que les clients sans-fil connectés à notre point d’accès Raspberry Pi puissent communiquer il leur faut une adresse IP. On configure donc un serveur DHCP pour délivrer automatiquement ces adresses.

Edition du fichier de configuration /etc/udhcpd.conf via nano par exemple :

sudo nano /etc/udhcpd.conf
# Début et fin de la plage d'adresses IP
start           192.168.55.2
end             192.168.55.15

# L'interface réseau utilisée par le serveur DHCP
interface       wlan0

max_leases	    10

# Quelques options des baux DHCP                              
remaining       yes
opt     dns     208.67.222.222 208.67.220.220     # OpenDNS
option  subnet  255.255.255.0
opt     router  192.168.55.1
option  lease   864000                            # 10 jours en secondes

Editer le fichier /etc/default/udhcpd et commenter la ligne suivante pour activer le DHCP :

DHCPD_ENABLED="no" en # DHCPD_ENABLED="no"

Créer un fichier “DHCP lease” vide qui sera automatiquement rempli plus tard par udhcpd

sudo touch /var/lib/misc/udhcpd.leases 

Désactiver le client DHCP pour l’interface wlan0 en ajoutant la ligne denyinterfaces wlan0 à la fin du fichier /etc/dhcpcd.conf mais avant toute ligne interface .

Editer le fichier de configuration /etc/network/interfaces et modifier la configuration pour l’interface wlan0 afin de lui attribuer une adresse IP fixe :

allow-hotplug wlan0  
iface wlan0 inet static  
    address 192.168.55.1
    netmask 255.255.255.0
    network 192.168.55.0

On applique ensuite la configuration en redémarrant le client DHCP et l’interface wlan0 :

sudo service dhcpcd restart
sudo ifdown wlan0
sudo ifup wlan0

Configuration du point d’accès WiFI

Créer le fichier de configuration /etc/hostapd/hostapd.conf

Exemple de configuration pour un point d’accès WiFi norme N nommé WN821N et sécurisé WPA2-PSK

interface=wlan0
driver=nl80211
ssid=WN821N
hw_mode=g
channel=0
ieee80211d=1
country_code=FR
ieee80211n=1
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=85xeQmX9
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

Exemple de configuration pour un point d’accès WiFi norme N nommé Code4Pi_AP et non sécurisé

interface=wlan0
driver=nl80211
ssid=Code4Pi_AP
hw_mode=g
channel=0
ieee80211d=1
country_code=FR
ieee80211n=1
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

Quelques indications sur les paramètres :

  • interface : Interface de votre adaptaeur wifi qui sert de point d’accès.
  • driver : A modifier si vous utiliser un autre pilote pour un adaptateur spcifique.
  • ssid : Nom de votre point d’accès WiFi (à entourer de guillemets s’il y a des espaces).
  • hw_mode : Définit la bande de fréquence à utiliser ( g pour 2,4GHz, a pour 5GHz)
  • channel : Canal WiFi à utiliser. Les valeurs conseillées sont 1 , 6 ou 11 . La valeur 0‌ correspond à un choix automatique.
  • ieee80211d : Limite les fréquences utilisables à celles autorisées dans le pays ( 0‌ désactivé, 1 activé).
  • country_code : Code pays
  • ieee80211n : Support de la norme 802.11n ( 0‌ désactivé, 1 activé).
  • ieee80211ac : Support de la norme 802.11ac ( 0‌ désactivé, 1 activé).
  • wmm_enabled : Support de la QoS ( 0‌ désactivé, 1 activé).
  • macaddr_acl : Restriction d’accès par adresse MAC ( 0‌ accès sauf si dans la liste noire, 1 refus d’accès sauf si dans la liste blanche)
  • auth_algs : Algorithme de sécurité ( 1 pour wpa, 2 pour wep, 3 pour les deux)
  • ignore_broadcast_ssid : Rendre le nom du point d’accès invisible ( 0‌ désactivé, 1 activé).
  • wpa : Activer le WPA
  • wpa_passphrase : Mot de passe de votre point d’accès (metter des guillemets si il y a des espaces et un minimum 5 caractères).
  • wpa_key_mgmt : Algorithme de clefs autorisées
  • rsn_pairwise : Algorithme de chiffrement pour WPA2

Indiquer dans le fichier /etc/default/hostapd l’emplacement de notre configuration en renseignant le paramètre DAEMON_CONF :

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

Activer le Hotspot WiFi et le serveur DHCP :

sudo service hostapd start
sudo service udhcpd start

A cette étape vous devriez disposer d’un point d’accès visible depuis vos périphériques WiFi. Cependant celui-ci ne permet que de contacter notre Raspberry ou les autres périphériques connectés à ce point d’accès. Pour l’utiliser en tant que « routeur WiFi » et disposer également de la connectivité internet fournie par le port ethernet il est nécessaire de configurer quelques éléments supplémentaires. Configurer le NAT

Le NAT (Network Address Translation) est une technique permettant à différents périphériques d’utiliser une unique connexion à internet. C’est le cas de la box de votre FAI par exemple. C’est le NAT qui va vous permettre de partager la connexion filaire de votre Raspberry Pi vers les différents périphériques connectés à votre point d’accès WiFi.

Activer l’IP forwarding via la commande :

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

Editer le fichier /etc/sysctl.conf et décommenter la ligne net.ipv4.ip_forward=1 pour activer le paramètre à chaque démarrage.

Executer les différentes commandes pour activer le routage correct des données.

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

Sauvegarder les nouvelles règles

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

Ajouter les règles au fichier de configuration principale via la ligne suivante à la fin du fichier /etc/network/interfaces

up iptables-restore < /etc/iptables.ipv4.nat

Votre point d’accès est alors pleinement fonctionnel !