/ home / ap

Point d'accés WiFi avec iwd et systemd-networkd

Cet article est en cours de rédaction.
Pour plus d'informations sur iwd et systemd-networkd suivez ces liens.

Introduction

Il n'est pas nécessaire d'acheter un repéteur WiFi si vous avez un Raspberry Pi ou un petit appareil qui traine chez vous. Personellement je me sers de mon serveur comme point d'accés supplémentaire.

Configuration d'iwd

Exemple de fichier profile pour un point d'accés /var/lib/iwd/ap/<SSID>.ap :

[Security]
Passphrase=<PASSWORD>
Plus d'informations sur comment configurer ce fichier ici.

Pour démarrer le point d'accés il faut ensuite lancer les commandes suivantes :

/usr/bin/iwctl device <INTERFACE> set-property Mode ap
/usr/bin/iwctl ap <INTERFACE> start-profile <SSID>

La première commande permet de configurer l'interface en mode access point et la deuxième permet de charger le profil.

Vous pouvez écrire des services systemd pour que le point d'accés démarre automatiquement.

Je vous recommande de créer un fichier de variables d'environnement pour définir le nom du point d'accés. Ce sera plus simple a gérer si vous avez plusieurs interface Wi-Fi

Exemple de fichier de variables d'environnement /etc/<INTERFACE>.env :

NETWORK_NAME=<SSID>

Exemple de fichier service pour initialiser l'interface en mode access point : /etc/systemd/system/ap-init@.service

[Unit]
Description=configuration of access point for %i
After=iwd.service
Before=systemd-networkd.service

[Service]
Type=oneshot
ExecStart=/usr/bin/iwctl device %i set-property Mode ap
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Exemple de fichier service pour démarrer le point d'accés : /etc/systemd/system/ap@.service

[Unit]
Description=profile for %i
After=network.target
Requires=ap-init@%i.service

[Service]
Type=oneshot
ExecStart=/usr/bin/iwctl ap %i start-profile ${NETWORK_NAME}
ExecStop=/usr/bin/iwctl ap %i stop
RemainAfterExit=yes

EnvironmentFile=/etc/%i.env

[Install]
WantedBy=multi-user.target

Pour aciver les services lancer la commande suivante avec le nom de l'inerface souhaitée : systemctl enable ap-init\@<INTERFACE>.service ap\@<INTERFACE>.service

Configuration de systemd-networkd

Plusieurs configurations sont possible mais je préfère la méthode du bridge pour ne pas avoir de sous-réseau.

Exemple de fichier NetDev pour l'interface bridge /etc/systemd/network/00-br0.netdev :

[NetDev]
Name=br0
Kind=bridge

Exemple de fichier Network pour l'interface bridge /etc/systemd/network/00-br0.network :

[Match]
Name=br0

[Link]
RequiredForOnline=routable

[Network]
Address=192.168.1.2/24
Gateway=192.168.1.1
DNS=192.168.1.2

Address=fc01::2/120
DNS=fc01::2

DHCP=ipv6
IPv6AcceptRA=yes

Exemple de fichier Network pour l'interface Ethernet/etc/systemd/network/10-ether.network :

[Match]
MACAddress=<MAC_ADDRESS>

[Network]
Bridge=br0

Exemple de fichier Network pour l'interface WiFi /etc/systemd/network/20-wlan.network :

[Match]
MACAddress=<MAC_ADDRESS>

[Network]
Bridge=br0

Oui les fichiers sont bien identiques, vous pouvez ajouter autant d'interface que vous le souhaitez désormais...