109.3 Lezione 2
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
109 Fondamenti di Networking |
Obiettivo: |
109.3 Risoluzione dei problemi di base di una rete |
Lezione: |
2 di 2 |
Introduzione
I sistemi operativi basati su Linux hanno una varietà di strumenti con cui risolvere tutta una serie di problematiche di rete. Questa lezione tratterà alcuni dei più comuni. A questo punto dovresti avere una comprensione del modello OSI o di altri modelli di rete a strati, dell’indirizzamento IPv4 o IPv6, e una conoscenza di base di routing e switching.
Il modo migliore per testare una connessione di rete è provare a usare un’applicazione. Quando questo metodo non funziona, ci sono molti strumenti disponibili per aiutarti a diagnosticare il problema.
Fare Test di Connessione con ping
I comandi ping
e ping6
possono essere usati per inviare una richiesta ICMP echo a un indirizzo IPv4 o IPv6. Un messaggio ICMP echo request invia una piccola quantità di dati all’indirizzo di destinazione. Se l’indirizzo di destinazione è raggiungibile, invierà un messaggio di ICMP echo reply al mittente con gli stessi dati che gli sono stati inviati:
$ ping -c 3 192.168.50.2 PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data. 64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.525 ms 64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=0.419 ms 64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=0.449 ms --- 192.168.50.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.419/0.464/0.525/0.047 ms
$ ping6 -c 3 2001:db8::10 PING 2001:db8::10(2001:db8::10) 56 data bytes 64 bytes from 2001:db8::10: icmp_seq=1 ttl=64 time=0.425 ms 64 bytes from 2001:db8::10: icmp_seq=2 ttl=64 time=0.480 ms 64 bytes from 2001:db8::10: icmp_seq=3 ttl=64 time=0.725 ms --- 2001:db8::10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.425/0.543/0.725/0.131 ms
L’opzione -c
è usata per specificare il numero di pacchetti da inviare. Se ometti questa opzione, ping
e ping6
continueranno a inviare pacchetti fino a quando non li fermerai, tipicamente con la combinazione di tastiera Ctrl+C.
Solo perché non si può eseguire il ping di un host, questo non significa che non ci si possa connettere. Molte organizzazioni hanno firewall o liste di controllo degli accessi ai router che bloccano tutto tranne il minimo necessario per il funzionamento dei loro sistemi. Questo include le ICMP echo request e echo reply. Poiché questi pacchetti possono includere dati arbitrari, un hacker intelligente potrebbe usarli per esfiltrare dati.
Tracciare le Rotte
I programmi traceroute
e traceroute6
possono essere usati per mostrare il percorso che un pacchetto fa per arrivare a destinazione. Lo fanno inviando più pacchetti a destinazione, incrementando il campo Time-To-Live (TTL) dell'IP header con ogni pacchetto successivo. Ogni router lungo il percorso risponderà con un messaggio ICMP TTL exceeded:
$ traceroute 192.168.1.20 traceroute to 192.168.1.20 (192.168.1.20), 30 hops max, 60 byte packets 1 10.0.2.2 (10.0.2.2) 0.396 ms 0.171 ms 0.132 ms 2 192.168.1.20 (192.168.1.20) 2.665 ms 2.573 ms 2.573 ms $ traceroute 192.168.50.2 traceroute to 192.168.50.2 (192.168.50.2), 30 hops max, 60 byte packets 1 192.168.50.2 (192.168.50.2) 0.433 ms 0.273 ms 0.171 ms $ traceroute6 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::11 (2001:db8::11) 0.716 ms 0.550 ms 0.641 ms $ traceroute 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::10 (2001:db8::11) 0.617 ms 0.461 ms 0.387 ms $ traceroute net2.example.net traceroute to net2.example.net (192.168.50.2), 30 hops max, 60 byte packets 1 net2.example.net (192.168.50.2) 0.533 ms 0.529 ms 0.504 ms $ traceroute6 net2.example.net traceroute to net2.example.net (2001:db8::11), 30 hops max, 80 byte packets 1 net2.example.net (2001:db8::11) 0.738 ms 0.607 ms 0.304 ms
Per impostazione predefinita traceroute
invia 3 pacchetti UDP con dati "spazzatura" alla porta 33434, incrementandola di un valore ad ogni invio successivo. Ogni linea nell’output del comando è un’interfaccia del router che il pacchetto attraversa. Il tempo mostrato in ogni riga dell’output è il tempo di andata e ritorno per ogni pacchetto. L’indirizzo IP è l’indirizzo dell’interfaccia del router in questione. Se traceroute
è in grado di farlo, usa il nome DNS dell’interfaccia del router. A volte vedrai *
al posto del tempo. Quando questo accade, significa che traceroute
non ha mai ricevuto il messaggio TTL exceeded per questo pacchetto. Questo comportamento indica spesso che l’ultima risposta è l’ultimo hop del percorso.
Se hai accesso a root
, l’opzione -I
imposterà traceroute
nell’usare le ICMP echo request invece dei pacchetti UDP. Questo metodo è spesso più efficace di UDP perché è più probabile che l’host di destinazione risponda a una ICMP echo request invece che a un pacchetto UDP:
# traceroute -I learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.764 ms 9.702 ms 9.693 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.389 ms 8.481 ms 8.480 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 8.763 ms 8.775 ms 8.770 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 27.080 ms 27.154 ms 27.151 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 31.339 ms 31.398 ms 31.395 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 39.092 ms 38.794 ms 38.821 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.208 ms 36.474 ms 36.544 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 53.973 ms 35.975 ms 38.250 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.315 ms 65.319 ms 65.345 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 67.427 ms 67.502 ms 67.498 ms 11 agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 61.270 ms 61.299 ms 61.291 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 61.101 ms 61.177 ms 61.168 ms 13 207.35.12.142 (207.35.12.142) 70.009 ms 70.069 ms 59.893 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 61.778 ms 61.950 ms 63.041 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.702 ms 62.759 ms 62.755 ms 16 208.94.166.201 (208.94.166.201) 62.936 ms 62.932 ms 62.921 ms
Alcune organizzazioni bloccano le ICMP echo request e echo reply. Per aggirare questo problema, si può usare il TCP. Usando una porta TCP conosciuta e aperta, puoi garantire che l’host di destinazione risponda. Per usare TCP, usa l’opzione -T
insieme a -p
per specificare la porta. Come per le ICMP echo request, devi avere accesso a root
per farlo:
# traceroute -m 60 -T -p 80 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 60 hops max, 60 byte packets 1 * * * 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 12.178 ms 12.229 ms 12.175 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 12.134 ms 12.093 ms 12.062 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 31.146 ms 31.192 ms 31.828 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 39.057 ms 46.706 ms 39.745 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 50.590 ms 58.852 ms 58.841 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.556 ms 37.892 ms 38.274 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 38.249 ms 36.991 ms 36.270 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.779 ms 63.218 ms tcore3-ashburnbk_100ge0-12-0-0.net.bell.ca (64.230.125.188) 60.441 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 63.932 ms 63.733 ms 68.847 ms 11 agg2-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.118) 60.144 ms 60.443 ms agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 60.851 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.246 ms dis4-clarkson16_7-0.net.bell.ca (64.230.131.102) 68.404 ms dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.403 ms 13 207.35.12.142 (207.35.12.142) 66.138 ms 60.608 ms 64.656 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 70.690 ms 62.190 ms 61.787 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.692 ms 69.470 ms 68.815 ms 16 208.94.166.201 (208.94.166.201) 61.433 ms 65.421 ms 65.247 ms 17 208.94.166.201 (208.94.166.201) 64.023 ms 62.181 ms 61.899 ms
Come ping
, anche traceroute
ha i suoi limiti. È possibile che firewall e router blocchino i pacchetti inviati o restituiti da traceroute
. Se hai accesso come "root", ci sono opzioni che possono aiutarti a ottenere risultati accurati.
Trovare le MTU con tracepath
Il comando tracepath
è simile a traceroute
. La differenza è che tiene traccia delle dimensioni della Maximum Transmission Unit (MTU) lungo il percorso. L’MTU è un’impostazione configurata su un’interfaccia di rete o una limitazione hardware dell’unità di dati di protocollo più grande che può trasmettere o ricevere. Il programma tracepath
funziona allo stesso modo di traceroute
nel senso che incrementa il TTL con ogni pacchetto. Si differenzia inviando un datagramma UDP molto grande. È quasi inevitabile che il datagramma sia più grande del dispositivo con il più piccolo MTU lungo il percorso. Quando il pacchetto raggiunge questo dispositivo, il dispositivo tipicamente risponde con un pacchetto di destinazione non raggiungibile. Il pacchetto ICMP destination unreachable ha un campo per l’MTU del link su cui invierebbe il pacchetto se fosse in grado di farlo. tracepath
invia quindi tutti i pacchetti successivi con questa dimensione:
$ tracepath 192.168.1.20 1?: [LOCALHOST] pmtu 1500 1: 10.0.2.2 0.321ms 1: 10.0.2.2 0.110ms 2: 192.168.1.20 2.714ms reached Resume: pmtu 1500 hops 2 back 64
A differenza di traceroute
, devi usare esplicitamente tracepath6
per IPv6:
$ tracepath 2001:db8::11 tracepath: 2001:db8::11: Address family for hostname not supported $ tracepath6 2001:db8::11 1?: [LOCALHOST] 0.027ms pmtu 1500 1: net2.example.net 0.917ms reached 1: net2.example.net 0.527ms reached Resume: pmtu 1500 hops 1 back 1
L’output è simile a quello di traceroute
. Il vantaggio di tracepath
è che nell’ultima riga mostra il più piccolo MTU sull’intero collegamento. Questo può essere utile per la risoluzione dei problemi delle connessioni che non possono gestire la frammentazione dei pacchetti.
Come per i precedenti strumenti di risoluzione dei problemi, c’è comunque la possibilità che qualche apparecchiatura blocchi i pacchetti.
Creare Connessioni Arbitrarie
Il programma nc
, conosciuto come netcat, può inviare o ricevere dati arbitrari su una connessione di rete TCP o UDP. I seguenti esempi dovrebbero rendere chiare le sue funzionalità.
Ecco un esempio per attivare una porta in ascolto sulla porta 1234
:
$ nc -l 1234 LPI Example
L’output di LPI Example
appare dopo l’esempio seguente, che creerà un mittente netcat per inviare pacchetti a net2.example.net
sulla porta 1234
. L’opzione -l
è usata per specificare che desideri che nc
riceva i dati invece di inviarli:
$ nc net2.example.net 1234 LPI Example
Premi Ctrl+C su entrambi i sistemi per interrompere la connessione.
Netcat funziona con indirizzi IPv4 e IPv6. Funziona sia con TCP che con UDP. Può anche essere usato per impostare una shell remota minimale.
Warning
|
Nota che non tutte le installazioni di |
$ hostname net2 $ nc -u -e /bin/bash -l 1234
L’opzione -u
è per UDP. L’opzione -e
ordina a netcat di inviare tutto ciò che riceve allo standard input dell’eseguibile che lo segue. In questo esempio, /bin/bash
.
$ hostname net1 $ nc -u net2.example.net 1234 hostname net2 pwd /home/emma
Nota come l’output del comando hostname
corrisponde a quello dell’host in ascolto e l’output del comando pwd
a una directory.
Visualizzazione delle Connessioni Attive e/o in Ascolto
I programmi netstat
e ss
possono essere usati per visualizzare lo stato delle connessioni attive e/o in ascolto. Come per ifconfig
, netstat
è uno strumento legacy. Sia netstat
sia ss
hanno output e opzioni simili. Qui alcune opzioni disponibili per entrambi i programmi:
-a
-
Mostra tutti i socket.
-l
-
Mostra solo i socket in ascolto.
-p
-
Mostra il processo associato alla connessione.
-n
-
Evita la risoluzione del nome sia per le porte sia per gli indirizzi host.
-t
-
Mostra le connessioni TCP.
-u
-
Mostra le connessioni UDP.
Gli esempi qui sotto mostrano l’output di un set di opzioni comunemente usato per entrambi i programmi:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 892/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1141/master tcp6 0 0 :::22 :::* LISTEN 892/sshd tcp6 0 0 ::1:25 :::* LISTEN 1141/master udp 0 0 0.0.0.0:68 0.0.0.0:* 692/dhclient # ss -tulnp # ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 :68 *: users:(("dhclient",pid=693,fd=6)) tcp LISTEN 0 128 :22 *: users:(("sshd",pid=892,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 : users:(("master",pid=1099,fd=13)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=892,fd=4)) tcp LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1099,fd=14))
La colonna Recv-Q
è il numero di pacchetti che un socket ha ricevuto ma non passato al suo programma. La colonna Send-Q
è il numero di pacchetti che un socket ha inviato e che non sono stati riconosciuti dal ricevitore. Il resto delle colonne sono auto esplicative.
Esercizi Guidati
-
Quale comando(i) useresti per inviare un ICMP echo request a
learning.lpi.org
? -
Come puoi determinare il percorso verso
8.8.8.8
? -
Quale comando ti mostrerebbe se un processo è in ascolto sulla porta TCP 80?
-
Come puoi trovare quale processo è in ascolto su una porta?
-
Come si può determinare la MTU massima di un percorso di rete?
Esercizi Esplorativi
-
Come potresti usare netcat per inviare una richiesta HTTP a un server web?
-
Quali possono essere i motivi per cui il ping verso un host può fallire?
-
Nomina uno strumento che potresti usare per vedere i pacchetti di rete che raggiungono o lasciano un host Linux.
-
Come si può forzare
traceroute
a usare un’interfaccia diversa? -
È possibile che
traceroute
riporti gli MTU?
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 con 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:
ping
eping6
-
Utilizzati per trasmettere pacchetti ICMP a un host remoto per testare la disponibilità di una connessione di rete.
traceroute
etraceroute6
-
Utilizzati per tracciare un percorso attraverso una rete per determinarne la connettività.
tracepath
etracepath6
-
Utilizzato per tracciare un percorso attraverso una rete e per determinare le dimensioni MTU lungo un percorso.
nc
-
Usato per impostare connessioni arbitrarie su una rete per testare la connettività, così come per interrogare una rete per servizi e dispositivi disponibili.
netstat
-
Comando legacy usato per determinare le connessioni di rete aperte di un sistema e le statistiche.
ss
-
Comando moderno usato per determinare le connessioni di rete aperte e le statistiche di un sistema.
Risposte agli Esercizi Guidati
-
Quale comando(i) useresti per inviare un ICMP echo request a
learning.lpi.org
?Useresti
ping
oping6
:$ ping learning.lpi.org
o
$ ping6 learning.lpi.org
-
Come puoi determinare il percorso verso
8.8.8.8
?Usando i comandi
tracepath
otraceroute
.$ tracepath 8.8.8.8
o
$ traceroute 8.8.8.8
-
Quale comando ti mostrerebbe se c’è un processo in ascolto sulla porta TCP 80?
Con
ss
:$ ss -ln | grep ":80"
Con
netstat
:$ netstat -ln | grep ":80"
Anche se non è elencato come requisito per l’esame, puoi anche usare
lsof
:# lsof -Pi:80
-
Come puoi trovare quale processo è in ascolto su una porta?
Di nuovo, ci sono diversi modi per farlo. Potresti usare
lsof
come nella risposta precedente, sostituendo il numero di porta. Potresti anche usarenetstat
oss
con l’opzione-p
. Ricorda chenetstat
è considerato uno strumento legacy.# netstat -lnp | grep ":22"
Le stesse opzioni che funzionano con
netstat
funzionano anche conss
:# ss -lnp | grep ":22"
-
Come si può determinare la MTU massima di un percorso di rete?
Utilizzando il comando
tracepath
:$ tracepath somehost.example.com
Risposte agli Esercizi Esplorativi
-
Come potresti usare netcat per inviare una richiesta HTTP a un server web?
Inserendo la linea di richiesta HTTP, qualsiasi intestazione e una linea vuota nel terminale:
$ nc learning.lpi.org 80 GET /index.html HTTP/1.1 HOST: learning.lpi.org HTTP/1.1 302 Found Location: https://learning.lpi.org:443/index.html Date: Wed, 27 May 2020 22:54:46 GMT Content-Length: 5 Content-Type: text/plain; charset=utf-8 Found
-
Quali possono essere i motivi per cui il ping verso un host può fallire?
Ci sono diverse ragioni possibili. Eccone alcune:
-
L’host remoto è fuori uso.
-
Una ACL su un router sta bloccando il ping.
-
Il firewall dell’host remoto sta bloccando il ping.
-
State usando un nome o un indirizzo host errato.
-
La risoluzione del nome sta restituendo un indirizzo errato.
-
La configurazione di rete della macchina non è corretta.
-
Il firewall della macchina lo sta bloccando.
-
La configurazione di rete dell’host remoto non è corretta.
-
Le interfacce della macchina sono scollegate.
-
Le interfacce della macchina remota sono scollegate.
-
Un componente di rete come uno switch, un cavo o un router tra la macchina locale e quella remota non funziona più.
-
-
Nomina uno strumento che potresti usare per vedere i pacchetti di rete che raggiungono o lasciano un host Linux.
Possono essere usati sia
tcpdump
siawireshark
. -
Come si può forzare
traceroute
a usare un’interfaccia diversa?Attraverso l’opzione
-i
:$ traceroute -i eth2 learning.lpi.org traceroute -i eth2 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets ...
-
È possibile che
traceroute
riporti gli MTU?Si, attraverso l’opzione
--mtu
:# traceroute -I --mtu learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 65000 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.974 ms F=1500 10.476 ms 4.743 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.697 ms 9.963 ms 10.321 ms ...