━━━ Configuration d'un point d'accès ━━━
Nous parlons d'un point d'accès avec un port Ethernet eth0 .
Si vous voulez un point d'accès avec une connexion client wlan0 à un autre réseau wifi (répéteur wlan), regardez le point d'accès comme routeur / répéteur WiFi, en option avec pont .
Il est possible de configurer Raspbian Stretch comme point d'accès wifi sans installer de logiciel supplémentaire. Tous les composants nécessaires sont disponibles: la mise en réseau, le serveur DHCP et le pontage sont fournis avec systemd-networkd et le wifi peut être configuré avec wpa_supplicant . La connexion de deux interfaces eth0 et wlan0 peut se faire par routage ou par pontage. Ci-dessous d'abord la configuration pour une installation rapide, puis les détails. Nous devons d'abord passer à systemd-networkd .
Testé avec
Raspbian Buster Lite 2019-09-26 sur un Raspberry Pi 4B mis à jour le 2020-01-18.
Mises à jour effectuées avec sudo apt update && sudo apt full-upgrade && sudo reboot
.
Vous trouverez ici la dernière révision testée des versions précédentes de Raspbian .
♦ Configuration générale
Passez à systemd-networkd
Pour des informations détaillées, consultez (1) et Comment configurer la résolution de noms avec systemd-networkd . Ici seulement en bref. Exécutez ces commandes:
# deinstall classic networking
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp
# setup systemd-resolved
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
rpi ~# systemctl enable systemd-resolved.service
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service
Configurer wpa_supplicant comme point d'accès
Configurer wpa_supplicant comme point d'accès créer ce fichier avec vos paramètres pour country=
, ssid=
, psk=
et peut - être frequency=
. Vous pouvez simplement copier et coller ceci dans un bloc sur votre ligne de commande en commençant par cat
et en incluant les deux EOF (le délimiteur EOF n'obtiendra pas une partie du fichier):
rpi ~# cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="RPiNet"
mode=2
frequency=2437
#key_mgmt=NONE # uncomment this for an open hotspot
# delete next 3 lines if key_mgmt=NONE
key_mgmt=WPA-PSK
proto=RSN WPA
psk="password"
}
EOF
rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
Configuration générale terminée. Retourner.
♦ Configuration d'un point d'accès autonome
Exemple pour cette configuration:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Faire "Configuration générale" puis créez le fichier suivant pour configurer wlan0 . Nous n'avons que le point d'accès. Aucun périphérique Ethernet n'est configuré.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
EOF
Si vous le souhaitez, redémarrez.
C'est ça.
Sinon, continuez, pas besoin de redémarrer pour le moment.
♦ Mise en place d'un point d'accès et avec eth0, sans routage
Exemple pour cette configuration:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Installer
Faites "Configuration d'un point d'accès autonome" puis créez le fichier suivant pour configurer eth0 .
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Redémarrez.
C'est ça.
Détails
L'interface eth0 est connectée avec un câble Ethernet au routeur Internet et obtient sa configuration par DHCP à partir du routeur Internet. Ce n'est pas un problème de lui donner une adresse IP statique avec par exemple Address=192.168.50.2
au lieu deDHCP=yes
.
Sans routage, vous ne pouvez pas accéder à Internet avec le téléphone portable. Vous ne pouvez y accéder qu'à partir du RPi lui-même pour obtenir des mises à jour ou quelque chose du genre.
♦ Mise en place d'un point d'accès et avec eth0, avec NAT (recommandé)
Exemple pour cette configuration:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Installer
Faites "Configuration générale" puis créez les fichiers suivants pour configurer wlan0 et eth0 . Si vous avez essayé l'une des configurations précédentes, vous pouvez simplement remplacer les deux fichiers. Assurez-vous que vous utilisez un sous-réseau différent pour le point d'accès que celui du routeur. Dans cet exemple, le routeur n'utilise pas le sous-réseau 192.168.4.0/24. Si vous avez besoin d'un autre sous-réseau, changez simplement la ligne d'adresse, par exemple Address=192.168.5.1/24
.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
# IPMasquerade is doing NAT
IPMasquerade=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
IPForward=yes
EOF
Redémarrez.
C'est ça.
Détails
Si vous n'avez pas accès au routeur Internet, vous pouvez le simuler avec NAT (traduction d'adresse réseau) pour dire que tous les paquets proviennent de votre RasPi AP. Mais ce n'est pas un routage propre et a des limites. Les clients sur le sous-réseau du routeur ne peuvent pas se connecter aux clients sur le wifi. Mais dans la plupart des cas, cela n'est pas nécessaire, cette configuration est donc recommandée car elle simplifie la configuration. Si vous devez vous connecter aux clients wifi à partir du réseau de routeurs, vous devez utiliser le routage complet comme décrit dans la section suivante.
♦ Mise en place d'un point d'accès et avec eth0, avec routage
Exemple pour cette configuration:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Installer
Faites "Configuration générale" puis créez les fichiers suivants pour configurer wlan0 et eth0 . Si vous avez essayé l'une des configurations précédentes, vous pouvez simplement remplacer les deux fichiers. Assurez-vous que vous utilisez différents sous-réseaux pour le point d'accès et le réseau du routeur. Nous devons utiliser des adresses IP statiques car nous devons les utiliser comme passerelles.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.50.2/24
Gateway=192.168.50.1
DNS=84.200.69.80 1.1.1.1
IPForward=yes
EOF
Redémarrez.
Pour que le routage fonctionne correctement, vous devez définir un itinéraire statique dans votre routeur Internet afin qu'il puisse trouver l'itinéraire pour les paquets à venir sur RasPi vers les clients connectés par wifi au point d'accès. Sur la plupart des routeurs Internet, vous pouvez définir un itinéraire statique, mais la façon de procéder varie d'un modèle à l'autre. A vous de le découvrir. Par exemple, votre RasPi eth0 interface a l'adresse IP statique 192.168.50.2. Ensuite, sur votre routeur, la passerelle (saut suivant) est 192.168.50.2, le réseau de destination est 192.168.4.0/24 (ou 192.168.4.0 masque de réseau 255.255.255.0).
Cela signifie pour le routeur Internet: "envoyer tous les paquets appartenant au sous-réseau 192.168.4.0/24
(réseau de destination d'AP) au routeur suivant sur mon sous-réseau, le RasPi AP 192.168.50.2
(passerelle). Il sait où aller."
C'est ça.
♦ Mise en place d'un point d'accès avec un pont
Exemple pour cette configuration:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Si vous avez déjà un réseau Ethernet avec serveur DHCP et routeur Internet et que vous souhaitez l'étendre avec un point d'accès wifi mais avec les mêmes adresses IP, vous utilisez un pont. Ceci est souvent utilisé comme liaison montante vers un routeur.
Installer
Effectuez "Configuration générale" puis créez les trois fichiers suivants pour configurer les interfaces réseau. Si vous avez essayé l'une des configurations précédentes, vous pouvez simplement supprimer tous les fichiers /etc/systemd/network/
sauf 99-default.link
s'ils sont présents. Les adresses IP sont des exemples. Vous devez utiliser le vôtre.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF
rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
MulticastDNS=yes
DHCP=yes
# to use static IP uncomment these and comment DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
Maintenant, nous devons dire à wpa_supplicant d'utiliser un pont. Nous le faisons en modifiant son service avec:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
Dans l'éditeur vide, insérez ces instructions, enregistrez-les et quittez l'éditeur:
[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0
ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed
Redémarrez.
C'est ça.
Détails
Nous devons dire à wpa_supplicant que son interface wlan0 est esclave d'un pont. Sinon, il rejettera la connexion du client avec un «mot de passe incorrect» signifie que la négociation de clé ne fonctionne pas. Lorsque nous disons à / sbin / wpa_supplicant avec l'option -dbr0
d'utiliser un pont pour wlan0, l'interface doit déjà être membre du pont. C'est ce que nous faisons avec le fichier de dépôt (superposition) pour le service wpa_supplicant . L'instruction vide ExecStart=
supprime l'ancienne entrée. Sinon, vous avez deux lignes ExecStart=
et wpa_supplicant démarre deux fois. L'original ExecStart=
avec lequel vous pouvez voir systemctl cat wpa_supplicant@wlan0.service
.
Normalement, le routeur auquel vous êtes connecté avec le câble Ethernet a un serveur DHCP activé. Le pont est également transparent pour les requêtes DHCP des stations (périphériques connectés au point d'accès), vous n'avez donc pas à vous soucier de la configuration de ses interfaces avec les adresses IP et les options. Le routeur le servira.
excursus:
Mais si le routeur n'a pas de serveur DHCP, vous pouvez en configurer un sur le RasPi. systemd-networkd a des options pour configurer son serveur DHCP intégré mais le problème est que systemd-networkd suppose qu'il s'exécute sur le routeur lui-même et ce n'est pas vrai dans ce cas. Il servira de mauvaises options aux stations, en particulier l' option routeur . Il n'y a aucun moyen de le configurer. Nous devons donc installerdnsmasq
dans ce cas qui peut être configuré selon les besoins. Installez-le et configurez-le avec (par exemple, utilisez vos propres adresses IP):
rpi ~$ sudo -Es
rpi ~# apt install dnsmasq
rpi ~# systemctl stop dnsmasq
rpi ~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
rpi ~# cat > /etc/dnsmasq.conf <<EOF
interface=br0
dhcp-range=192.168.50.128,192.168.50.164,255.255.255.0,24h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
EOF
rpi ~# systemctl start dnsmasq
rpi ~# exit
rpi ~$
Dans cet exemple, les adresses IP 192.168.50.128 à 192.168.50.164 sont réservées à donner aux stations. Pour les autres adresses IP statiques, utilisez-en une en dehors de ce pool, ainsi que l'adresse IP du pont lui-même.
♦ Optimisation
Au démarrage de wpa_supplicant, vous obtenez principalement ces messages dans le journal:
wpa_supplicant[427]: random: Cannot read from /dev/random: Resource temporarily unavailable
wpa_supplicant[427]: random: Only 12/20 bytes of strong random data available from /dev/random
wpa_supplicant[427]: random: Not enough entropy pool available for secure operations
wpa_supplicant[427]: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
Ce n'est pas un gros problème. wpa_supplicant a besoin de nombres aléatoires pour générer des clés de chiffrement. Cela se fait un peu lentement, il faut donc attendre. Heureusement , le Raspi a une construction en T rue R Andom N mbre G enerator (TRNG). Nous pouvons l'utiliser et accélérer l'obtention de nombres aléatoires en installant un logiciel (3) avec:
rpi ~$ sudo apt install rng-tools
Mise à jour:
depuis Raspbian Stretch 2019-04-08 il n'est pas nécessaire d'installer rng-tools
. Ils sont installés par défaut.
♦ Dépannage
systemd-networkd
Regardez le statut d'un service:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
Ou même un peu plus:
rpi ~$ journalctl --boot --pager-end
J'ai trouvé utile de suivre la journalisation en cours:
rpi ~$ journalctl --boot --follow
Si vous avez créé un fichier, vous pouvez consulter le résultat:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Pour vérifier l'environnement d'exécution d'une unité, vous pouvez l'afficher et par exemple regarder s'il y a deux ExecStart=
lignes:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
Et si rien d'autre ne vous aide, vous pouvez activer l'option de débogage à partir de /sbin/wpa_supplicant
avec -d
dans un fichier déposé:
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0 -d
La sortie est dans le journal. De cette façon, j'ai trouvé le problème avec la mauvaise négociation de clé.
Wifi
Si vous avez configuré le point d'accès, vous devriez le trouver avec un téléphone portable. Affichage des réseaux disponibles, il est présenté avec le nom RPiNet et vous pouvez vous y connecter. Sur le RasPi, vous pouvez également utiliser la commande:
rpi ~$ sudo iw dev wlan0 info
phy#0
Interface wlan0
ifindex 3
wdev 0x2
addr b8:27:eb:06:e8:8b
ssid RPiNet
type AP
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
Comme vous pouvez le voir, il s'agit du type AP (point d'accès) et il vous montrera également quel canal il utilise. Un problème peut être de traduire un canal en fréquence. La fréquence doit correspondre à un canal. Vous pouvez consulter (2) pour une liste des canaux WLAN. Par exemple , pour le canal d'utilisation 36 sur la bande 5,1 GHz , vous devez définir frequency=5180
dans /etc/wpa_supplicant\wpa_supplicant.conf
. Mais vous devez être sûr que votre wifi prend en charge la bande 5,1 GHz. Vous pouvez vérifier avecsudo iw phy
. Cela vous donnera un tas d'informations. Il doit également contenir des fréquences prises en charge supérieures à 5000 MHz. Si vous ne voyez que des fréquences de 24xx MHz, vous ne pouvez bien sûr l'utiliser que.
Un autre point pourrait être des nombres aléatoires. Pour chiffrer les clés des connexions sécurisées, wpa_supplicant a besoin de nombres aléatoires. Générer cela est très lent sur un Raspberry Pi. S'il n'a pas suffisamment d'entropie pour générer des clés de chiffrement, wpa_supplicant rejettera l'authentification. Vous pouvez voir avec cat /proc/sys/kernel/random/entropy_avail
combien d'entropie est disponible. Il devrait être> 1000 pour fonctionner assez rapidement. Pour accélérer cela, les rng-tools
sont installés par défaut. Consultez la section Optimisation pour plus d'informations.
références:
[1] Comment migrer du réseau vers systemd-networkd avec basculement dynamique
[2] Liste des canaux WLAN
[3] Rng-tools