Systemd-networkd

De ArchwikiFR

systemd offre maintenant la possibilité de gérer le réseau par lui-même sans outils supplémentaires tels que netctl ou NetworkManager.

Note : Cette page ne fait pas l'état complet de ce que peut faire systemd-networkd, veuillez vous référer au man(8) systemd-networkd. Il est ici seulement question d'une utilisation simple dans des conditions usuelles.

Configuration

La configuration se fait dans /etc/systemd/network dans des fichiers en .network.

Ethernet

Pour une connexion simple en DHCP sur l'interface eth0 :

Fichier: /etc/systemd/network/eth0.network
[Match]
Name=eth0

[Network]
DHCP=yes

Pour l'utiliser, il suffit d'activer les services :

systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service

Et puis c'est tout.

WiFi

Interfaces

Bon, bah c'est pas franchement plus dur (étrangement) ! Pour une interface IF0 :

Fichier: /etc/systemd/network/IF0.network
[Match]
Name=IF0

[Network]
DHCP=yes

Et ensuite il vous faut wpa_supplicant et le fichier /etc/wpa_supplicant/wpa_supplicant-IF0.conf (que vous pouvez compléter à partir de /etc/wpa_supplicant/wpa_supplicant.conf). Cf. Wifi également.

Fichier: /etc/wpa_supplicant/wpa_supplicant-IF0.conf
# Minimum vital, lisez le man et les commentaires de /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

Puis pour ajouter un réseau, c'est super compliqué facile :

wpa_passphrase ESSID >> /etc/wpa_supplicant/wpa_supplicant-IF0.conf

Non, vous ne révez pas, il n'y a bien qu'une unique ligne.

Note :
wpa_passphrase ESSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant-IF0.conf
Cette commande ne fonctionne pas avec certains caractères spéciaux - si besoin se servir, pour générer une clef, de la commande pwgen Ex : pwgen -1 63

Et pour finir, on démarre les bons services :

systemctl enable systemd-networkd.service
systemctl enable wpa_supplicant@IF0.service
systemctl start systemd-networkd.service
systemctl start wpa_supplicant@IF0.service

Et... c'est tout. Voilà. Fini. Je vous laisse lire le manuel de wpa_supplicant pour gérer la priorité des réseaux et les réseaux plus compliqués, genre eduroam.

Note : IF0 est à remplacer (partout) par le nom de votre interface wifi, listée dans ip a : ce peut être wlan0, wlp2s0 ou encore wls1. Par conséquent, les fichiers seront par exemple /etc/wpa_supplicant/wpa_supplicant-wlan0.conf et /etc/systemd/network/wlan0.network et le service, wpa_supplicant@wlan0.service.

Scanner les réseaux

Comme nous n'avons pas netctl, point de wifi-menu ! On utilise donc au choix iw ou iwlist qui est dans wireless_tools.

iw dev IF0 scan # | grep SSID
iwlist IF0 scanning # | grep ESSID
Note : Supprimez le '#' pour n'obtenir que le nom des différents réseaux disponibles.
Note : wifi-radar - par gksu ou kdesu - permet un scan en interface graphique

resolv.conf

Maintenant, on a systemd-networkd qui s'occupe de nous attribuer une adresse IP, mais quid du /etc/resolv.conf ? Il faut utiliser celui généré par systemd-resolved et créer un lien symbolique :

systemctl enable systemd-resolved.service
systemctl start systemd-resolved.service
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Ethernet et Wifi en même temps

Si vous utilisez à la fois une connection filaire et une connection wifi, il est possible de donner la priorité à l'une ou l'autre en utilisant l'option RouteMetric.

L'intéret est que si l'une des deux connections s'arrête, l'autre prendra automatiquement le relais. Pour chaque connection, il faut ajouter dans le fichier .network correspondant (et décrit ci-dessus) les instructions suivantes :

[DHCP]
RouteMetric=10

et mettre la valeur de RouteMetric la plus faible pour la connection prioritaire. Par exemple, 10 pour le filaire ; 20 pour le wifi.

(voir sur le wiki anglais : Wired and wireless adapters on the same machine, https://wiki.archlinux.org/index.php/Systemd-networkd#[DHCP] )