GNU/Linux >> Linux Esercitazione >  >> Linux

Inizia con NetworkManager su Linux

La maggior parte delle attuali distribuzioni Linux  utilizzare NetworkManager per creare e gestire le connessioni di rete. Ciò significa che devo capirlo come amministratore di sistema. In una serie di articoli, condividerò ciò che ho imparato fino ad oggi e perché penso che NetworkManager sia un miglioramento rispetto alle opzioni precedenti.

Red Hat ha introdotto NetworkManager nel 2004 per semplificare e automatizzare la configurazione e le connessioni di rete, in particolare le connessioni wireless. L'intento era quello di sollevare gli utenti dal compito di configurare manualmente ogni nuova rete wireless prima di utilizzarla. NetworkManager può gestire le connessioni di rete cablate senza file di configurazione dell'interfaccia, sebbene utilizzi i file di connessione di rete per le connessioni wireless.

In questo articolo esaminerò cos'è NetworkManager e come utilizzarlo per visualizzare le connessioni di rete e i dispositivi per gli host Linux. Risolverò anche un paio di problemi nel processo.

Cosa sostituisce NetworkManager

NetworkManager sostituisce i precedenti strumenti di gestione della rete. Il comando di configurazione dell'interfaccia originale, ifconfig e i suoi file di configurazione dell'interfaccia sono obsoleti. Puoi vederlo in ifconfig pagine man, che contengono una nota che afferma proprio questo.

Il ip il comando sostituisce ifconfig comando ed esegue essenzialmente le stesse attività. Entrambi i comandi coesistono da un po' di tempo, consentendo agli amministratori di sistema di utilizzarne uno qualsiasi, il che mantiene gli script dipendenti da ifconfig funzionale. Sebbene le sue pagine man non lo indichino ancora, ifconfig comando è obsoleto e NetworkManager lo ha reso in pratica tale.

È giunto il momento di riscrivere quegli script, perché l'uso dei comandi di NetworkManager ha più senso.

Come funziona NetworkManager

NetworkManager viene eseguito come servizio di sistema ed è abilitato per impostazione predefinita. NetworkManager funziona con D-Bus per rilevare e configurare le interfacce di rete quando sono collegate al computer Linux. Questa gestione plug-and-play delle interfacce di rete rende il collegamento a nuove reti, sia cablate che wireless, estremamente semplice per l'utente. Quando le interfacce di rete installate in precedenza vengono rilevate durante l'avvio di Linux, vengono trattate esattamente come un dispositivo collegato dopo che il sistema è già attivo e funzionante. Trattare tutti i dispositivi come plug-and-play in ogni caso semplifica la gestione di tali dispositivi per il sistema operativo, poiché esiste un solo codice base per gestire entrambi i gruppi di circostanze.

Il demone udev crea una voce per ogni scheda di interfaccia di rete (NIC) installata nel sistema nel file delle regole di rete. D-Bus segnala la presenza di un nuovo dispositivo di rete, cablato o wireless, a NetworkManager. NetworkManager ascolta quindi il traffico sul D-Bus e risponde creando una configurazione per questo nuovo dispositivo. Tale configurazione è, per impostazione predefinita, memorizzata solo nella RAM e non è permanente. Deve essere creato ad ogni avvio del computer.

NetworkManager utilizza le informazioni da D-Bus per inizializzare ciascuna scheda di rete. Per prima cosa cerca i file di configurazione che forniscono una configurazione statica più permanente. Quando viene notificato un nuovo dispositivo, NetworkManager verifica l'esistenza dei vecchi file di configurazione dell'interfaccia di rete (ifcfg-* ) in /etc/sysconfig/network-scripts . Il plugin ifcfg-rh consente l'uso di questi file legacy per la compatibilità con le versioni precedenti.

Successivamente, NetworkManager cerca i propri file di connessione dell'interfaccia, che si trovano in /etc/NetworkManager/system-connections directory directory. La maggior parte delle distribuzioni, inclusa Fedora, conserva i propri file di connessione di rete in /etc/NetworkManager/system-connections directory directory, utilizzando il nome della rete come nome del file.

Ad esempio, il mio laptop System76 Oryx Pro originariamente utilizzava POP!_OS . L'ho sostituito con Fedora, che è attualmente alla versione 35, e ogni connessione wireless che ho effettuato con esso ha un file in /etc/NetworkManager/system-connections directory . Questi mantengono un record dell'identificatore del set di servizi (SSID) e delle password wireless per ciascuna rete. Il server DHCP (Dynamic Host Configuration Protocol) nel router wireless fornisce il resto dei dati di configurazione di rete per queste connessioni wireless. Per motivi di sicurezza, poiché questi file contengono password, vengono letti/scritti solo dall'utente root, proprio come i file dell'account di sistema /etc/passwd e /etc/shadow .

La directory /etc/NetworkManager/system-connections directory su quel laptop conteneva file per la rete cablata e per ciascuna delle reti wireless con cui mi sono connesso. La struttura di questi file è diversa dal vecchio ifcfg file, ma sono in formato di testo normale ASCII e sono leggibili e facilmente comprensibili.

Questo processo è sensibile alla sequenza. Viene utilizzato il primo set di file di configurazione trovato. Se non vengono trovati file di configurazione, NetworkManager genera una configurazione utilizzando i dati di un server DHCP. Se non esiste un file di configurazione dell'interfaccia, il collegamento di un nuovo dispositivo o la connessione a una nuova rete wireless fa sì che udev notifichi a NetworkManager il nuovo dispositivo o la connessione wireless. In Fedora fino alla release 28, NetworkManager crea il nuovo file di configurazione dell'interfaccia. A partire da Fedora 29 e versioni successive, NetworkManager crea solo la connessione e non crea un file di configurazione dell'interfaccia.

Se non vengono trovati file di configurazione o server DHCP, non è possibile alcuna connessione di rete.

Visualizzazione della configurazione dell'interfaccia

Il programma dell'interfaccia della riga di comando di NetworkManager, nmcli, fornisce diverse opzioni per determinare lo stato corrente di qualsiasi hardware dell'interfaccia di rete installato nell'host, nonché le connessioni attualmente attive. Il programma nmcli può gestire la rete su qualsiasi host, indipendentemente dal fatto che utilizzi un'interfaccia utente grafica (GUI) o meno, quindi può anche gestire host remoti su una connessione Secure Shell (SSH). Funziona sia con connessioni cablate che wireless.

Inizierò con alcune informazioni di base per l'utilizzo dello strumento nmcli. Sto usando un sistema Fedora che ho impostato come router, poiché un esempio con più interfacce di rete sarà più interessante di una semplice workstation host con una sola interfaccia.

Inizierò con il comando più semplice, nmcli senza opzioni. Questo semplice comando mostra informazioni simili all'ormai obsoleto ifconfig comando, inclusi il nome e il modello della NIC, l'indirizzo MAC (Media Access Control) e l'indirizzo IP (protocollo Internet) e quale NIC è configurata come gateway predefinito. Mostra anche la configurazione DNS per ciascuna interfaccia.

Il comando nmcli richiede privilegi di amministratore. La maggior parte delle distribuzioni consiglia di utilizzare sudo ma passo semplicemente alla root utente.

$ su -
# nmcli
enp4s0: connected to enp4s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:04:44:03, hw, mtu 1500
        ip4 default, ip6 default
        inet4 45.20.209.41/29
        route4 0.0.0.0/0
        route4 45.20.209.40/29
        inet6 2600:1700:7c0:860:8616:f9ff:fe04:4403/64
        inet6 fe80::8616:f9ff:fe04:4403/64
        route6 2600:1700:7c0:860::/64
        route6 ::/0

enp1s0: connected to enp1s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:03:E9:89, hw, mtu 1500
        inet4 192.168.10.1/24
        route4 192.168.10.0/24
        inet6 fe80::8616:f9ff:fe03:e989/64
        route6 fe80::/64

enp2s0: connected to enp2s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:03:FD:85, hw, mtu 1500
        inet4 192.168.0.254/24
        route4 192.168.0.0/24
        inet6 fe80::8616:f9ff:fe03:fd85/64
        route6 fe80::/64

eno1: unavailable
        "Intel I219-V"
        ethernet (e1000e), 04:D9:F5:1C:D5:C5, hw, mtu 1500

lo: unmanaged
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
        servers: 192.168.0.52 8.8.8.8 8.8.4.4
        interface: enp4s0

        servers: 192.168.0.52 8.8.8.8
        interface: enp1s0

        servers: 192.168.0.52 8.8.8.8
        interface: enp2s0

Usa il comando nmcli device show per ottenere informazioni complete sui dispositivi conosciuti e su nmcli connection show per avere una panoramica dei profili di connessione attivi. Consulta le pagine di manuale di nmcli(1) e nmcli-examples(7) per i dettagli completi sull'utilizzo. Puoi anche emettere il comando di aiuto, nmcli -h , come utente root per visualizzare il nmcli di livello superiore di base comandi:

# nmcli -h
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -a, --ask                                ask for missing parameters
  -c, --colors auto|yes|no                 whether to use colors in output
  -e, --escape yes|no                      escape columns separators in values
  -f, --fields <field,...>|all|common      specify fields to output
  -g, --get-values <field,...>|all|common  shortcut for -m tabular -t -f
  -h, --help                               print this help
  -m, --mode tabular|multiline             output mode
  -o, --overview                           overview mode
  -p, --pretty                             pretty output
  -s, --show-secrets                       allow displaying passwords
  -t, --terse                              terse output
  -v, --version                            show program version
  -w, --wait <seconds>                     set timeout waiting for finishing operations

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

Nota che gli oggetti possono essere scritti o abbreviati fino al primo carattere. Questi oggetti sono tutti univoci, quindi è necessario solo il primo carattere per specificare un singolo oggetto.

Prova nmcli g per visualizzare lo stato generale.

# nmcli g
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

Quell'output non mostra molto. So anche che l'host, in questo caso, non ha hardware WiFi, quindi questo è un risultato fuorviante. Non dovresti usare nmcli g comando per questo motivo. I migliori comandi per gli oggetti sono c [connessione] e d [evice], che sono quelli che uso più frequentemente.

# nmcli c
NAME         UUID                                  TYPE      DEVICE
enp4s0       b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0       c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0       8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0
enp0s20f0u7  0f5427bb-f8b1-5d51-8f74-ac246b0b00c5  ethernet  --    
enp1s0       abf4c85b-57cc-4484-4fa9-b4a71689c359  ethernet  --    
 
# nmcli d
DEVICE  TYPE      STATE        CONNECTION
enp4s0  ethernet  connected    enp4s0    
enp1s0  ethernet  connected    enp1s0    
enp2s0  ethernet  connected    enp2s0    
eno1    ethernet  unavailable  --        
lo      loopback  unmanaged    --        

Ci sono molte informazioni davvero interessanti qui. Si noti che le ultime due voci utilizzano il c Il comando oggetto non ha voci nella colonna del dispositivo. Questo risultato potrebbe significare che non sono attivi o non esistono o che sono presenti uno o più errori di configurazione.

Le informazioni aggiuntive che otteniamo utilizzando il d Il comando oggetto non mostra nemmeno il dispositivo enp0s20f0u7. Mostra anche il dispositivo eno1 (un dispositivo della scheda madre), che non è stato visualizzato utilizzando il c comando oggetto.

L'output dovrebbe essere più simile a questo, anche se il nome del dispositivo sarà diverso e dipenderà dalla posizione specifica sul bus PCI a cui è collegata la scheda di rete.

# nmcli c
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  6e6f63b9-6d9e-3d13-a3cd-d54b4ca2c3d2  ethernet  enp0s3
# nmcli d
DEVICE  TYPE      STATE      CONNECTION        
enp0s3  ethernet  connected  Wired connection 1
lo      loopback  unmanaged  --                

Sembra che io abbia un paio di anomalie da esplorare. Innanzitutto, voglio sapere quale dispositivo enp0s20f0u7 è nell'elenco delle connessioni. Poiché NetworkManager non riconosce questo dispositivo nell'elenco dei dispositivi, è probabilmente presente un file di configurazione di rete in /etc/sysconfig/network-scripts anche se sull'host non esiste alcun dispositivo hardware di questo tipo. Ho controllato quella directory, trovato il file di configurazione dell'interfaccia e visualizzato il contenuto.

# ls -l
total 20
-rw-r--r-- 1 root root 352 Jan  2  2021 ifcfg-eno1
-rw-r--r-- 1 root root 419 Jan  5  2021 ifcfg-enp0s20f0u7
-rw-r--r-- 1 root root 381 Jan 11  2021 ifcfg-enp1s0
-rw-r--r-- 1 root root 507 Jul 27  2020 ifcfg-enp2s0
-rw-r--r-- 1 root root 453 Jul 27  2020 ifcfg-enp4s0

cat ifcfg-enp0s20f0u7
# Interface configuration file for ifcfg-enp0s20f0u7
# This is a USB Gb Ethernet dongle
# This interface is for the wireless routers
# Correct as of 20210105
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp0s20f0u7
UUID="fa2117dd-6c7a-44e0-9c9d-9c662716a352"
ONBOOT="yes"
HWADDR=8c:ae:4c:ff:8b:3a
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8

Dopo aver esaminato questo file, mi sono ricordato che avevo usato un dongle USB Gigabit per un po' perché la scheda di rete della scheda madre installata su quell'host era apparentemente guasta. Questa è stata una soluzione rapida e in seguito ho installato una nuova NIC sul bus della scheda madre PCIe, in modo da poter rimuovere questo file di configurazione dell'interfaccia. Tuttavia non l'ho cancellato; L'ho spostato in /root directory nel caso in cui ne avessi bisogno di nuovo.

Nota i commenti che ho usato per assicurarmi che il mio futuro io o un altro amministratore di sistema potessero comprendere il motivo per cui esiste questo file.

La seconda anomalia è il motivo per cui la voce per enp1s0 appare due volte. Ciò può verificarsi solo quando il nome NIC è specificato in più di un file di configurazione dell'interfaccia. Quindi ho provato i seguenti passaggi e, in effetti, enp1s0 appare erroneamente in ifcfg-eno1 file di configurazione e ifcfg-enp1s0 file.

# grep enp1s0 *
ifcfg-eno1:NAME=enp1s0
ifcfg-enp1s0:# Interface configuration file for enp1s0 / 192.168.10.1
ifcfg-enp1s0:NAME=enp1s0

# cat ifcfg-eno1
## Interface configuration file for eno1 / 192.168.10.1
## This interface is for the wireless routers
## Correct as of 20200727
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp1s0
ONBOOT="yes"
HWADDR=04:d9:f5:1c:d5:c5
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8

Ho cambiato il NOME in NOME=eno1 e ho riavviato NetworkManager. Le modifiche ai file di configurazione dell'interfaccia non vengono attivate fino al riavvio di NetworkManager. Il dispositivo e i risultati della connessione ora hanno questo aspetto. Non sto ancora usando la scheda di rete integrata, il che probabilmente va bene ora che ho rimosso il nome sbagliato da ifcfg-eno1 file di configurazione dell'interfaccia. Ciò richiederà tempi di inattività per quel router.

# systemctl restart NetworkManager
# nmcli d
DEVICE  TYPE      STATE        CONNECTION
enp4s0  ethernet  connected    enp4s0    
enp1s0  ethernet  connected    enp1s0    
enp2s0  ethernet  connected    enp2s0    
eno1    ethernet  unavailable  --        
lo      loopback  unmanaged    --        
# nmcli c
NAME    UUID                                  TYPE      DEVICE
enp4s0  b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0  c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0  8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0
eno1    abf4c85b-57cc-4484-4fa9-b4a71689c359  ethernet  --  

Un'altra opzione è mostrare solo le connessioni attive. Questa è una buona opzione con risultati puliti, ma può anche mascherare altri problemi se la usi esclusivamente.

# nmcli connection show --active
NAME    UUID                                  TYPE      DEVICE
enp4s0  b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0  c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0  8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0

Dopo aver cambiato il nome del dispositivo in ifcfg-eno1 file in quello corretto, sospetto che la scheda madre NIC, eno1, funzionerà di nuovo. Lo sperimenterò la prossima volta che avrò una sessione di manutenzione su quell'host.

Non è più interessante di un host con una singola NIC? E ho riscontrato alcuni problemi durante il processo.

L'utilizzo degli strumenti NetworkManager per gestire la rete è trattato nel documento Red Hat Enterprise Linux (RHEL) 8 "Configurazione e gestione della rete".

Pensieri finali

Sono un fan della filosofia "se non è rotto, non aggiustarlo". Tuttavia, anche il più semplice utilizzo di NetworkManager da riga di comando, visualizzando lo stato attuale dei dispositivi di rete e delle connessioni, mi ha mostrato due anomalie nelle mie precedenti configurazioni che mi erano sfuggite. Ora sono un fan di NetworkManager. Gli strumenti più vecchi erano buoni, ma NetworkManager è migliore; le informazioni aggiuntive che fornisce sono inestimabili.

Nella parte 2 di questa serie parlerò della gestione delle interfacce di rete.


Linux
  1. Introduzione ai firewall Linux

  2. Come hai iniziato con Linux?

  3. Iniziare con PostgreSQL su Linux

  4. Introduzione a SSH in Linux

  5. Inizia con Latex su Linux

Inizia con GNUPlot

Iniziare con GIT su Linux

Introduzione al sistema operativo Linux

Tutorial Podman - Inizia con Podman

Network Manager su Linux con esempi

Come iniziare con Arch Linux