109.2 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
109 Fondamenti di Networking |
Obiettivo: |
109.2 Configurazione di rete persistente |
Lezione: |
1 di 2 |
Introduzione
In qualsiasi rete TCP/IP ogni nodo deve aver la scheda di rete correttamente configurata per soddisfare i requisiti del network a cui accede, altrimenti non sarà in grado di effettuare nessuna comunicazione. Pertanto, l’amministratore di sistema deve fornire la configurazione di base in modo che il sistema operativo sia in grado di impostare l’interfaccia di rete appropriata, nonché di identificare a ogni avvio se stesso e le caratteristiche di base della rete.
Le impostazioni di rete sono agnostiche rispetto ai sistemi operativi, ma questi ultimi hanno i loro metodi per memorizzare e applicare queste impostazioni. I sistemi Linux si basano su configurazioni memorizzate in file di testo sotto la directory /etc
. È importante conoscere come questi file vengono utilizzati per evitare la perdita di connettività a causa di un’errata configurazione locale.
L’Interfaccia di Rete
"Interfaccia di rete" è il termine con cui il sistema operativo si riferisce al canale di comunicazione configurato per lavorare con l’hardware di rete collegato al sistema, come un dispositivo ethernet o Wi-Fi. L’eccezione è rappresentata dall’interfaccia di loopback, che il sistema operativo utilizza quando ha bisogno di stabilire una connessione con se stesso, ma lo scopo principale di un’interfaccia di rete è quello di fornire un percorso attraverso il quale i dati locali possono essere inviati e i dati remoti possono essere ricevuti. Se l’interfaccia di rete non è configurata correttamente, il sistema operativo non sarà in grado di comunicare con le altre macchine della rete.
Nella maggior parte dei casi le impostazioni corrette dell’interfaccia sono definite di default o personalizzate durante l’installazione del sistema operativo. Tuttavia, queste impostazioni spesso devono essere controllate o addirittura modificate quando la comunicazione non funziona correttamente o quando il comportamento dell’interfaccia richiede una personalizzazione.
Ci sono molti comandi Linux per elencare quali interfacce di rete sono presenti sul sistema, ma non tutti sono disponibili in tutte le distribuzioni. Il comando ip
, tuttavia, fa parte dell’insieme di base degli strumenti di rete forniti nelle moderne distribuzioni Linux e può essere usato per elencare le interfacce di rete. Il comando completo per mostrare le interfacce è ip link show
:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Se disponibile, può essere usato anche il comando nmcli device
:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
I comandi mostrati negli esempi non modificano alcuna impostazione nel sistema, quindi possono essere eseguiti da un utente senza privilegi. Entrambi i comandi elencano due interfacce di rete: lo
(l’interfaccia di loopback) e enp3s5
(un’interfaccia ethernet).
I desktop e i portatili con Linux hanno di solito due o tre interfacce di rete predefinite, una per l’interfaccia virtuale di loopback e le altre assegnate all’hardware di rete trovato dal sistema. I server e le apparecchiature di rete con Linux, d’altra parte, possono avere decine di interfacce di rete, ma gli stessi principi si applicano senza differenze sostanziali. L’astrazione fornita dal sistema operativo permette la configurazione delle interfacce di rete utilizzando gli stessi metodi, indipendentemente dall’hardware sottostante.
Tuttavia, conoscere i dettagli sull’hardware sottostante di un’interfaccia può essere utile per capire meglio che cosa stia succedendo quando la comunicazione non funziona come previsto. In un sistema in cui sono disponibili molte interfacce di rete, potrebbe, per esempio, non essere ovvio quale corrisponde al wi-fi e quale all’ethernet. Per questo motivo, Linux utilizza una convenzione di denominazione delle interfacce che aiuta a identificare quale interfaccia di rete corrisponde a quale dispositivo e porta.
Nomi di Interfaccia
Le vecchie distribuzioni Linux chiamavano le interfacce di rete ethernet eth0
, eth1
e così via, numerate secondo l’ordine in cui il kernel le identificava. Le interfacce wireless erano chiamate wlan0
, wlan1
e così via. Questa convenzione di denominazione, tuttavia, non chiarisce quale specifica porta ethernet corrisponde all’interfaccia eth0
. A seconda di come veniva rilevato l’hardware, era anche possibile che due interfacce di rete si scambiassero i nomi dopo un riavvio.
Per superare questa ambiguità, i sistemi Linux più recenti impiegano una specifica convenzione di denominazione per le interfacce di rete, creando una relazione più stretta tra il nome dell’interfaccia e la connessione hardware sottostante.
Nelle distribuzioni Linux che usano lo schema di denominazione systemd, tutti i nomi delle interfacce iniziano con un prefisso di due caratteri che indica il tipo di interfaccia:
en
-
Ethernet
ib
-
InfiniBand
sl
-
Serial line IP (slip)
wl
-
Wireless local area network (WLAN)
ww
-
Wireless wide area network (WWAN)
Dalla più alta alla più bassa priorità, vengono utilizzate dal sistema operativo per nominare e numerare le interfacce di rete le seguenti regole:
-
Denominare l’interfaccia rispetto all’indice fornito dal BIOS/UEFI o dal firmware dei dispositivi embedded, per esempio
eno1
. -
Denominare l’interfaccia rispetto all’indice dello slot PCI express, fornito dal BIOS/UEFI o dal firmware, per esempio
ens1
. -
Denominare l’interfaccia rispetto al suo indirizzo sul bus corrispondente, per esempio
enp3s5
. -
Denominare l’interfaccia rispetto al suo MAC address , per esempio
enx78e7d1ea46da
. -
Denominare l’interfaccia usando la convenzione legacy, per esempio
eth0
.
È corretto supporre, per esempio, che l’interfaccia di rete enp3s5
sia stata chiamata così perché non si adattava ai primi due metodi di denominazione, quindi è stato usato il suo indirizzo nel bus e nello slot corrispondente. L’indirizzo del dispositivo 03:05.0
, trovato nell’output del comando lspci
, rivela il dispositivo associato:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
Le interfacce di rete sono create dal kernel Linux stesso, ma ci sono molti comandi che possono essere utilizzati per interagire con esse. Normalmente, la configurazione avviene automaticamente e non c’è bisogno di cambiare le impostazioni manualmente. Tuttavia, con il nome dell’interfaccia, è possibile dire al kernel, se necessario, come procedere nella configurazione.
Gestione dell’Interfaccia
Nel corso degli anni, sono stati sviluppati diversi programmi per interagire con le funzionalità di rete fornite dal kernel Linux. Anche se il vecchio comando ifconfig
può ancora essere usato per fare semplici configurazioni e interrogazioni di interfacce, è ora deprecato a causa del suo limitato supporto di interfacce "non-ethernet". Il comando ifconfig
è stato sostituito dal comando ip
, che è in grado di gestire molti altri aspetti delle interfacce, come rotte e tunnel.
Le molte capacità del comando ip
possono essere eccessive per la maggior parte dei compiti ordinari, quindi ci sono comandi ausiliari per facilitare l’attivazione e la configurazione delle interfacce di rete. I comandi ifup
e ifdown
possono essere usati per configurare le interfacce di rete in base alle definizioni di interfaccia che si trovano nel file /etc/network/interfaces
. Sebbene possano essere invocati manualmente, questi comandi sono normalmente eseguiti automaticamente durante l’avvio del sistema.
Tutte le interfacce di rete gestite da ifup
e ifdown
dovrebbero essere elencate nel file /etc/network/interfaces
. Il formato usato nel file è semplice: le linee che iniziano con la parola auto
sono usate per identificare le interfacce fisiche che devono essere attivate quando ifup
viene eseguito con l’opzione -a
. Il nome dell’interfaccia dovrebbe seguire la parola auto
sulla stessa linea. Tutte le interfacce marcate auto
sono attivate all’avvio, nell’ordine in cui sono elencate.
Warning
|
I metodi di configurazione della rete usati da |
La configurazione vera e propria dell’interfaccia viene scritta in un’altra riga che inizia con la parola iface
, seguita dal nome dell’interfaccia, dal nome della famiglia di indirizzi che l’interfaccia utilizza e dal nome del metodo utilizzato per configurare l’interfaccia. L’esempio seguente mostra un file di configurazione di base per le interfacce lo
(loopback) e enp3s5
:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
La famiglia di indirizzi dovrebbe essere inet
per la rete IPv4, ma c’è anche il supporto per la rete IPX (ipx
), e la rete IPv6 (inet6
). Le interfacce loopback usano il metodo di configurazione loopback
. Con il metodo dhcp
, l’interfaccia userà le impostazioni IP fornite dal server DHCP della rete. Le impostazioni della configurazione di esempio permettono l’esecuzione del comando ifup
utilizzando come argomento il nome dell’interfaccia enp3s5
:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
In questo esempio il metodo scelto per l’interfaccia enp3s5
era dhcp
, quindi il comando ifup
richiama un programma client DHCP per ottenere le impostazioni IP dal server DHCP. Allo stesso modo, il comando ifdown enp3s5
può essere usato per disattivare l’interfaccia.
In reti senza un server DHCP il metodo static
potrebbe essere usato inserendo manualmente le impostazioni IP nel file /etc/network/interfaces
:
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
Le interfacce che usano il metodo static
non hanno bisogno di una direttiva auto
corrispondente, dato che sono avviate ogni volta che viene rilevato l’hardware di rete.
Se la stessa interfaccia ha più di una voce iface
, allora tutti gli indirizzi e le opzioni configurati saranno applicati quando si avvia quell’interfaccia. Questo è utile per configurare sia indirizzi IPv4 che IPv6 sulla stessa interfaccia, così come la configurazione di più indirizzi dello stesso tipo su una singola interfaccia.
Nomi Locali e Remoti
Una configurazione TCP/IP funzionante è solo il primo passo verso la piena usabilità della rete. Oltre a essere in grado di identificare i nodi della rete tramite i loro indirizzi IP, il sistema deve essere in grado di identificarli con nomi più facilmente comprensibili per gli esseri umani.
Il nome con cui il sistema si identifica è personalizzabile ed è buona pratica definirlo, anche se la macchina non è destinata a entrare in una rete. Il nome locale spesso corrisponde al nome di rete della macchina, ma questo non è necessariamente sempre vero. Se il file /etc/hostname
esiste, il sistema operativo userà il contenuto della prima linea come nome locale, in seguito chiamato semplicemente hostname. Le linee che iniziano con #
all’interno di /etc/hostname
vengono ignorate.
Il file /etc/hostname
può essere modificato direttamente, ma l’hostname della macchina può anche essere definito attraverso il comando hostnamectl
. Quando viene fornito con il sottocomando set-hostname
, il comando hostnamectl
prenderà il nome dato come argomento e lo scriverà in /etc/hostname
:
# hostnamectl set-hostname storage # cat /etc/hostname storage
L’hostname definito in /etc/hostname
è l’hostname statico, cioè il nome che viene usato per inizializzare l’hostname del sistema all’avvio. L’hostname statico può essere una stringa a forma libera lunga fino a 64 caratteri. Si raccomanda di utilizzare solo caratteri ASCII minuscoli senza spazi o punti. Ci si dovrebbe anche limitare nella scelta del nome al formato consentito per i nomi di dominio DNS, anche se questo non è un requisito necessario.
Il comando hostnamectl
può impostare altri due tipi di hostname oltre all’hostname statico:
- Pretty hostname
-
A differenza dell’hostname statico, il pretty hostname può includere tutti i tipi di caratteri speciali. Può essere usato per impostare un nome più descrittivo per la macchina, per esempio “LAN Shared Storage”:
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- Transient hostname
-
Usato quando l’hostname statico non è impostato o quando è il nome di default
localhost
. Il transient hostname è di norma il nome impostato insieme ad altre configurazioni automatiche, ma può anche essere modificato dal comandohostnamectl
come nel seguente esempio:# hostnamectl --transient set-hostname generic-host
Se non vengono usate né l’opzione --pretty
né l’opzione --transient
, allora tutti e tre i tipi di hostname saranno impostati al nome dato. Per impostare l’hostname statico, ma non gli altri due, dovrebbe invece essere usata l’opzione --static
. In tutti i casi, solo l’hostname statico è memorizzato nel file /etc/hostname
. Il comando hostnamectl
può anche essere usato per visualizzare varie informazioni descrittive e di identità sul sistema in esecuzione:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Questa è l’azione predefinita del comando hostnamectl
, quindi il sottocomando status
può essere omesso.
Per quanto riguarda il nome dei nodi di rete remoti, ci sono due modi fondamentali che il sistema operativo può implementare per abbinare nomi e indirizzi IP: utilizzare una fonte locale o utilizzare un server remoto per tradurre i nomi in indirizzi IP e viceversa. I metodi possono essere complementari tra loro e l’ordine di priorità è definito nel file di configurazione Name Service Switch: /etc/nsswitch.conf
. Questo file è usato dal sistema e dalle applicazioni per determinare non solo le fonti per le corrispondenze nome-IP, ma anche le fonti da cui ottenere informazioni sul servizio dei nomi in una serie di categorie, chiamate database.
Il database hosts tiene traccia della mappatura tra nomi di host e indirizzi di host. La linea dentro /etc/nsswitch.conf
che inizia con hosts
definisce i servizi responsabili nel fornire le associazioni a tal scopo:
hosts: files dns
In questa voce di esempio files
e dns
sono i nomi dei servizi che specificano come funzionerà il processo di ricerca dei nomi host. Per prima cosa, il sistema cercherà le corrispondenze nei file locali, poi chiederà al servizio DNS le corrispondenze.
Il file locale per il database degli host è /etc/hosts
, un semplice file di testo che associa indirizzi IP a nomi di host, una linea per indirizzo IP. Per esempio:
127.0.0.1 localhost
L’indirizzo IP 127.0.0.1 è l’indirizzo predefinito dell’interfaccia di loopback, da cui la sua associazione con il nome localhost.
È anche possibile legare alias opzionali allo stesso IP. Gli alias possono fornire denominazioni alternative, nomi di host più brevi e dovrebbero essere aggiunti alla fine della linea come di seguito:
192.168.1.10 foo.mydomain.org foo
Le regole di formattazione per il file /etc/hosts
sono:
-
I campi della singola voce sono separati da un numero qualsiasi di spazi vuoti e/o caratteri di tabulazione.
-
Le linee che iniziano con
#
sono un commento e vengono ignorate. -
I nomi degli host possono contenere solo caratteri alfanumerici, segni di meno (
-
) e punti (.
). -
I nomi degli host devono iniziare con un carattere alfabetico e finire con un carattere alfanumerico.
Gli indirizzi IPv6 possono anche essere aggiunti a /etc/hosts
. La seguente voce si riferisce all’indirizzo di loopback IPv6:
::1 localhost ip6-localhost ip6-loopback
Dopo la specifica del servizio files
, la specifica dns
dice al sistema di chiedere a un servizio DNS l’associazione nome macchina/IP. L’insieme delle routine responsabili di questo metodo è chiamato resolver e il suo file standard di configurazione è /etc/resolv.conf
. L’esempio seguente mostra un generico /etc/resolv.conf
contenente voci per i server DNS pubblici di Google:
nameserver 8.8.4.4 nameserver 8.8.8.8
Come mostrato nell’esempio, la parola chiave nameserver
indica l’indirizzo IP del server DNS. È richiesto un solo nameserver, ma possono esserne indicati fino a tre. Quelli supplementari saranno usati come fallback. Se non sono presenti voci di nameserver, il comportamento predefinito è quello di utilizzare il server dei nomi sulla macchina locale (se presente).
Il resolver può essere configurato anche per aggiungere automaticamente un nome di dominio ai nomi host brevi. Per esempio:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
La voce domain
imposta mydomain.org
come nome di dominio locale, così le query per i nomi all’interno di questo dominio saranno autorizzate ad usare nomi brevi relativi al dominio locale. La voce search
ha uno scopo simile, ma accetta una lista di domini da provare quando viene fornito un nome breve. Per impostazione predefinita, contiene solo il nome del dominio locale.
Esercizi Guidati
-
Quali comandi possono essere usati per elencare le schede di rete presenti nel sistema?
-
Qual è il tipo di adattatore di rete il cui nome di interfaccia è
wlo1
? -
Che ruolo ha il file
/etc/network/interfaces
durante l’avvio? -
Quale voce in
/etc/network/interfaces
configura l’interfacciaeno1
per ottenere le sue impostazioni IP attraverso un DHCP server?
Esercizi Esplorativi
-
Come si potrebbe usare il comando
hostnamectl
per cambiare infirewall
solo l’hostname statico della macchina locale? -
Quali dettagli diversi dagli hostname possono essere modificati dal comando
hostnamectl
? -
Quale voce in
/etc/hosts
associa entrambi i nomifirewall
erouter
all’IP10.8.0.1
? -
Come si potrebbe modificare il file
/etc/resolv.conf
per inviare tutte le richieste DNS a1.1.1.1
?
Sommario
Questa lezione mostra i cambiamenti persistenti possibili alla configurazione della rete locale usando file e comandi standard di Linux. Linux si aspetta che le impostazioni TCP/IP siano in percorsi specifici e può essere necessario effettuare cambiamenti quando le impostazioni predefinite non sono appropriate. La lezione tratta i seguenti argomenti:
-
Come Linux identifica le interfacce di rete.
-
L’attivazione delle interfacce durante l’avvio e la configurazione IP di base.
-
Come il sistema operativo associa i nomi agli host.
I concetti, i comandi e le procedure affrontati sono stati:
-
Convenzioni relative alla denominazione delle interfacce.
-
Elenco delle interfacce di rete con
ip
enmcli
. -
Attivazione delle interfacce con
ifup
eifdown
. -
Il comando
hostnamectl
e il file/etc/hostname
. -
I file
/etc/nsswitch.conf
,/etc/hosts
e/etc/resolv.conf
.
Risposte agli Esercizi Guidati
-
Quali comandi possono essere usati per elencare le schede di rete presenti nel sistema?
I comandi
ip link show
,nmcli device
e il legacyifconfig
. -
Qual è il tipo di adattatore di rete il cui nome di interfaccia è
wlo1
?Il nome inizia con
wl
, quindi è un adattatore LAN wireless. -
Che ruolo ha il file
/etc/network/interfaces
durante l’avvio?Include le configurazioni utilizzate dal comando
ifup
per attivare le interfacce corrispondenti durante l’avvio. -
Quale voce in
/etc/network/interfaces
configura l’interfacciaeno1
per ottenere le sue impostazioni IP attraverso un DHCP server?La voce
iface eno1 inet dhcp
.
Risposte agli Esercizi Esplorativi
-
Come si potrebbe usare il comando
hostnamectl
per cambiare infirewall
solo l’hostname statico della macchina locale?Con l’opzione
--static
:hostnamectl --static set-hostname firewall
. -
Quali dettagli diversi dagli hostname possono essere modificati dal comando
hostnamectl
?hostnamectl
può anche impostare il nome dell’icona predefinita per la macchina locale, il tipo di sistema, la posizione e l’ambiente di distribuzione. -
Quale voce in
/etc/hosts
associa entrambi i nomifirewall
erouter
all’IP10.8.0.1
?La linea
10.8.0.1 firewall router
. -
Come si potrebbe modificare il file
/etc/resolv.conf
per inviare tutte le richieste DNS a1.1.1.1
?Usando
nameserver 1.1.1.1
come sua unica voce nameserver.