2.3. Utiliser l'outil de ligne de commandes du NetworkManager, nmcli

L'outil de ligne de commandes nmcli peut être utilisé à la fois par les utilisateurs et les scripts pour contrôler le NetworkManager. Le format de base d'une commande est le suivant :
nmcli OPTIONS OBJECT { COMMAND | help }
ayant comme OBJECT pour général, réseautage, radio, connexion, ou périphérique. Les options les plus utilisées sont les suivantes : -t, --terse pour les scripts, l'option -p, --pretty pour les utilisateurs et l'option -h, --help pour assistance. La complétion de commande est maintenant en place pour nmcli, donc n'oubliez pas d'appuyer sur Tab (onglet) quand vous hésitez sur les commandes disponibles. Voir la page man nmcli(1) pour obtenir une liste complète des options et des commandes. Pour obtenir une liste des configurations des périphérique de réseau connus, exécuter la commande nmcli device sans arguments.
L'outil nmcli contient une assistance contectuelle intégrée. Pour l'utiliser, saisir les deux commande suivantes, et constatez la différence :
~]$ nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes
~]$ nmcli general help
Usage: nmcli general { COMMAND | help }

  COMMAND := { status | hostname | permissions | logging }

  status

  hostname [<hostname>]

  permissions

  logging [level <log level>] [domains <log domains>]
Dans le deuxième exemple ci-dessus, l'aide disponible se rapporte à l'objet general.
La page man nmcli-examples(5) contient un certain nombre d'exemples utiles. En voici une brève sélection :
Pour afficher le statut global du NetworkManager :
nmcli statut general
. Pour contrôler la journalisation NetworkManager :
nmcli general logging
. Pour afficher toutes les connexions :
nmcli connection show
. Pour montrer les connexions actives uniquement, ajoutez l'option - a,--active, comme suit :
nmcli connection show --active
. Pour afficher les périphériques reconnus par le NetworkManager et leur état :
nmcli device status
Le commandes peuvent être écourtées et certaines options omises. Par exemple, la commande :
nmcli connection modify id 'MyCafe' 802-11-wireless.mtu 1350
peut être réduite à la commande suivante :
nmcli con mod MyCafe 802-11-wireless.mtu 1350
. L'option id peut été omise car l'ID de connexion (nom) est sans équivoque pour nmcli dans ce cas. Au fur et à mesure que vous vous familiariserez avec les commandes, d'autres abréviations peuvent être faites. Par exemple,
nmcli connection add type ethernet
peut être réduit à:
nmcli c a type eth

Note

N'oubliez pas de vous servir de la fonction de complétion de commande si vous avez un doute.

Lancer et arrêter une interface en utilisant nmcli

L'outil nmcli peut être utilisé pour démarrer et pour stopper une interface de réseau, y compris les masters. Ainsi :
nmcli con up id bond0
nmcli con up id port0
nmcli dev disconnect bond0
nmcli dev disconnect ens3

Note

Il est recommandé d'utiliser nmcli dev disconnect iface-name plutôt que nmcli con down id id-string, car la disconnexion met l'interface en mode « manual », et aucune connexion automatique ne démarrera tant que l’utilisateur n'aura pas demandé au NetworkManager de démarrer une connexion ou tant qu'un événement externe tel qu'un changement d'opérateur, une hibernation,une mise en veille n'ait eu lieu.

L'éditeur de connexions interactives nmcli

L'outil nmcli contient un éditeur de connexions interactif. Pour l'utiliser, saisir la commande suivante :
~]$ nmcli con edit
On vous demandera de saisir un type de connexion valide à partir de la liste affichée. Après avoir entré un type de connexion, vous serez placé sur invite de nmcli. Si vous êtes familier avec les types de connexion, vous pouvez ajouter une option de type de connexion valide à la commande nmcli con edit, et être pris directement à l'invite de nmcli. Le format est le suivant pour l'édition d'un profil de connexion existant :
nmcli con edit [id | uuid | path] ID
. Pour ajouter ou modifier un nouveau profil de connexion, appliquer le format suivant :
nmcli con edit [saisir new-connection-type de type] [con-name new-connexion- name]
Saisir help à l'invite de nmcli pour voir une liste de commandes valides. Utiliser la commande describe pour obtenir une liste des paramètres et de leurs propriétés. Le format est le suivant :
describe setting.property
. Par exemple :
nmcli> describe team.config

2.3.1. Comprendre les options nmcli

La plupart des commandes nmcli s'expliquent par elles-mêmes, mais pour certaines commandes, cela vaut la peine de se pencher un petit moment dessus :
type — le type de connexion.
Les valeurs autorisées sont les suivantes : adsl, bond, bond-slave, bridge, bridge-slave, bluetooth, cdma, ethernet, gsm, infiniband, olpc-mesh, team, team-slave, vlan, wifi, wimax.
Chaque type de connexion contient des options de commande spécifiques à un type. Appuyer sur Tab pour en obtenir une liste ou pour voir la liste TYPE_SPECIFIC_OPTIONS dans la page man nmcli(1). L'option type s'applique après les commandes suivantes : nmcli connection add et nmcli connection edit.
con-name — le nom assigné à un profil de connexion.
Si vous n'indiquez pas de nom de connexion, il sera généré suivant le format suivant :
 type-ifname[-number]
Le nom de connexion est le nom d'un profil de connexion et ne doit pas être confondu avec le nom de l'interface qui représente un périphérique comme wlan0, ens3, em1 et ainsi de suite). Les utilisateurs peuvent toutefois nommer les connexions d'après les interfaces, mais ce n'est pas la même chose. Il peut y avoir plusieurs profils de connexion pour un périphérique. Ceci est particulièrement utile pour les appareils mobiles ou quand on fait des changements de câble réseau entre différents appareils. Plutôt que de modifier la configuration, créer des profils différents et les appliquer à l'interface selon les besoins. L'option id fait également référence au nom du profil de connexion.
id — une chaîne d'identification assignée par l'utilisateur à un profil de connexion.
L'ID peut être utilisé avec les commandes nmcli connection pour identifier une connexion. Le champ NAME figurant dans la sortie indique l'ID de connexion (nom). Il se rapporte au même nom de connexion que celui du con-name.
uuid — une chaîne d'identification unique assignée par le système à un profil de connexion.
L'UUID peut être utilisé par les commandes nmcli connection pour identifier une connexion.

2.3.2. Se connecter à réseau par nmcli

Pour obtenir une liste des connexions de réseau disponibles, lancez la commande suivante :
~]$ nmcli con show
NAME              UUID                                  TYPE            DEVICE
Auto Ethernet     9b7f2511-5432-40ae-b091-af2457dfd988  802-3-ethernet  --
ens3              fb157a65-ad32-47ed-858c-102a48e064a2  802-3-ethernet  ens3
MyWiFi            91451385-4eb8-4080-8b82-720aab8328dd  802-11-wireless wlan0
Notez que le champ de nom NAME dans la sortie indique toujours l'ID de connexion (nom). Il ne correspond pas au nom de l'interface même s'il a le même aspect. Pour la seconde connexion mentionnée ci-dessus, ens3 du champ NAME correspond à l'ID de connexion donné au profil qui s'applique à l'interface ens3. Dans la dernière connexion ci-dessus, l'utilisateur assigne l'ID de connexion MyWiFi à l'interface wlan0.
L'ajout d'une connexion Ethernet revient à créer un profil de configuration, qui est alors assigné à un périphérique. Avant de créer un nouveau profil, vérifiez les périphériques suivants :
~]$ nmcli dev status
DEVICE  TYPE      STATE         CONNECTION
ens3    ethernet  disconnected  --
ens9    ethernet  disconnected  --
lo      loopback  unmanaged     --

Ajouter une connexion Ethernet dynamique

Pour ajouter un profil de configuration Ethernet à une configuration IP dynamique, ce qui permet à DHCP d'assigner la configuration de réseau, on peut utiliser une commande du format suivant :
nmcli connection add type ethernet con-name connection-name ifname interface-name
Ainsi, pour créer un profil de connexion dynamique nommé my-office, exécutez la commande suivante :
~]$ nmcli con add type ethernet con-name my-office ifname ens3
Connection 'my-office' (fb157a65-ad32-47ed-858c-102a48e064a2) successfully added.
NetworkManager définira son paramètre interne connection.autoconnect à yes. Le NetworkManager inscrira également des paramètres de config dans /etc/sysconfig/network-scripts/ifcfg-my-office avec la directive ONBOOT définie sur yes.
Notez que les changements manuels apportés au fichier ifcfg ne seront pas remarqués par le NetworkManager tant que l'interface n'est pas appelée à nouveau. Voir Section 1.9, « Configuration de réseau par les fichiers sysconfig » pour obtenir plus d'informations sur la façon d'utiliser les fichiers de configuration.
Pour afficher la connexion Ethernet, exécuter la commande suivante :
~]$ nmcli con up my-office
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
Pour vérifier le statut des périphériques et des connexions :
~]$ nmcli device status
DEVICE  TYPE      STATE         CONNECTION
ens3    ethernet  connected     my-office
ens9    ethernet  disconnected  --
lo      loopback  unmanaged     --
Pour modifier le nom d'un hôte envoyé par un hôte à un serveur DHCP, modifier la propriété dhcp-hostname comme suit :
~]$ nmcli con modify my-office my-office ipv4.dhcp-hostname host-name ipv6.dhcp-hostname host-name
Pour modifier l'ID client IPv4 envoyé par un hôte à un serveur DHCP, modifier la propriété dhcp-client-id comme suit :
~]$ nmcli con modify my-office my-office ipv4.dhcp-client-id client-ID-string
Il n'y a pas de propriété dhcp-client-id pour IPv6, le dhclient crée un identifiant pour IPv6. Voir la page man dhclient(8) pour plus d'informations.
Pour ignorer les serveurs DNS envoyés à un hôte par un serveur DHCP, modifier la propriété ignore-auto-dns comme suit :
~]$ nmcli con modify my-office my-office ipv4.ignore-auto-dns yes ipv6.ignore-auto-dns yes
Voir la page man nm-settings(5) pour obtenir plus d'informations sur les propriétés et leurs paramètres de configurations.

Exemple 2.1. Configurer une connexion Ethernet dynamique par l'éditeur interactif

Pour configurer une connexion Ethernet dynamique par l'éditeur interactif, exécuter les commandes suivantes :
~]$ nmcli con edit type ethernet con-name ens3

===| nmcli interactive connection editor |===

Ajouter une nouvelle connexion  '802-3-ethernet'

Tapez 'help' ou '?' pour interroger les commandes disponibles.
Tapez 'describe [<setting>.<prop>]' pour obtenir une description de propriété détaillée.

Vous pouvez modifier les paramètres suivants : connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
nmcli> describe ipv4.method

=== [method] ===
[NM property description]
IPv4 configuration method.  Si 'auto' est spécifié, alors la méthode automatique  (DHCP, PPP, etc) qui convient sera utilisée par l'interface, et la plupart des autres propriétés devront demeurer non définies. Si 'link-local' est spécifié, alors une adresse de  lien-local dans l'intervalle de valeurs 169.254/16 sera assignée à l'interface.  Si 'manual' est spécifié, l'adressage  IP statique est utilisé, et une adresse IP au moins devra être donnée dans la propriété 'addresses' . Si 'shared' est spécifié (indiquant ainsi que cette connexion donnera un accès réseau à d'autres machines) alors, l'interface reçoit une adresse dans la plage de valeurs 10.42.x.1/24 et un DHCP, le serveur de transfert DNS est démarré, et l'interface est en NAT-ed dans la connexion réseau courante par défaut. 'disabled' signifie qu' IPv4 ne sera pas utilisé pour cette connnexion. Cette propriété devra être définie.

nmcli> set ipv4.method auto
nmcli> save
Sauvegarde de la connexion avec 'autoconnect=yes'. Peut résulter en activation immédiate de la connexion.
Souhaitez-vous toujours sauvegarder ? [yes] yes
Connexion 'ens3' (090b61f7-540f-4dd6-bf1f-a905831fc287) sauvegardée.
nmcli> quit
~]$
L'action par défaut est de conserver le profil de connexion persistant. Si nécessaire, le profil peut être contenu en mémoire uniquement, jusqu'au prochain démarrage, par la commande save temporary.

Ajouter une connexion Ethernet statique

Pour ajouter une connexion Ethernet ayant une configuration IPv4 statique, utiliser une commande sous le format suivant :
nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address
IPv6. L'adresse et la passerelle peuvent être ajoutées en utilisant les options ip6 et gw6.
Par exemple, voici une commande pour créer une connexion Ethernet statique avec l'adresse IPv4 et une passerelle :
~]$ nmcli con add type ethernet con-name test-lab ifname ens9 ip4 10.10.10.10/24 \
gw4 10.10.10.254
En option, spécifier en même temps l'adresse IPv6 et la passerelle pour le périphérique comme suit :
~]$ nmcli con add type ethernet con-name test-lab ifname ens9 ip4 10.10.10.10/24 \
gw4 10.10.10.254 ip6 abbe::cafe gw6 2001:db8::1
Connection 'test-lab' (05abfd5e-324e-4461-844e-8501ba704773) successfully added.
NetworkManager définira son paramètre interne ipv4.method à manual et connection.autoconnect à yes. Le NetworkManager inscrira également des paramètres de config dans /etc/sysconfig/network-scripts/ifcfg-my-office avec la directive BOOTPROTO définie sur none et ONBOOT définie sur yes..
Notez que les changements manuels apportés au fichier ifcfg ne seront pas remarqués par le NetworkManager tant que l'interface n'est pas appelée à nouveau. Voir Section 1.9, « Configuration de réseau par les fichiers sysconfig » pour obtenir plus d'informations sur la façon d'utiliser les fichiers de configuration.
Pour définir deux adresses de serveur IPv4 DNS :
~]$ nmcli con mod test-lab ipv4.dns "8.8.8.8 8.8.4.4"
Notez que cela remplacera tous les serveurs DNS déjà définis. Pour définir deux adresses de serveur IPv6 DNS :
~]$ nmcli con mod test-lab ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
Notez que cela remplacera tous les serveurs DNS déjà définis. Pour ajouter deux serveurs DNS à un serveur déjà défini, utiliser le préfixe + comme suit :
~]$ nmcli con mod test-lab +ipv4.dns "8.8.8.8 8.8.4.4"
~]$ nmcli con mod test-lab +ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
Pour afficher la nouvelle connexion Ethernet, exécuter la commande suivante :
~]$ nmcli con up test-lab ifname ens9
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
Pour vérifier le statut des périphériques et des connexions :
~]$ nmcli device status
DEVICE  TYPE      STATE      CONNECTION
ens3    ethernet  connected  my-office
ens9    ethernet  connected  test-lab
lo      loopback  unmanaged  --
Pour vérifier les informations détaillées sur la connexion configurée, veuillez exécuter la commande suivante :
~]$ nmcli -p con show test-lab
===============================================================================
                     Connection profile details (test-lab)
===============================================================================
connection.id:                          test-lab
connection.uuid:                        05abfd5e-324e-4461-844e-8501ba704773
connection.interface-name:              ens9
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1410428968
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
connection.gateway-ping-timeout:        0[output truncated]
L'option -p, --pretty ajoute un titre de bannière et une séparation de section à la sortie.

Exemple 2.2. Configurer une connexion Ethernet statique par l'éditeur interactif

Pour configurer une connexion Ethernet statique par l'éditeur interactif, exécuter la commande suivante :
~]$ nmcli con edit type ethernet con-name ens3

===| nmcli interactive connection editor |===

Ajouter une nouvelle connexion  '802-3-ethernet'

Tapez 'help' ou '?' pour interroger les commandes disponibles.
Tapez 'describe [<setting>.<prop>]' pour obtenir une description de propriété détaillée.

Vous pouvez modifier les paramètres suivants : connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
nmcli> set ipv4.routes 192.168.122.88/24
Souhaitez-vous également définir 'ipv4.method' à 'manual'? [yes]: yes
nmcli>
nmcli> save temporary
Sauvegarde de la connexion avec 'autoconnect=yes'. Peut résulter en activation immédiate de la connexion.
Souhaitez-vous toujours sauvegarder ? [yes] no
nmcli> save
Souhaitez-vous toujours sauvegarder ? [yes] yes
Connexion 'ens3' (704a5666-8cbd-4d89-b5f9-fa65a3dbc916) sauvegardée.
nmcli> quit
~]$
L'action par défaut est de conserver le profil de connexion persistant. Si nécessaire, le profil peut être contenu en mémoire uniquement, jusqu'au prochain démarrage, par la commande save temporary.

Verrouiller un profil sur un périphérique particulier

Pour verrouiller un profil à une interface spécifique, les commandes utilisées dans les exemples ci-dessus incluent le nom de l'interface. Par exemple :
nmcli connection add type ethernet con-name connection-name ifname interface-name
. Pour rendre un profil utilisable par toutes les interfaces Ethernet compatibles, exécuter une commande comme :
nmcli connection add type ethernet con-name connection-name ifname "*"
. Notez que vous devez utiliser l'argument ifname même si vous ne souhaitez pas définir une interface spécifique. Utilisez le caractère générique * pour spécifier que le profil puisse être utilisé avec n'importe quel périphérique compatible.
Pour verrouiller un profil à une adresse MAC particulière, utilisez une commande sous le format suivant :
nmcli connection add type ethernet con-name "connection-name" ifname "*" mac 00:00:5E:00:53:00

Ajout d'une connexion Wi-Fi

Pour afficher les points d'accès Wi-Fi, exécutez une commande comme suit :
~]$ nmcli dev wifi list
  SSID            MODE  CHAN  RATE     SIGNAL  BARS  SECURITY
  FedoraTest     Infra  11    54 MB/s  98      ▂▄▆█  WPA1
  Red Hat Guest  Infra  6     54 MB/s  97      ▂▄▆█  WPA2
  Red Hat        Infra  6     54 MB/s  77      ▂▄▆_  WPA2 802.1X
* Red Hat        Infra  40    54 MB/s  66      ▂▄▆_  WPA2 802.1X
  VoIP           Infra  1     54 MB/s  32      ▂▄__  WEP
  MyCafe         Infra  11    54 MB/s  39      ▂▄__  WPA2
Pour créer un profil de connexion Wi-Fi avec une configuration IP statique, tout en autorisant l'attribution d'adresses DNS automatiques, exécutez une commande comme suit :
~]$ nmcli con add con-name MyCafe ifname wlan0 type wifi ssid MyCafe \
ip4 192.168.100.101/24 gw4 192.168.100.1
Pour définir un mot de passe WPA2, comme par exemple « caffeine », exécutez les commandes suivantes :
~]$ nmcli con modify MyCafe wifi-sec.key-mgmt wpa-psk
~]$ nmcli con modify MyCafe wifi-sec.psk caffeine
Voir le guide Red Hat Enterprise Linux 7 Security Guide pour obtenir des informations sur la sécurité des mots de passe.
Pour modifier l'état Wi-Fi, exécutez une commande sous le format suivant :
~]$ nmcli radio wifi [on | off ]

Changer une propriété spécifique

Pour vérifier une propriété particulière, comme mtu, exécutez une commande comme suit :
~]$ nmcli connection show id 'MyCafe' | grep mtu
802-11-wireless.mtu:                     auto
Pour modifier la propriété d'un paramètre de configuration, veuillez exécuter la commande suivante :
~]$ nmcli connection modify id 'MyCafe' 802-11-wireless.mtu 1350
Pour vérifier la modification, exécutez une commande comme suit :
~]$ nmcli connection show id 'MyCafe' | grep mtu
802-11-wireless.mtu:                     1350
Notez que le NetworkManager fait référence à des paramètres de configuration comme 802-3-ethernet et 802-11-wireless et mtu comme propriétés de configuration. Voir la page man nm-settings(5) pour plus d'informations sur les propriétés et leurs configurations.

2.3.3. Configuration des routages statiques par nmcli

Pour configurer des routages statiques avec l'outil nmcli, on doit utiliser le mode d'édition interactive ou l'outil en lignes de commandes.

Exemple 2.3. Configuration des routages statiques par nmcli

Pour configurer un routage statique pour une connexion Ethernet existante par l'outil en lignes de commandes, exécuter les commandes suivantes :
~]# nmcli connection modify eth0 +ipv4.routes "192.168.122.0/24 10.10.10.1"
Cela dirigera le trafic du sous-réseau 192.168.122.0/24 vers la passerelle 10.10.10.1

Exemple 2.4. Configuration des routages statiques par l'éditeur nmcli

Pour configurer un routage statique pour une connexion Ethernet par l'éditeur interactif, exécuter les commandes suivantes :
~]$ nmcli con edit type ethernet con-name ens3

===| nmcli interactive connection editor |===

Ajouter une nouvelle connexion  '802-3-ethernet'

Tapez 'help' ou '?' pour interroger les commandes disponibles.
Tapez 'describe [<setting>.<prop>]' pour obtenir une description de propriété détaillée.

Vous pouvez modifier les paramètres suivants : connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1
nmcli>
nmcli> save persistent
Sauvegarde de la connexion avec 'autoconnect=yes'. Peut résulter en activation immédiate de la connexion.
Souhaitez-vous toujours sauvegarder ? [yes] yes
Connexion 'ens3' (704a5666-8cbd-4d89-b5f9-fa65a3dbc916) sauvegardée.
nmcli> quit
~]$