109.3 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
109 Fondamenti di Networking |
Obiettivo: |
109.3 Risoluzione dei problemi di base di una rete |
Lezione: |
1 di 2 |
Introduzione
Linux ha capacità di rete molto flessibili e potenti. Infatti i sistemi operativi basati su Linux sono spesso usati sui comuni dispositivi di rete, comprese costose apparecchiature commerciali. Questa lezione tratterà solo alcuni strumenti di base per la configurazione e la risoluzione delle problematiche di rete.
Assicurati di aver letto le lezioni sui protocolli Internet e sulla configurazione persistente della rete prima di affrontare questa lezione. In questa lezione scopriremo gli strumenti per risolvere i problemi delle reti IPv4 e IPv6.
Anche se non è un Obiettivo d’Esame ufficiale, i packet sniffers come tcpdump
sono strumenti utili per la risoluzione dei problemi. I packet sniffers permettono di visualizzare e registrare i pacchetti che entrano ed escono da un’interfaccia di rete. Strumenti come hex viewer e protocol analyzer possono essere usati per vedere questi pacchetti in modo più dettagliato di quanto uno sniffer di pacchetti permetta. Non sarebbe male avere una conoscenza almeno di base di tali programmi.
Il Comando ip
Il comando ip
è un’utilità abbastanza recente usata per visualizzare e lavorare su praticamente tutto ciò che riguarda le configurazioni di rete. Questa lezione copre alcuni dei sottocomandi più usati di ip
, ma senza scendere troppo nel dettaglio. Imparare a leggere la documentazione ti aiuterà ad essere molto più efficiente.
Ogni sottocomando di ip
ha la propria pagina man. La sezione SEE ALSO
della pagina man
di ip
ne ha una lista:
$ man ip ... SEE ALSO ip-address(8), ip-addrlabel(8), ip-l2tp(8), ip-link(8), ip-maddress(8), ip-monitor(8), ip-mroute(8), ip-neighbour(8), ip-netns(8), ip- ntable(8), ip-route(8), ip-rule(8), ip-tcp_metrics(8), ip-token(8), ip- tunnel(8), ip-xfrm(8) IP Command reference ip-cref.ps ...
Invece di visualizzarlo ogni volta che hai bisogno della pagina man, aggiungi semplicemente -
e il nome del sottocomando a ip
, per esempio man ip-route
.
Un’altra fonte di informazioni è la funzione di aiuto. Per visualizzare l’aiuto integrato, aggiungi help
dopo il sottocomando:
$ ip address help Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ] [ CONFFLAG-LIST ] ip address del IFADDR dev IFNAME [mngtmpaddr] ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up] ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ] [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up] [ vrf NAME ] ] ip address {showdump|restore} IFADDR := PREFIX | ADDR peer PREFIX ...
Controllo della Maschera di Rete e dell’Instradamento
IPv4 e IPv6 sono noti come protocolli instradati o instradabili. Questo significa che sono progettati in modo da rendere possibile ai progettisti di rete di controllare il flusso del traffico. Ethernet non è un protocollo instradabile. Questo significa che se si dovesse collegare un gruppo di dispositivi insieme usando nient’altro che Ethernet, c’è molto poco che si possa fare per controllare il flusso del traffico di rete. Qualsiasi misura di controllo finirebbe per essere simile agli attuali protocolli di routing e di instradamento.
I protocolli instradabili permettono ai progettisti di rete di segmentare le reti per ridurre i requisiti di elaborazione dei dispositivi di connettività, fornire ridondanza e gestire il traffico.
Gli indirizzi IPv4 e IPv6 hanno due sezioni. La prima serie di bit costituisce la sezione di rete, mentre la seconda serie costituisce la parte host. Il numero di bit che compongono la parte di rete sono determinati dalla netmask (chiamata anche subnet mask). A volte ci si riferisce a essa anche come alla lunghezza del prefisso. Indipendentemente da come viene chiamata, è il numero di bit che la macchina tratta come porzione di rete dell’indirizzo. Con IPv4, a volte è specificato in notazione decimale punteggiata.
Qui si seguito c’è un esempio che utilizza IPv4. Nota come le cifre binarie mantengono il loro valore di posto negli ottetti anche quando viene diviso per la netmask.
192.168.130.5/20 192 168 130 5 11000000 10101000 10000010 00000101 20 bits = 11111111 11111111 11110000 00000000 Network = 192.168.128.0 Host = 2.5
La porzione di rete di un indirizzo è usata da una macchina IPv4 o IPv6 per cercare su quale interfaccia un pacchetto debba essere spedito rispetto alla sua tabella di routing. Quando un host IPv4 o IPv6 con routing abilitato riceve un pacchetto che non è per l’host stesso, cerca di far corrispondere la porzione di rete della destinazione ad una rete nella tabella di routing. Se viene trovata una voce corrispondente, invia il pacchetto alla destinazione specificata nella tabella di routing. Se non vengono trovate voci e viene configurata una rotta predefinita, il pacchetto viene inviato alla rotta predefinita. Se non viene trovata alcuna voce e non è configurata alcuna rotta predefinita, il pacchetto viene scartato.
Configurare un’Interfaccia
Tratteremo due strumenti che puoi usare per configurare un’interfaccia di rete: ifconfig
e ip
. Il programma ifconfig
, sebbene ancora ampiamente utilizzato, è considerato uno strumento legacy e potrebbe non essere disponibile sui sistemi più recenti.
Sulle distribuzioni Linux più recenti, l’installazione del pacchetto net-tools
ti fornirà i comandi di rete legacy.
Prima di configurare un’interfaccia devi sapere quali siano quelle disponibili. Ci sono alcuni modi per farlo. Uno di questi è usare l’opzione -a
di ifconfig
:
$ ifconfig -a
Un altro modo è con ip
. A volte vedrai esempi con ip addr
, ip a
, e alcuni con ip address
. Sono sinonimi. Ufficialmente, il sottocomando è ip address
. Questo significa che se vuoi vedere la pagina man, devi usare man ip-address
e non man ip-addr
.
Il sottocomando link
per ip
elencherà i collegamenti di interfaccia disponibili per la configurazione:
$ ip link 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:18:57 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff
Assumendo che il filesystem sys
sia montato, puoi anche elencare il contenuto di /sys/class/net
:
$ ls /sys/class/net enp0s3 enp0s8 lo
Per configurare un’interfaccia con ifconfig
, devi essere loggato come root o usare un’utilità come sudo
per eseguire il comando con i privilegi di root. Segui l’esempio qui sotto:
# ifconfig enp1s0 192.168.50.50/24
La versione Linux di ifconfig
è abbastanza flessibile sul come indicare la subnet mask:
# ifconfig eth2 192.168.50.50 netmask 255.255.255.0 # ifconfig eth2 192.168.50.50 netmask 0xffffff00 # ifconfig enp0s8 add 2001:db8::10/64
Nota come con IPv6 è stata usata la parola chiave add
. Se non fai precedere un indirizzo IPv6 da add
, otterrai un messaggio di errore.
Il seguente comando configura un’interfaccia con ip
:
# ip addr add 192.168.5.5/24 dev enp0s8 # ip addr add 2001:db8::10/64 dev enp0s8
Con ip
, lo stesso comando è usato sia per IPv4 sia per IPv6.
Configurare Opzioni di Basso Livello
Il comando ip link
è usato per configurare l’interfaccia o le impostazioni del protocollo come VLAN, ARP o MTU a basso livello o per disabilitare un’interfaccia.
Un compito frequente per ip link
è disabilitare o abilitare un’interfaccia. Questo può essere fatto anche con ifconfig
:
# ip link set dev enp0s8 down # ip link show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff # ifconfig enp0s8 up # ip link show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff
A volte potrebbe essere necessario regolare l’MTU di un’interfaccia. Come per abilitare/disabilitare le interfacce, questo può essere fatto sia con ifconfig
che con ip link
:
# ip link set enp0s8 mtu 2000 # ip link show dev enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:53:59 brd ff:ff:ff:ff:ff:ff # ifconfig enp0s3 mtu 1500 # ip link show dev enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:53:59 brd ff:ff:ff:ff:ff:ff
La Tabella di Routing
I comandi route
, netstat -r
, e ip route
possono tutti essere usati per visualizzare la tabella di routing. Se vuoi modificare le tue rotte, devi usare route
o ip route
. Di seguito sono riportati esempi di visualizzazione di una tabella di routing:
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3 192.168.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8 $ ip route default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 192.168.150.0/24 dev enp0s8 proto kernel scope link src 192.168.150.200 $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 10.0.2.2 0.0.0.0 UG 100 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8
Nota che non c’è alcun output riguardante IPv6. Se vuoi vedere la tua tabella di routing per IPv6, devi usare route -6
, netstat -6r
o ip -6 route
.
$ route -6 Kernel IPv6 routing table Destination Next Hop Flag Met Ref Use If 2001:db8::/64 [::] U 256 0 0 enp0s8 fe80::/64 [::] U 100 0 0 enp0s3 2002:a00::/24 [::] !n 1024 0 0 lo [::]/0 2001:db8::1 UG 1 0 0 enp0s8 localhost/128 [::] Un 0 2 84 lo 2001:db8::10/128 [::] Un 0 1 0 lo fe80::a00:27ff:fe54:5359/128 [::] Un 0 1 0 lo ff00::/8 [::] U 256 1 3 enp0s3 ff00::/8 [::] U 256 1 6 enp0s8
Un esempio di netstat -r6
è stato omesso perché il suo output è identico a quello di route -6
. Alcuni degli output del precedente comando route
sono autoesplicativi. La colonna Flag
fornisce alcune informazioni sulla rotta. La flag U
indica che una rotta è attiva. Un !
significa rifiutare la rotta, cioè una rotta con un !
non sarà usata. La flag n
significa che la rotta non è stata messa in cache (il kernel mantiene una cache delle rotte per una ricerca più veloce separatamente da tutte le rotte conosciute). La flag G
indica un gateway. La colonna Metric
o Met
non è usata dal kernel: si riferisce alla distanza amministrativa dalla destinazione. Questa distanza amministrativa è usata dai protocolli di routing per determinare le rotte dinamiche. La colonna Ref
è il conteggio dei riferimenti, o il numero di usi di una rotta. Come la Metric
, non è usata dal kernel Linux. La colonna Use
mostra il numero di ricerche per una rotta.
Nell’output di netstat -r
, MSS
indica la dimensione massima del segmento per le connessioni TCP su quel percorso. La colonna Window
mostra la dimensione della finestra TCP default. irtt
mostra il tempo di andata e ritorno per i pacchetti su questa rotta.
L’output di ip route
e ip -6 route
è il seguente:
-
Destinazione.
-
Indirizzo opzionale seguito dall’interfaccia.
-
Il protocollo di routing utilizzato per aggiungere il percorso.
-
L’ambito della rotta. Se questo è omesso, è l’ambito globale, o un gateway.
-
La metrica della rotta. Questo è usato dai protocolli di routing dinamico per determinare il costo della rotta. Non è usato dalla maggior parte dei sistemi.
-
Se è una rotta IPv6, la preferenza di rotta RFC4191.
Lavorare su alcuni esempi dovrebbe chiarire questo punto:
- Esempio IPv4
-
default via 10.0.2.2 dev enp0s3 proto dhcp metric 100
-
La destinazione è la rotta predefinita.
-
L’indirizzo del gateway è
10.0.2.2
raggiungibile attraverso l’interfacciaenp0s3
. -
La destinazione è stata aggiunta alla tabella di routing dal DHCP.
-
L’ambito è stato omesso, quindi è globale.
-
La rotta ha un valore di costo di
100
. -
Nessuna preferenza di rotta IPv6.
-
- Esempio IPv6
-
fc0::/64 dev enp0s8 proto kernel metric 256 pref medium
-
La destinazione è
fc0::/64
. -
È raggiungibile attraverso l’interfaccia
enp0s8
. -
La destinazione è stata aggiunta alla tabella di routing dal kernel.
-
Lo scopo è stato omesso, quindi è globale.
-
La rotta ha un valore di costo di
256
. -
Ha una preferenza IPv6 di
medium
.
-
Gestire le Rotte
Le rotte possono essere gestite usando route
o ip route
. Di seguito è riportato un esempio di aggiunta e rimozione di una rotta usando il comando route
. Con route
, devi usare l’opzione -6
per IPv6:
# ping6 -c 2 2001:db8:1::20 connect: Network is unreachable # route -6 add 2001:db8:1::/64 gw 2001:db8::3 # ping6 -c 2 2001:db8:1::20 PING 2001:db8:1::20(2001:db8:1::20) 56 data bytes 64 bytes from 2001:db8:1::20: icmp_seq=1 ttl=64 time=0.451 ms 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.438 ms # route -6 del 2001:db8:1::/64 gw 2001:db8::3 # ping6 -c 2 2001:db8:1::20 connect: Network is unreachable
Lo stesso esempio usando il comando ip route
:
# ping6 -c 2 2001:db8:1:20 connect: Network is unreachable # ip route add 2001:db8:1::/64 via 2001:db8::3 # ping6 -c 2 2001:db8:1:20 PING 2001:db8:1::20(2001:db8:1::20) 56 data bytes 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.529 ms 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.438 ms # ip route del 2001:db8:1::/64 via 2001:db8::3 # ping6 -c 2 2001:db8:1::20 connect: Network is unreachable
Esercizi Guidati
-
Quali comandi possono essere usati per elencare le interfacce di rete?
-
Come si fa a disabilitare temporaneamente un’interfaccia? Come la riabiliteresti?
-
Quale delle seguenti è una subnet mask possibile per IPv4?
0.0.0.255
255.0.255.0
255.252.0.0
/24
-
Quali comandi puoi usare per verificare la tua rotta predefinita?
-
Come si può aggiungere un secondo indirizzo IP a un’interfaccia?
Esercizi Esplorativi
-
Quale sottocomando di
ip
può essere usato per configurare il vlan tagging? -
Come si configura una rotta predefinita?
-
Come si possono ottenere informazioni dettagliate sul comando
ip neighbour
? Che cosa succede se lo esegui da solo? -
Come eseguiresti il backup della tua tabella di routing? Come la ripristineresti?
-
Quale sottocomando
ip
può essere usato per configurare le opzioni dello spanning tree?
Sommario
Il networking è solitamente configurato dagli script di avvio di un sistema o da un assistente come NetworkManager. La maggior parte delle distribuzioni ha strumenti che modificano i file di configurazione degli script d’avvio. Consulta la documentazione della distribuzione per maggiori dettagli.
Essere in grado di configurare manualmente la rete permette di risolvere i problemi in modo più efficace. È utile in ambienti minimali, utilizzati per operazioni quali il ripristino da backup o la migrazione a un nuovo hardware.
Le utilità trattate in questa sezione hanno più funzionalità di quelle trattate. Sarebbe utile dare un’occhiata alla pagina man
di ciascuna per familiarizzare con le opzioni disponibili. I comandi ss
e ip
rappresentano il modo moderno di fare le cose, mentre gli altri che sono trattati, sebbene ancora di uso comune, sono considerati strumenti legacy.
Il modo migliore per familiarizzare con gli strumenti trattati è la pratica. Usando un computer con una modesta quantità di RAM è possibile impostare un laboratorio di rete virtuale usando macchine virtuali con cui fare pratica. Tre virtual machine sono sufficienti per prendere confidenza con gli strumenti elencati.
I comandi usati in questa lezione includono:
ifconfig
-
utilità legacy usata per configurare le interfacce di rete e rivedere i loro stati.
ip
-
Utilità moderna e versatile usata per configurare le interfacce di rete e rivedere i loro stati.
netstat
-
Comando legacy usato per visualizzare le connessioni di rete correnti e le informazioni sulle rotte.
route
-
Comando legacy usato per visualizzare o modificare la tabella di routing di un sistema.
Risposte agli Esercizi Guidati
-
Quali comandi possono essere usati per elencare le interfacce di rete?
Uno dei comandi sottostanti:
ip link
,ifconfig -a
ols /sys/class/net
-
Come si fa a disabilitare temporaneamente un’interfaccia? Come la riabiliteresti?
Puoi utilizzare
ifconfig
oip link
:Usando
ifconfig
:$ ifconfig wlan1 down $ ifconfig wlan1 up
Usando
ip link
:$ ip link set wlan1 down $ ip link set wlan1 up
-
Quale delle seguenti è una subnet mask possibile per IPv4?
-
255.252.0.0
-
/24
Le altre maschere elencate non sono valide perché non separano l’indirizzo in modo chiaro in due sezioni, la prima parte che definisce la rete e la seconda l’host. I bit più a sinistra di una maschera saranno sempre
1
e i bit a destra saranno sempre0
.
-
-
Quali comandi puoi usare per verificare la tua rotta predefinita?
Puoi utlizzare
route
,netstat -r
, oip route
:$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default server 0.0.0.0 UG 600 0 0 wlan1 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan1 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default server 0.0.0.0 UG 0 0 0 wlan1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1 $ ip route default via 192.168.1.20 dev wlan1 proto static metric 600 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.24 metric 600
-
Come si può aggiungere un secondo indirizzo IP a un’interfaccia?
Puoi usare
ip address
oifconfig
. Tieni presente cheifconfig
è uno strumento legacy:$ ip addr add 172.16.15.16/16 dev enp0s9 label enp0s9:sub1
La parte del comando
label enp0s9:sub1
aggiunge un alias aenp0s9
. Se non usi il legacyifconfig
puoi ometterlo. Se lo fai, il comando funzionerà ancora, ma l’indirizzo che hai appena aggiunto non apparirà nell’output diifconfig
.Puoi usare anche
ifconfig
:$ ifconfig enp0s9:sub1 172.16.15.16/16
Risposte agli Esercizi Esplorativi
-
Quale sottocomando di
ip
può essere usato per configurare il vlan tagging?ip link
ha un’opzionevlan
che può essere usata. Di seguito è riportato un esempio di tagging di una sottointerfaccia con vlan 20.# ip link add link enp0s9 name enp0s9.20 type vlan id 20
-
Come si configura una rotta predefinita?
Utilizzando
route
oip route
:# route add default gw 192.168.1.1 # ip route add default via 192.168.1.1
-
Come si possono ottenere informazioni dettagliate sul comando
ip neighbour
? Cosa succede se lo esegui da solo?Leggendo la pagina
man
:$ man ip-neigbour
Visualizza la cache ARP:
$ ip neighbour 10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 REACHABLE
-
Come faresti il backup della tua tabella di routing? Come la ripristineresti?
L’esempio seguente mostra il backup e il ripristino di una tabella di routing:
# ip route save > /root/routes/route_backup # ip route restore < /root/routes/route_backup
-
Quale sottocomando
ip
può essere usato per configurare le opzioni dello spanning tree?Similmente alla gestione delle impostazioni vlan,
ip link
può configurare lo spanning tree usando il tipobridge
. L’esempio mostra l’aggiunta di un’interfaccia virtuale con una priorità STP di 50:# ip link add link enp0s9 name enp0s9.50 type bridge priority 50