109.2 Lezione 2
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
109 Fondamenti di Networking |
Obiettivo: |
109.2 Configurazione di rete persistente |
Lezione: |
2 di 2 |
Introduzione
Linux supporta virtualmente ogni tecnologia di rete utilizzata per collegare server, container, macchine virtuali, desktop e dispositivi mobile. Le connessioni tra tutti questi nodi di rete possono essere dinamiche ed eterogenee, richiedendo così una gestione appropriata da parte del sistema operativo che vi gira.
In passato le distribuzioni sviluppavano le proprie soluzioni personalizzate per gestire l’infrastruttura di rete dinamica. Oggi, strumenti come NetworkManager e systemd forniscono caratteristiche più complete e integrate per soddisfare tutte le richieste specifiche.
NetworkManager
La maggior parte delle distribuzioni Linux adotta il demone di servizio NetworkManager per configurare e controllare le connessioni di rete del sistema. Lo scopo di NetworkManager è di rendere la configurazione della rete il più semplice e automatica possibile. Quando si usa il DHCP, per esempio, NetworkManager organizza i cambiamenti della default route, il recupero degli indirizzi IP e gli aggiornamenti alla lista locale dei server DNS, se necessario. Quando sono disponibili sia connessioni cablate sia wireless, NetworkManager dà per impostazione predefinita la priorità alla connessione cablata. NetworkManager cercherà di mantenere almeno una connessione attiva per tutto il tempo, quando è possibile.
Note
|
Una richiesta tramite DHCP (Dynamic Host Configuration Protocol) viene solitamente inviata attraverso la scheda di rete non appena viene stabilito il collegamento. Il server DHCP attivo sulla rete risponde quindi con le impostazioni (indirizzo IP, maschera di rete, rotta predefinita, ecc.) che il richiedente deve utilizzare per comunicare tramite il protocollo IP. |
Per impostazione predefinita, il demone NetworkManager controlla le interfacce di rete non menzionate nel file /etc/network/interfaces
. Lo fa per non interferire con altri metodi di configurazione che possono essere presenti, modificando così solo le interfacce non controllate.
Il demone NetworkManager viene eseguito in background con privilegi di root e avvia le azioni necessarie per mantenere il sistema online. Gli utenti ordinari possono creare e modificare connessioni di rete con applicazioni client che, pur non avendo privilegi di root, sono in grado di comunicare con il servizio sottostante per eseguire le azioni richieste.
Le applicazioni client per NetworkManager sono disponibili sia per la linea di comando sia per l’ambiente grafico. Per quest’ultimo, l’applicazione client viene fornita come accessorio dell’ambiente desktop (sotto nomi come nm-tray, network-manager-gnome, nm-applet o plasma-nm) ed è solitamente accessibile attraverso un’icona indicatore nell’angolo della barra del desktop o dall’utilità di configurazione del sistema.
Nella linea di comando NetworkManager stesso fornisce due programmi client: nmcli
e nmtui
. Entrambi i programmi hanno le stesse caratteristiche di base, ma nmtui
ha un’interfaccia basata su curses mentre nmcli
è un comando più completo che può essere usato anche negli script. Il comando nmcli
separa tutte le proprietà relative alla rete controllate da NetworkManager in categorie chiamate objects:
general
-
Stato e operazioni generali di NetworkManager.
networking
-
Controllo generale della rete.
radio
-
Interruttori per wireless di NetworkManager.
connection
-
Connessioni di NetworkManager.
device
-
Dispositivi gestiti da NetworkManager.
agente
-
Agente password o
polkit
di NetworkManager. monitor
-
Monitor di cambiamenti di NetworkManager.
Il nome dell’oggetto è l’argomento principale del comando nmcli
. Per mostrare lo stato generale di connettività del sistema, per esempio, l’oggetto general
dovrebbe essere dato come argomento:
$ nmcli general STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled
La colonna STATE
dice se il sistema è connesso a una rete oppure no. Se la connessione è limitata a causa di una cattiva configurazione esterna o di restrizioni di accesso, allora la colonna CONNECTIVITY
non riporterà lo stato di connettività full
. Se nella colonna CONNECTIVITY
appare Portal
, significa che sono richiesti passaggi di autenticazione extra (di solito attraverso il browser web) per completare il processo di connessione. Le colonne rimanenti riportano lo stato delle connessioni wireless (se presenti), sia WIFI
che WWAN
(Wide Wireless Area Network, cioè reti cellulari). Il suffisso HW
indica lo stato corrispondente al dispositivo di rete piuttosto che alla connessione di rete di sistema, quindi dice anche se l’hardware è abilitato o disabilitato per risparmiare energia.
Oltre all’argomento oggetto, nmcli
ha bisogno per essere eseguito anche di un argomento. Il comando status
è usato per default se non è presente alcun argomento di comando, quindi il comando nmcli general
è effettivamente interpretato come nmcli general status
.
Di rado è necessario intraprendere azioni specifiche quando l’adattatore di rete è collegato direttamente al punto di accesso tramite cavi, le reti wireless al contrario richiedono specifiche configurazioni per poter funzionare. nmcli
facilita il processo di connessione e salva le impostazioni per connettersi automaticamente in futuro, quindi è molto utile per i computer portatili o qualsiasi altro device mobile.
Prima di connettersi al wi-fi, è utile prima elencare le reti disponibili. Se il sistema ha un adattatore wi-fi funzionante, allora l’oggetto device
potrà essere usato per scansionare le reti disponibili con il comando nmcli device wifi list
:
$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 90:F6:52:C5:FA:12 Hypnotoad Infra 11 130 Mbit/s 67 ▂▄▆_ WPA2 10:72:23:C7:27:AC Jumbao Infra 1 130 Mbit/s 55 ▂▄__ WPA2 00:1F:33:33:E9:BE NETGEAR Infra 1 54 Mbit/s 35 ▂▄__ WPA1 WPA2 A4:33:D7:85:6D:B0 AP53 Infra 11 130 Mbit/s 32 ▂▄__ WPA1 WPA2 98:1E:19:1D:CC:3A Bruma Infra 1 195 Mbit/s 22 ▂___ WPA1 WPA2
La maggior parte degli utenti probabilmente userà il nome nella colonna SSID
per identificare la rete di interesse. Per esempio, il comando nmcli
può connettersi alla rete chiamata Hypnotoad
usando ancora l’oggetto device
:
$ nmcli device wifi connect Hypnotoad
Se il comando viene eseguito all’interno di un emulatore di terminale in ambiente grafico, allora apparirà una finestra di dialogo che chiede la passphrase della rete. Quando viene eseguito in una console di solo testo, la password può essere fornita insieme agli altri argomenti:
$ nmcli device wifi connect Hypnotoad password MyPassword
Se la rete wi-fi nasconde il suo nome SSID, nmcli
può ancora connettersi ad essa con gli argomenti extra hidden yes
:
$ nmcli device wifi connect Hypnotoad password MyPassword hidden yes
Se il sistema ha più di un adattatore wi-fi, quello da usare può essere indicato con ifname
. Per esempio, per connettersi usando l’adattatore chiamato wlo1
:
$ nmcli device wifi connect Hypnotoad password MyPassword ifname wlo1
Dopo che la connessione ha successo, NetworkManager assegnerà alla connessione il nome dell’SSID corrispondente (se è una connessione wi-fi) e lo conserverà per le connessioni future. I nomi delle connessioni e i loro UUID sono elencati dal comando nmcli connection show
:
$ nmcli connection show NAME UUID TYPE DEVICE Ethernet 53440255-567e-300d-9922-b28f0786f56e ethernet enp3s5 tun0 cae685e1-b0c4-405a-8ece-6d424e1fb5f8 tun tun0 Hypnotoad 6fdec048-bcc5-490a-832b-da83d8cb7915 wifi wlo1 4G a2cf4460-0cb7-42e3-8df3-ccb927f2fd88 gsm --
Viene mostrato il tipo di ogni connessione — che può essere ethernet
, wifi
, tun
, gsm
, bridge
, ecc. — così come il dispositivo a cui sono associate. Per eseguire azioni su una specifica connessione è necessario fornire il nome o UUID. Per disattivare la connessione Hypnotoad
, per esempio:
$ nmcli connection down Hypnotoad Connection 'Hypnotoad' successfully deactivated
Allo stesso modo, il comando nmcli connection up Hypnotoad
può essere usato per attivare la connessione, dato che ora è salvata da NetworkManager. Il nome dell’interfaccia può anche essere usato per riconnettersi, ma in questo caso l’oggetto device
dovrebbe invece essere usato nel modo seguente:
$ nmcli device disconnect wlo2 Device 'wlo1' successfully disconnected.
Il nome dell’interfaccia può anche essere usato per ristabilire la connessione:
$ nmcli device connect wlo2 Device 'wlo1' successfully activated with '833692de-377e-4f91-a3dc-d9a2b1fcf6cb'.
Si noti che l’UUID della connessione cambia ogni volta che la connessione viene richiamata, quindi è preferibile usare il suo nome per coerenza.
Se l’adattatore wireless è disponibile ma non viene utilizzato, allora può essere spento per risparmiare energia. Questa volta, l’oggetto radio dovrebbe essere passato a nmcli
:
$ nmcli radio wifi off
Naturalmente il dispositivo wireless può essere riacceso con il comando nmcli radio wifi on
.
Una volta che le connessioni sono stabilite non sarà necessaria alcuna interazione manuale in futuro, poiché NetworkManager identifica le reti conosciute disponibili e si connette automaticamente ad esse. Se necessario, NetworkManager ha dei plugin che possono estendere le sue funzionalità, come il plugin per supportare le connessioni VPN.
systemd-networkd
I sistemi che eseguono systemd possono opzionalmente usare i suoi demoni integrati per gestire la connettività di rete: systemd-networkd
per controllare le interfacce di rete e systemd-resolved
per gestire la risoluzione dei nomi locali. Questi servizi sono retro compatibili con i precedenti metodi di configurazione di Linux, ma la configurazione delle interfacce di rete in particolare ha caratteristiche che vale la pena conoscere.
I file di configurazione usati da systemd-networkd per impostare le interfacce di rete possono essere trovati in una delle seguenti tre directory:
/lib/systemd/network
-
La directory della rete di sistema.
/run/systemd/network
-
La directory non persistente della rete di runtime.
/etc/systemd/network
-
La directory di amministrazione locale della rete.
I file sono processati in ordine lessicografico, quindi si raccomanda di iniziare i loro nomi con dei numeri per rendere l’ordine più facile da leggere e da impostare.
I file in /etc
hanno la massima priorità, mentre i file in /run
hanno la precedenza sui file con lo stesso nome in /lib
. Questo significa che se i file di configurazione in diverse directory hanno lo stesso nome, allora systemd-networkd ignorerà i file con priorità minore. Separare i file in questo modo è un metodo per cambiare le impostazioni dell’interfaccia senza dover modificare i file originali: le modifiche possono essere apportate in /etc/systemd/network
per sovrascrivere quelle in /lib/systemd/network
.
Lo scopo di ogni file di configurazione dipende dal suo suffisso. I nomi dei file che terminano in .netdev
sono usati da systemd-networkd per creare dispositivi di rete virtuali, come i dispositivi bridge o tun. I file che terminano in .link
impostano configurazioni di basso livello per l’interfaccia di rete corrispondente. systemd-networkd rileva e configura automaticamente i dispositivi di rete non appena appaiono e ignora i dispositivi già configurati con altri mezzi, quindi non c’è bisogno di aggiungere questi file.
Il suffisso più importante è .network
. I file che usano questo suffisso possono essere usati per impostare indirizzi e percorsi di rete. Come per gli altri tipi di file di configurazione, il nome del file definisce l’ordine in cui il file sarà processato. L’interfaccia di rete a cui il file di configurazione si riferisce è definita nella sezione [Match]
all’interno del file.
Per esempio, l’interfaccia di rete ethernet enp3s5
può essere selezionata nel file /etc/systemd/network/30-lan.network
usando la voce Name=enp3s5
nella sezione [Match]
:
[Match] Name=enp3s5
Viene accettata anche una lista di nomi separati da spazi vuoti per abbinare in una sola volta molte interfacce di rete con questo stesso file. I nomi possono contenere raggruppamenti (globs) in stile shell, come en*
. Altre voci forniscono varie regole di corrispondenza, come il selezionare un dispositivo di rete in base al suo indirizzo MAC:
[Match] MACAddress=00:16:3e:8d:2b:5b
Le impostazioni per il dispositivo sono nella sezione [Network]
del file. Una semplice configurazione di rete statica richiede solo le voci Address
e Gateway
:
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] Address=192.168.0.100/24 Gateway=192.168.0.1
Per usare il protocollo DHCP invece di indirizzi IP statici, si dovrebbe usare la voce DHCP
:
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] DHCP=yes
Il servizio systemd-networkd cercherà di recuperare entrambi gli indirizzi IPv4 e IPv6 per l’interfaccia di rete. Per usare solo IPv4 dovrebbe essere usato DHCP=ipv4
. Allo stesso modo, DHCP=ipv6
ignorerà le impostazioni IPv4 e userà solo l’indirizzo IPv6 fornito.
Le reti wireless protette da password possono anche essere configurate da systemd-networkd, ma l’adattatore di rete deve essere già autenticato nella rete prima che systemd-networkd possa configurarlo. L’autenticazione è eseguita da WPA supplicant, un programma dedicato alla configurazione di adattatori di rete per reti protette da password.
Il primo passo è creare il file delle credenziali con il comando wpa_passphrase
:
# wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
Questo comando prenderà la passphrase per la rete wireless MyWifi
dallo standard input e memorizzerà il suo hash nel file /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
. Si noti che il nome del file dovrebbe contenere il nome appropriato dell’interfaccia wireless, da cui il wlo1
nel nome del file.
Il gestore systemd legge i file di passphrase WPA in /etc/wpa_supplicant/
e crea il servizio corrispondente per eseguire WPA supplicant e attivare l’interfaccia. Il file passphrase creato nell’esempio avrà quindi un servizio corrispondente chiamato wpa_supplicant@wlo1.service
. Il comando systemctl start wpa_supplicant@wlo1.service
assocerà l’adattatore wireless con il punto di accesso remoto. Il comando systemctl enable wpa_supplicant@wlo1.service
rende l’associazione automatica durante l’avvio.
Infine, un file .network
corrispondente all’interfaccia wlo1
deve essere presente in /etc/systemd/network/
, poiché systemd-networkd lo userà per configurare l’interfaccia non appena il WPA supplicant termina l’associazione con l’access point.
Esercizi Guidati
-
Qual è il significato della parola
Portal
nella colonnaCONNECTIVITY
nell’output del comandonmcli general status
? -
In un terminale di console, come può un utente normale usare il comando
nmcli
per connettersi alla rete wirelessMyWifi
protetta dalla passwordMyPassword
? -
Quale comando può accendere l’adattatore wireless se è stato precedentemente disabilitato dal sistema operativo?
-
In quale directory dovrebbero essere messi i file di configurazione personalizzati quando systemd-networkd sta gestendo le interfacce di rete?
Esercizi Esplorativi
-
Come può un utente eseguire il comando
nmcli
per cancellare una connessione inutilizzata chiamataHotel Internet
? -
NetworkManager scansiona le reti wi-fi periodicamente e il comando
nmcli device wifi list
elenca solo gli access point trovati nell’ultima scansione. Come dovrebbe essere usato il comandonmcli
per chiedere a NetworkManager di eseguire immediatamente una nuova scansione di tutti gli access point disponibili? -
Quale voce
name
dovrebbe essere usata nella sezione[Match]
di un file di configurazione systemd-networkd per far corrispondere tutte le interfacce ethernet? -
Come dovrebbe essere eseguito il comando
wpa_passphrase
per usare la passphrase data come argomento e non dallo standard input?
Sommario
Questa lezione mostra gli strumenti comuni usati in Linux per gestire connessioni di rete eterogenee e dinamiche. Anche se la maggior parte dei metodi di configurazione non richiede l’intervento dell’utente, a volte può essere necessario farlo e strumenti come NetworkManager e systemd-networkd possono ridurre il fastidio al minimo. La lezione tratta i seguenti argomenti:
-
Come NetworkManager e systemd-networkd si integrano con il sistema.
-
Come l’utente può interagire con NetworkManager e systemd-networkd.
-
Configurazione di base dell’interfaccia sia con NetworkManager che con systemd-networkd.
I concetti, i comandi e le procedure affrontati sono stati:
-
I comandi client di NetworkManager:
nmtui
enmcli
. -
Scansione e connessione alle reti wireless usando i comandi appropriati di
nmcli
. -
Connessioni di rete wi-fi persistenti usando systemd-networkd.
Risposte agli Esercizi Guidati
-
Qual è il significato della parola
Portal
nella colonnaCONNECTIVITY
nell’output del comandonmcli general status
?Significa che sono necessari dei passi di autenticazione extra (di solito attraverso il browser web) per completare il processo di connessione.
-
In un terminale di console, come può un utente normale usare il comando
nmcli
per connettersi alla rete wirelessMyWifi
protetta dalla passwordMyPassword
?In un terminale di solo testo, il comando sarebbe:
$ nmcli device wifi connect MyWifi password MyPassword
-
Quale comando può accendere l’adattatore wireless se è stato precedentemente disabilitato dal sistema operativo?
$ nmcli radio wifi on
-
In quale directory dovrebbero essere messi i file di configurazione personalizzati quando systemd-networkd sta gestendo le interfacce di rete?
Nella directory dell’amministrazione locale di rete:
/etc/systemd/network
.
Risposte agli Esercizi Esplorativi
-
Come può un utente eseguire il comando
nmcli
per cancellare una connessione inutilizzata chiamataHotel Internet
?$ nmcli connection delete "Hotel Internet"
-
NetworkManager scansiona le reti wi-fi periodicamente e il comando
nmcli device wifi list
elenca solo gli access point trovati nell’ultima scansione. Come dovrebbe essere usato il comandonmcli
per chiedere a NetworkManager di eseguire immediatamente una nuova scansione di tutti gli access point disponibili?L’utente root può eseguire
nmcli device wifi rescan
per far sì che NetworkManager riesamini i punti di accesso disponibili. -
Quale voce
name
dovrebbe essere usata nella sezione[Match]
di un file di configurazione systemd-networkd per far corrispondere tutte le interfacce ethernet?La voce
name=en*
, poichéen
è il prefisso per le interfacce ethernet in Linux e systemd-networkd accetta i raggruppamenti di tipo shell. -
Come dovrebbe essere eseguito il comando
wpa_passphrase
per usare la passphrase data come argomento e non dallo standard input?La password dovrebbe essere data subito dopo l’SSID, come in
wpa_passphrase MyWifi MyPassword
.