netctl (Français)

From ArchWiki

État de la traduction: Cet article est la version francophone de netctl. Date de la dernière traduction: 2022-10-21. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

netctl est un gestionnaire de réseau en ligne de commande basé sur des profils et un projet Arch.

Installation

Installez le paquet netctl.

Les #Unités spéciales de systemd de netctl utilisées dans l'automatisation des connexions requièrent quelques dépendances supplémentaires ; consultez cette section pour plus d'informations.

D'autres dépendances optionnelles sont présentées dans le tableau ci-dessous.

Fonctionnalité Dépendance
WPA wpa_supplicant
DHCP dhcpcd ou dhclient
wifi-menu dialog
PPPoE ppp
Attention: Ne pas activer de services réseau concurrents et conflictuels. Utilisez systemctl --type=service pour vous assurer qu'aucun autre service réseau n'est en cours d'exécution avant d'activer un profil/service netctl.

Configuration

netctl utilise des profils pour gérer les connexions réseau et différents modes de fonctionnement pour lancer les profils automatiquement ou manuellement à la demande.

Les fichiers de profil netctl sont stockés dans /etc/netctl/ et des fichiers de configuration d'exemple sont disponibles dans /etc/netctl/examples/.

Pour utiliser un profil d'exemple, il suffit de le copier de /etc/netctl/examples/ vers /etc/netctl/ et de le configurer en fonction de vos besoins ; voir les #Exemples de profils de base ci-dessous. Le premier paramètre dont vous avez besoin pour créer un profil est l'Interface réseau, consultez Network configuration#Network interfaces pour plus de détails.

Astuce:
  • Pour les paramètres sans fil, vous pouvez utiliser wifi-menu en tant que root pour générer le fichier de profil dans /etc/netctl/. Le paquet dialog est nécessaire pour utiliser wifi-menu.
  • Utilisez SkipNoCarrier=yes dans votre profil pour activer un profil IP statique sur une interface filaire, que le câble soit connecté ou non.

Voir netctl.profile(5) pour une liste complète des options de profil.

Utilisation

Voir netctl(1) pour une liste complète des commandes netctl.

Démarrer un profil

Une fois que vous avez créé votre profil, essayez d'établir une connexion, où profil est seulement le nom du profil, pas le chemin complet :

# netctl start profil

Si la commande ci-dessus échoue, exécutez journalctl -xn en tant que root et netctl status profile pour obtenir une explication plus approfondie de l'échec.

Activation d'un profil

Un profil peut être activé pour démarrer au démarrage en utilisant :

# netctl enable profil

Cela créera et activera un service systemd qui démarrera au démarrage de l'ordinateur. Les modifications apportées au fichier de profil ne se propageront pas automatiquement au fichier de service. Après de telles modifications, il est nécessaire de réactiver le profil :

# netctl reenable profil

Après avoir activé un profil, celui-ci sera lancé au prochain démarrage. Évidemment, cela ne peut réussir que si le câble réseau pour une connexion filaire est branché, ou si le point d'accès sans fil utilisé dans un profil est à portée respectivement.

Si vous devez changer fréquemment de profil (par exemple, si vous voyagez avec un ordinateur portable), utilisez #Unités spéciales de systemd au lieu d'activer un profil.

Unités spéciales de systemd

netctl fournit des services spéciaux systemd pour la commutation automatique des profils pour les connexions filaires et sans fil. Voir netctl.special(7) pour une liste complète des unités spéciales de systemd.

Filaire

Installez le paquet ifplugd et démarrez/activez l'unité systemd netctl-ifplugd@interface.service. Les profils DHCP seront démarrés/arrêtés lorsque le câble réseau est branché/débranché.

  • L'unité netctl-ifplugd@interface.service préférera les profils qui utilisent DHCP.
  • Pour démarrer automatiquement un profil d'IP statique, l'option ExcludeAuto=no doit être définie dans celui-ci.
  • Pour donner la priorité à un profil d'IP statique par rapport aux profils DHCP, vous pouvez définir l'option Priority=2, qui est supérieure à la priorité par défaut accordée aux profils DHCP, à savoir Priority=1.

Sans fil

Démarrez/activez l'unité systemd netctl-auto@interface.service. Les profils netctl seront démarrés/arrêtés automatiquement lorsque vous passez de la portée d'un réseau à la portée d'un autre réseau (itinérance).

  • Les profils doivent utiliser Security=wpa-configsection ou Security=wpa pour fonctionner avec netctl-auto plutôt que Security=wpa-config.
  • Si vous voulez qu'un profil sans fil ne soit pas lancé automatiquement par netctl-auto@interface.service, vous devez explicitement ajouter ExcludeAuto=yes à ce profil.
  • Vous pouvez utiliser priority= dans la section WPAConfigSection (voir /etc/netctl/examples/wireless-wpa-configsection) pour définir la priorité d'un profil lorsque plusieurs points d'accès sans fil sont disponibles. Les chiffres les plus grands indiquent une priorité plus élevée.

Notez que interface n'est pas littéral, mais doit être substitué par le nom de l'interface de votre périphérique, par exemple netctl-auto@wlp4s0.service. Voir netctl.profile(5) pour plus de détails.

Note:
  • Si l'un des profils contient des erreurs, comme une variable Key= vide ou mal citée, le chargement de l'unité échouera avec le message "Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf', même si ce profil n'est pas utilisé.
  • Si vous avez précédemment activation d'un profil via netctl, exécutez netctl disable profil pour empêcher le profil de démarrer deux fois au démarrage.

Il est possible de contrôler manuellement une interface autrement gérée par netctl-auto sans avoir à arrêter netctl-auto.service. Ceci est fait en utilisant la commande netctl-auto. Pour une liste complète des actions disponibles, voir netctl-auto(1).

Trucs et astuces

Exemples de profils

Filaire

Pour une connexion DHCP, seule l'interface Interface doit être configurée après avoir copié le profil exemple /etc/netctl/examples/ethernet-dhcp dans /etc/netctl.

Par exemple :

/etc/netctl/mon_profil_dhcp
Interface=enp1s0
Connection=ethernet
IP=dhcp

Pour une configuration IP statique, copiez le profil d'exemple /etc/netctl/examples/ethernet-static dans /etc/netctl et modifiez Interface, Address, Gateway et DNS) selon les besoins.

Par exemple :

/etc/netctl/mon_profil_statique
Interface=enp1s0
Connection=ethernet
IP=static
Address=('10.1.10.2/24')
Gateway='10.1.10.1'
DNS=('10.1.10.1')

Prenez soin d'inclure la notation de sous-réseau de /24. Elle équivaut à un masque de réseau de 255.255.255.0) et sans elle, le profil ne pourra pas démarrer. Voir également CIDR notation. Pour aliaser plus d'une adresse IP par un ensemble de NIC Address=('10.1.10.2/24' '192.168.1.2/24'). Pour aliaser plus d'un ensemble d'adresses de serveurs DNS, définissez par exemple DNS=('1.1.1.1' '1.0.0.1').

Sans fil (WPA-PSK)

Ce qui suit s'applique aux connexions sans fil standard utilisant une clé pré-partagée (WPA-PSK).

/etc/netctl/wireless-wpa
Description='A simple WPA encrypted wireless connection using 256-bit PSK'
Interface=wlp2s2
Connection=wireless
Security=wpa
IP=dhcp
ESSID=your_essid
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
Note:
  • Assurez-vous d'utiliser les règles de citation spéciales pour la variable Key comme expliqué dans netctl.profile(5) § SPECIAL QUOTING RULES.
  • Si la phrase de passe échoue, essayez de supprimer le \" de la variable Key.
  • Bien que "chiffrée", la clé que vous mettez dans la configuration du profil est suffisante pour se connecter à un réseau WPA-PSK. Par conséquent, ce processus n'est utile que pour cacher la version lisible par l'homme de la phrase de passe. Cela n'empêchera pas quiconque ayant un accès en lecture à ce fichier de se connecter au réseau.

Obfusquer la phrase de passe sans fil

Vous pouvez également suivre l'étape suivante pour obscurcir la phrase de passe sans fil (wifi-menu le fait automatiquement lorsque vous utilisez le paramètre -o) :

Les utilisateurs qui ne souhaitent pas que la phrase de passe de leur réseau sans fil soit stockée en texte clair ont la possibilité de stocker la clé pré-partagée 256 bits correspondante, qui est calculée à partir de la phrase de passe et du SSID à l'aide d'algorithmes standard.

Calculez votre clé pré-partagée de 256 bits en utilisant wpa_passphrase :

$ wpa_passphrase votre_essid
network={
  ssid="your_essid"
  #psk="passphrase"
  psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
}

La clé pré-partagée (psk) doit maintenant remplacer la phrase de passe en texte clair de la variable Key dans le profil.

Utilisation d'une interface graphique expérimentale

Si vous voulez une interface utilisateur graphique pour gérer netctl et vos connexions et que vous n'avez pas peur des paquets non officiels très expérimentaux, il existe quelques options disponibles. netctl-guiAUR fournit une interface graphique basée sur Qt, un daemon DBus et un widget KDE. netmenuAUR utilise dmenu comme interface graphique, et gnome-shell-extension-netctl-auto-gnome-gitAUR[broken link: package not found] est une extension du shell gnome.

Il existe également une application qui affiche des notifications de bureau sur les changements de profil et qui présente une icône dans la barre d'état système : netctl-trayAUR.

Bonding

Consultez Netctl#Bonding : cette section nécessite une mise à jour car elle reposait sur un outil qui n'est plus fourni par le noyau.

Utilisation de n'importe quelle interface

Dans certains cas, il peut être souhaitable d'autoriser un profil à utiliser n'importe quelle interface du système. Un exemple courant d'utilisation est l'utilisation d'une image disque commune sur plusieurs machines avec un matériel différent (ceci est particulièrement utile si elles sont sans affichage). Si vous utilisez le schéma de nommage du noyau, et que votre machine ne possède qu'une seule interface Ethernet, vous pouvez probablement deviner que eth0 est la bonne interface. En revanche, si vous utilisez le système d'attribution de noms d'udev Predictable Network Interface Names, les noms seront attribués en fonction du matériel spécifique lui-même (par exemple enp1s0), plutôt que dans le simple ordre de détection du matériel (par exemple eth0, eth1). Cela signifie qu'un profil netctl peut fonctionner sur une machine et pas sur une autre, car elles ont toutes des noms d'interface différents.

Une solution simple et rapide consiste à utiliser le répertoire /etc/netctl/interfaces/. Choisissez un nom pour votre alias d'interface (en-any dans cet exemple), et écrivez ce qui suit dans un fichier portant ce nom (en vous assurant qu'il est exécutable).

/etc/netctl/interfaces/en-any
#!/bin/sh
for interface in /sys/class/net/en*; do
        break;
done
Interface=$(basename "$interface")
echo "en-any: using interface $Interface";

Créez ensuite un profil qui utilise l'interface. Faites particulièrement attention à la directive Interface. Le reste n'est fourni qu'à titre d'exemple.

/etc/netctl/wired
Description='Wired'
Interface=en-any
Connection=ethernet
IP=static
Address=('192.168.1.15/24')
Gateway='192.168.1.1'
DNS=('192.168.1.1')

Lorsque le profil wired est lancé, toute machine utilisant les deux fichiers ci-dessus fera automatiquement apparaître et configurer la première interface Ethernet trouvée sur le système, quel que soit le nom qu'udev lui a attribué. Notez que ce n'est pas la manière la plus robuste de configurer des interfaces. Si vous utilisez plusieurs interfaces, netctl peut essayer de leur attribuer la même interface, ce qui provoquera probablement une interruption de la connectivité. Si vous n'êtes pas gêné par une solution plus compliquée, netctl-auto est probablement plus fiable.

Utilisation des hooks

netctl prend en charge les hooks dans /etc/netctl/hooks/ et les hooks par interface dans /etc/netctl/interfaces/. Vous pouvez définir toute option dans un hook/interface que vous pouvez dans un profil. Cela inclut surtout ExecUpPost et ExecDownPre.

Lorsqu'un profil est lu, netctl extrait tous les scripts exécutables du répertoire hooks, puis il lit le fichier de profil de la connexion et enfin il extrait un script exécutable portant le nom de l'interface utilisée dans le profil du répertoire interfaces. Par conséquent, les déclarations dans un script d'interface remplacent les déclarations dans le profil, qui remplacent les déclarations dans les hooks.

Les variables $INTERFACE et $ACTION sont disponibles dans hooks/interfaces uniquement lorsque vous utilisez netctl-auto.

Exemples

Exécuter des commandes sur une connexion établie
/etc/netctl/hooks/myservices
#!/bin/sh
ExecUpPost="systemctl start crashplan.service ; systemctl start dropbox@<username>.service"
ExecDownPre="systemctl stop crashplan.service ; systemctl stop dropbox@<username>.service"
Définir le client DHCP par défaut

Pour définir ou modifier le client DHCP utilisé pour tous les profils :

/etc/netctl/hooks/dhcp
#!/bin/sh
DHCPClient='dhclient'

N'oubliez pas de rendre le fichier exécutable.

On peut également le spécifier pour une interface réseau spécifique en créant un fichier exécutable /etc/netctl/interfaces/<interface> avec la ligne suivante :

DHCPClient='dhclient'

Section WPAConfig minimale

Comme indiqué dans netctl.profile(5) § OPTIONS FOR 'WIRELESS' CONNECTIONS, la variable WPAConfigSection est un tableau de lignes de configuration passées à wpa_supplicant. Ainsi, une WPAConfigSection minimale contiendrait :

Description='A wireless connection using a custom network block configuration'
Interface=wlan0
Connection=wireless
Security=wpa-configsection
IP=dhcp
WPAConfigSection=(
    'ssid="University"'
    'psk="very secret passphrase"'
)
Note: Si vous essayez de vous connecter à un SSID avec des caractères non-ASCII (unicode, emoji, etc), vous pouvez spécifier le SSID en hexadécimal au lieu d'une chaîne de caractères, par exemple ssid=F09F90BA pour "🐺". Si vous n'êtes pas sûr de l'encodage hexadécimal, exécutez wifi-menu (assurez-vous de supprimer les caractères \ et x).

/etc/resolv.conf

Si vous utilisez des options DNS* dans votre profil, netctl appelle resolvconf pour écraser resolv.conf.

Dépannage

Job for netctl@wlan(...).service failed

Attention: Cette section suppose qu'aucun autre service réseau n'est en cours d'exécution avant de lancer un profil/service netctl. Voir #Installation pour plus de détails.

Certaines personnes rencontrent un problème lorsqu'elles se connectent à un réseau avec netctl, par exemple :

# netctl start wlan0-ssid
Job for netctl@wlan0\x2ssid.service failed. See 'systemctl status netctl@wlan0\x2ssid.service' and 'journalctl -xn' for details.

Lorsque vous regardez le journal en exécutant journalctl -xn en tant que root, l'un ou l'autre des éléments suivants s'affiche :

1. Si votre périphérique (wlan0 dans ce cas) est en marche :

network[2322] : L'interface du profil réseau 'wlan0-ssid' est déjà en service.

La mise hors service de l'interface devrait résoudre le problème :

# ip link set wlan0 down

Puis réessayez :

# netctl start wlan0-ssid

2. Si l'erreur persiste, réessayez après avoir ajouté l'option ForceConnect :

/etc/netctl/wlan0-ssid
...
ForceConnect=yes

Enregistrez-la et essayez de vous connecter avec le profil :

# netctl start wlan0-ssid

dhcpcd: ipv4_addroute: File exists

Sur certains systèmes, la combinaison de dhcpcd et de netctl provoque des problèmes de délai d'attente lors de la reprise, en particulier si vous avez changé de réseau entre-temps. netctl signalera que vous êtes connecté avec succès mais que vous recevez toujours des problèmes de délai d'attente. Dans ce cas, l'ancienne route par défaut existe toujours et n'est pas renouvelée. Une solution pour éviter ce comportement erroné est de passer à dhclient comme client DHCP par défaut. Vous trouverez plus d'informations sur ce problème ici.

Problèmes de délai d'attente DHCP

Si vous rencontrez des problèmes de délai d'attente lors de la demande de baux via DHCP, vous pouvez définir une valeur de délai d'attente supérieure aux 30 secondes par défaut de netctl. Créez un fichier dans /etc/netctl/hooks/ ou /etc/netctl/interfaces/, ajoutez-y TimeoutDHCP=40 pour un timeout de 40 secondes et rendez le fichier exécutable.

Débogage de dhcpcd

Si dhcpcd ne parvient pas à obtenir une adresse, ajoutez l'option -d à /usr/lib/netctl/dhcp puis exécutez journalctl -xe en tant que root pour afficher les messages de débogage qui peuvent indiquer, par exemple, que l'adresse IP offerte par le serveur est rejetée par le client après avoir détecté que l'adresse IP est déjà utilisée.

Problèmes de délais de connexion

Si vous rencontrez des problèmes de délai d'attente qui ne sont pas liés au DHCP (sur une connexion ethernet statique par exemple), et que vous rencontrez des erreurs similaires à celles qui suivent au démarrage de votre profil :

# journalctl _SYSTEMD_UNIT=netctl@profil'.service
Démarrage du profil réseau 'profil'...
Aucune connexion trouvée sur l'interface 'eth0' (timeout)
Échec de la mise en service du réseau pour le profil 'profil'.

Ensuite, vous devez augmenter les délais d'attente pour la porteuse et l'activation en ajoutant TimeoutUp= et TimeoutCarrier= à votre fichier de profil :

/etc/netctl/profile
...
TimeoutUp=300
TimeoutCarrier=300

N'oubliez pas de réactiver votre profil :

# netctl reenable profil

Problèmes avec netctl-auto sur la reprise

Parfois, netctl-auto ne parvient pas à se reconnecter lorsque le système reprend après une suspension, une hibernation ou un sommeil hybride. Une solution facile est de redémarrer le service pour netctl-auto. Ceci peut être automatisé avec un service supplémentaire comme le suivant (netctl-auto-resumeAUR[broken link: package not found]) :

/etc/systemd/system/netctl-auto-resume@.service
[Unit]
Description=restart netctl-auto on resume.
Requisite=netctl-auto@%i.service
After=sleep.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart netctl-auto@%i.service

[Install]
WantedBy=sleep.target

Pour activer ce service pour votre carte sans fil, par exemple, activez netctl-auto-resume@wlan0.service en tant que root. Remplacez wlan0 par l'interface réseau requise.

Si le périphérique n'est pas encore en cours d'exécution sur la reprise lorsque l'unité est démarrée, cela échouera. Cela peut être corrigé en ajoutant la dépendance suivante dans la ligne After :

/etc/systemd/system/netctl-auto-resume@.service
...
After=sleep.target sys-subsystem-net-devices-%i.device
...

netctl-auto ne débloque pas automatiquement une carte sans fil pour utiliser une interface

De nombreux ordinateurs portables ont un bouton matériel (ou un interrupteur) pour désactiver la carte sans fil, cependant, la carte peut également être bloquée par le noyau. Ceci peut être géré par rfkill.

Si vous souhaitez que netctl-auto débloque automatiquement votre carte sans fil pour vous connecter à un réseau particulier, définissez l'option RFKill=++auto++ pour la connexion sans fil de votre choix, comme spécifié dans netctl.profile(5).

RTNETLINK répond : Le fichier existe (avec plusieurs NICs)

Cette réponse est très trompeuse, elle signifie en réalité que vous avez assigné une passerelle par défaut dans un fichier de contrôle netctl antérieur. Quand netctl démarre la n-ième NIC et va définir sa route locale, il échoue parce qu'il y a déjà une route par défaut de n-1.

Supprimez-la et tout fonctionne, sauf que vous n'avez plus de route par défaut et que vous ne pouvez pas accéder à des éléments tels qu'Internet. ExecUpPost ne fonctionne pas car il est exécuté pour chaque carte réseau.

Une solution possible est de créer un nouveau service. Remplacez "FIRST_INTERFACE" et "SECOND_INTERFACE" par vos noms d'interface, et remplacez "192.168.xxx.yyy" par votre passerelle par défaut.

/etc/systemd/system/defaultrouter.service
[Unit]
Description="Configure default gateway"
Requires=netctl@FIRST_INTERFACE.service netctl@SECOND_INTERFACE.service
After=netctl@FIRST_INTERFACE.service netctl@SECOND_INTERFACE.service

[Service]
Type=oneshot
ExecStart=/usr/bin/ip route add default via 192.168.xxx.yyy

[Install]
WantedBy=network-online.target

Problèmes avec eduroam et autres connexions MSCHAPv2

Consultez wpa_supplicant#Problems with eduroam and other MSCHAPv2 connections.

Avertissements du journal pour les profils utilisant les directives .include

Les profils utilisant toujours les anciennes directives .include de systemd produiront des avertissements de journal, par exemple :

systemd[1]: /etc/systemd/system/netctl@<profile>.service:1: .include directives are deprecated, and support for them will be removed in a future version of systemd. Please use drop-in files instead.

Voir FS#59494 pour plus de détails.

L'exécution de

netctl reenable profile

mettra à jour le profil au nouveau format des fichiers de substitution.

Les hooks ne fonctionnent pas

Si vous avez plusieurs hooks dans /etc/netctl/hooks/, des variables comme ExecUpPost et ExecDownPre ne seront exécutées que depuis un seul fichier. Pour résoudre ce problème, définissez les variables comme suit :

/etc/netctl/hooks/test
ExecUpPost="une commande ; "$ExecUpPost
ExecDownPre="une commande ; "$ExecDownPre

Ceci ajoutera vos commandes à exécuter à celles déjà définies.

Voir aussi