====== NetworkManager ======
[[https://wiki.archlinux.org/title/NetworkManager|source]]
NetworkManager permet à des utilisateurs (non administrateur/root) de configurer les connexions réseau, via une interface graphique (Gnome, KDE..), mais aussi des utilitaires en ligne de commande : nmcli (commande permettant de créer, modifier, supprimer, activer ou désactiver les interfaces réseaux), nmtui (pareil en interface semi-graphique -ncurse ?-)
Ses avantages :
* il est intégré dans GNOME et propose une GUI
* on peut activer/désactiver via la GUI à la volée un VPN (wireguard est intégré par défaut)
Ainsi, NetworkManager est "utile" dans les cas où les environnements réseaux changent et sont multiples (ex: laptop).
NetworkManager est concrètement un service systemd, et attend les notifs de udev lorsqu'une connexion est branchée pour la configurer.
===== Installation =====
Est-ce que NetworkManager est installé ? ''systemctl is-active NetworkManager'' ou alors regarder ''systemctl status NetworkManager''.
Il suffit d'installer le paquet ''NetworkManager'' (/!\ MAJUSCULES), puis d'activer le service via ''systemctl start/enable NetworkManager''.
> ATTENTION : il faut désactiver et arrêter le service ''systemd-networkd'' ([[systemd_networkd|systemd-networkd]]), qui propose également de configurer les interfaces réseaux (mais sans gui ni activation par gui d'un VPN). De même, pas compatible avec [[dhcpcd]].
===== Configuration =====
[[https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assembly_networkmanager-connection-profiles-in-keyfile-format_configuring-and-managing-networking|source avec infos détaillées]]
==== Outils ====
== nmtui ==
Interface interactive via ncurse pour créer, modifier ou supprimer des configs
== nmcli ==
interface pure ligne de commande pour créer, modifier ou supprimer des configs
# modifier une connexion
nmcli connection modify
== fichier de config ==
NetworkManager n'utilise pas /etc/network/interfaces.\\
Config files :
* ''/etc/NetworkManager/NetworkManager.conf'' pour la config globale
* ''/etc/NetworkManager/system-connection/*.nmconnection'' pour une config spécifique à une connexion
> You can use any file name with a .nmconnection suffix. However, when you later use nmcli commands to manage the connection, you must use the connection name set in the id variable when you refer to this connection. When you omit the id variable, use the file name without the .nmconnection to refer to this connection.
> Toutefois, sur Ubuntu netplan est utilisé et il n'est pas conseillé d'utiliser ces fichiers, mais plutôt de passer par netplan directement par ''nmtui'' ou ''nmcli'' qui se chargeront de créer une config netplan
==== Fallback IP ====
=== NetworkManager fallback property ===
NetworkManager a une fonction ipv4.link-local=fallback pour avoir une ip fixe de type 169.254.xxx.yyy/16 si y'a pas de DHCP (on ne peut pas choisir l'ip):
''nmcli con modify ethX ipv4.link-local fallback''
[ipv4]
method=auto
link-local=fallback
=== Fallback ip (vers ip définie) ===
L'option n'existe pas directement, l'astuce consiste à créer 2 profils de connexions pour la même interface, avec soit une sélection manuelle via la GUI, soit une sélection automatique en gérant les paramètres d'autoconnect-priority et autoconnect-retries
== option 1 ==
On crée une 2e connexion pour la même interface (enp0...) avec une IP fixe dans l'interface interactive ''nmtui''.
> Sur Ubuntu, la commande génèrera une config dans ''/etc/netplan'' et non dans ''/etc/NetworkManager/system-connection''
On peut ensuite interagir avec le GUI pour activer la connexion avec DHCP ou la connexion en IP statique.
Ou alors mettre en place un autoconnect en modifiant les connexions :
nmcli connection modify "ETH static" connection.autoconnect-priority 1
nmcli connection modify "ETH DHCP" connection.autoconnect-priority 10
nmcli connection modify "ETH DHCP" connection.autoconnect-retries 1
nmcli connection modify "ETH DHCP" ipv4.dhcp-timeout 7
> ''connection.autoconnect-retries'': The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.
> ''connection.autoconnect-priority'': The autoconnect priority in range -999 to 999. If the connection is set to autoconnect (par défaut ''autoconnect=TRUE''), connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.
== option 2 ==
Pour gérer le fallback (ip fixe choisie si DHCP n'est pas possible), on peut créer 2 profils de connexion, avec des priorités différentes :
In config files (e.g. /etc/NetworkManager/system-connections/*.nmconnection) :
# The DHCP profile
[connection]
id=dhcp
uuid=
type=ethernet
interface-name=eth0
autoconnect-priority=1
autoconnect-retries=2
[ipv4]
dns-search=
method=auto
dhcp-timeout=10
may-fail=false
# The static profile
[connection]
id=static
uuid=
type=ethernet
interface-name=eth0
autoconnect-priority=0
autoconnect-retries=-1
[ipv4]
address1=192.168.1.10/24,192.168.1.1
dns=192.168.1.1
dns-search=
method=manual
Note : by default, autoconnect=true when not specified, otherwise it wouldn't work.\\
est visible avec ''nmcli connection''
=== Compatibilité ifupdown ===
NetworkManager peut coexister avec ''ifupdown'' s'il n'y a pas de recouvrement : on peut dire dans le fichier de conf de NetworkManager qu'une interface est gérée par ifupdown.
# /etc/NetworkManager/NetworkManager.conf
[ifupdown]
managed=false
# false = prend le contrôle des interfaces définies dans /etc/network/interfaces
# true = laisse la main à ifupdown sur les interfaces définies dans /etc/network/interfaces
=== dhcp ===
NetworkManager utilise par défaut son client dhcp interne, mais peut utiliser ''dhclient'' ou ''dhcpcd'', voir [[https://wiki.archlinux.org/title/NetworkManager#DHCP_client|ici]].