Come utilizzare il comando traceroute su Linux

È possibile utilizzare il traceroutecomando Linux per individuare la parte lenta del viaggio di un pacchetto di rete e risolvere i problemi di connessioni di rete lente. Ti mostreremo come fare!

Come funziona traceroute

Quando apprezzi il traceroutefunzionamento, la comprensione dei risultati è molto più semplice. Più complicato è il percorso che un pacchetto di rete deve seguire per raggiungere la sua destinazione, più difficile è individuare dove potrebbero verificarsi rallentamenti.

La rete locale (LAN) di una piccola organizzazione potrebbe essere relativamente semplice. Probabilmente avrà almeno un server e un router o due. La complessità aumenta su una rete WAN (Wide Area Network) che comunica tra luoghi diversi o tramite Internet. Il tuo pacchetto di rete quindi incontra (e viene inoltrato e instradato da) molto hardware, come router e gateway.

Le intestazioni dei metadati sui pacchetti di dati descrivono la sua lunghezza, da dove proviene, dove sta andando, il protocollo che sta usando e così via. La specifica del protocollo definisce l'intestazione. Se riesci a identificare il protocollo, puoi determinare l'inizio e la fine di ogni campo nell'intestazione e leggere i metadati.

tracerouteutilizza la suite di protocolli TCP / IP e invia i pacchetti del protocollo datagramma utente. L'intestazione contiene il campo Time to Live (TTL), che contiene un valore intero a otto bit. Nonostante ciò che suggerisce il nome, rappresenta un conteggio, non una durata.

Un pacchetto viaggia dalla sua origine alla sua destinazione tramite un router. Ogni volta che il pacchetto arriva a un router, diminuisce il contatore TTL. Se il valore TTL raggiunge uno, il router che riceve il pacchetto decrementa il valore e nota che ora è zero. Il pacchetto viene quindi scartato e non inoltrato al salto successivo del suo viaggio perché è "scaduto".

Il router invia un messaggio di tempo scaduto ICMP (Internet Message Control Protocol) all'origine del pacchetto per comunicargli che il pacchetto è scaduto. Il messaggio Time Exceeded contiene l'intestazione originale ei primi 64 bit dei dati del pacchetto originale. Questo è definito a pagina sei di Request for Comments 792.

Quindi, se tracerouteinvia un pacchetto, ma poi imposta il valore TTL su uno, il pacchetto arriverà solo fino al primo router prima di essere scartato. Riceverà un messaggio di tempo ICMP superato dal router e potrà registrare il tempo impiegato per il viaggio di andata e ritorno.

Quindi ripete l'esercizio con TTL impostato su 2, che fallirà dopo due salti. tracerouteaumenta il TTL a tre e riprova. Questo processo si ripete finché non viene raggiunta la destinazione o viene testato il numero massimo di hop (30, per impostazione predefinita).

Alcuni router non funzionano bene

Alcuni router hanno bug. Tentano di inoltrare pacchetti con un TTL pari a zero invece di scartarli e generare un messaggio ICMP di tempo superato.

Secondo Cisco, alcuni provider di servizi Internet (ISP) limitano il numero di messaggi ICMP inoltrati dai loro router.

Alcuni dispositivi sono configurati per non inviare mai pacchetti ICMP. Questo spesso serve a garantire che il dispositivo non possa essere costretto involontariamente a partecipare a una negazione del servizio distribuita, come un attacco puffo.

tracerouteha un timeout predefinito per le risposte di cinque secondi. Se non riceve una risposta entro quei cinque secondi, il tentativo viene abbandonato. Ciò significa che le risposte dai router molto lenti vengono ignorate.

Installazione di traceroute

tracerouteera già installato su Fedora 31 ma deve essere installato su Manjaro 18.1 e Ubuntu 18.04. Per installare traceroutesu Manjaro usa il seguente comando:

sudo pacman -Sy traceroute

Per installare traceroutesu Ubuntu, usa il seguente comando:

sudo apt-get install traceroute

Utilizzando traceroute

Come spiegato sopra, lo traceroute'sscopo è quello di suscitare una risposta dal router ad ogni salto dal tuo computer alla destinazione. Alcuni potrebbero avere le labbra serrate e non rivelare nulla, mentre altri probabilmente spanderanno i fagioli senza scrupoli.

Ad esempio, eseguiremo una traceroutevisita al sito web del Castello di Blarney in Irlanda, sede della famosa Pietra di Blarney. La leggenda narra che se baci la Pietra di Blarney sarai benedetto con il "dono della parlantina". Speriamo che i router che incontriamo lungo il percorso siano adeguatamente garrulous.

Digitiamo il seguente comando:

traceroute www.blarneycastle.ie

La prima riga ci fornisce le seguenti informazioni:

  • La destinazione e il suo indirizzo IP.
  • Il numero di salti traceroute proverà prima di arrendersi.
  • La dimensione dei pacchetti UDP che stiamo inviando.

Tutte le altre righe contengono informazioni su uno degli hop. Prima di entrare nei dettagli, però, possiamo vedere che ci sono 11 salti tra il nostro computer e il sito web del Castello di Blarney. Hop 11 ci dice anche che abbiamo raggiunto la nostra destinazione.

Il formato di ogni linea di hop è il seguente:

  • Il nome del dispositivo o, se il dispositivo non si identifica, l'indirizzo IP.
  • L'indirizzo IP.
  • Il tempo impiegato per il viaggio di andata e ritorno per ciascuno dei tre test. Se un asterisco è qui, significa che non c'era una risposta per quel test. Se il dispositivo non risponde affatto, vedrai tre asterischi e nessun nome del dispositivo o indirizzo IP.

Rivediamo cosa abbiamo di seguito:

  • Hop 1: Il primo punto di riferimento (nessun gioco di parole) è il DrayTek Vigor Router sulla rete locale. È così che i nostri pacchetti UDP lasciano la rete locale e arrivano su Internet.
  • Hop 2: questo dispositivo non ha risposto. Forse è stato configurato per non inviare mai pacchetti ICMP. O forse ha risposto ma era troppo lento, quindi  traceroutescaduto.
  • Hop 3: Un dispositivo ha risposto, ma non abbiamo ottenuto il suo nome, solo l'indirizzo IP. Nota che c'è un asterisco in questa riga, il che significa che non abbiamo ricevuto risposta a tutte e tre le richieste. Ciò potrebbe indicare la perdita di pacchetti.
  • Luppolo 4 e 5: salti più anonimi.
  • Hop 6: c'è molto testo qui perché un diverso dispositivo remoto ha gestito ciascuna delle nostre tre richieste UDP. Sono stati stampati i nomi (piuttosto lunghi) e gli indirizzi IP di ogni dispositivo. Ciò può accadere quando si incontra una rete "riccamente popolata" su cui è presente molto hardware per gestire elevati volumi di traffico. Questo salto è all'interno di uno dei più grandi ISP del Regno Unito Quindi, sarebbe un piccolo miracolo se lo stesso pezzo di hardware remoto gestisse le nostre tre richieste di connessione.
  • Hop 7: Questo è il salto che i nostri pacchetti UDP hanno fatto quando hanno lasciato la rete degli ISP.
  • Hop 8: Ancora una volta, otteniamo un indirizzo IP ma non il nome del dispositivo. Tutti e tre i test sono stati restituiti correttamente.
  • Hops 9 e 10: altri due hop anonimi.
  • Hop 11: Siamo arrivati ​​al sito web del Castello di Blarney. Il castello si trova a Cork, in Irlanda, ma, in base alla geolocalizzazione dell'indirizzo IP, il sito web è a Londra.

Quindi, è stato un miscuglio. Alcuni dispositivi hanno giocato a palla, alcuni hanno risposto ma non ci hanno detto i loro nomi e altri sono rimasti completamente anonimi.

Tuttavia, siamo arrivati ​​a destinazione, sappiamo che è a 11 salti di distanza e il tempo di andata e ritorno per il viaggio è stato di 13,773 e 14,715 millisecondi.

Nascondere i nomi dei dispositivi

Come abbiamo visto, a volte includere i nomi dei dispositivi porta a un display disordinato. Per semplificare la visualizzazione dei dati, è possibile utilizzare l' -nopzione (nessuna mappatura).

Per fare ciò con il nostro esempio, digitiamo quanto segue:

traceroute -n blarneycastle.ie

Ciò semplifica la selezione di numeri elevati per i tempi di andata e ritorno che potrebbero indicare un collo di bottiglia.

Hop 3 inizia a sembrare un po 'sospetto. L'ultima volta ha risposto solo due volte e questa volta solo una volta. In questo scenario, è fuori dal nostro controllo, ovviamente.

Tuttavia, se stavi indagando sulla tua rete aziendale, varrebbe la pena scavare un po 'più a fondo in quel nodo.

Impostazione del valore di timeout di traceroute

Forse se estendiamo il periodo di timeout predefinito (cinque secondi), otterremo più risposte. Per fare ciò, useremo l' -wopzione (tempo di attesa) per cambiarlo a sette secondi. (Nota che questo è un numero in virgola mobile.)

Digitiamo il seguente comando:

traceroute -w 7.0 blarneycastle.ie

Ciò non ha fatto molta differenza, quindi le risposte probabilmente stanno scadendo. È probabile che i luppoli anonimi siano intenzionalmente riservati.

Impostazione del numero di test

Per impostazione predefinita, tracerouteinvia tre pacchetti UDP a ogni hop. Possiamo usare l' -qopzione (numero di query) per aumentare o diminuire questo valore.

Per velocizzare il traceroutetest, digitiamo quanto segue per ridurre il numero di pacchetti sonda UDP che inviamo a uno:

traceroute -q 1 blarneycastle.ie

Questo invia un singolo probe a ogni hop.

Impostazione del valore TTL iniziale

Possiamo impostare il valore iniziale di TTL su qualcosa di diverso da uno e saltare alcuni salti. Di solito, i valori TTL sono impostati su uno per la prima serie di test, due per la serie successiva di test e così via. Se lo impostiamo su cinque, il primo test tenterà di arrivare a saltare cinque e saltare i salti da uno a quattro.

Poiché sappiamo che il sito Web del castello di Blarney è a 11 hop da questo computer, digitiamo quanto segue per andare direttamente a Hop 11:

traceroute -f 11 blarneycastle.ie

Questo ci fornisce un bel rapporto sintetico sullo stato del collegamento con la destinazione.

Sii premuroso

tracerouteè un ottimo strumento per esaminare il routing di rete, controllare le velocità di connessione o identificare i colli di bottiglia. Windows ha anche un tracertcomando che funziona in modo simile.

Tuttavia, non vuoi bombardare dispositivi sconosciuti con torrent di pacchetti UDP e fai attenzione a non includerli traceroutein script o lavori non assistiti.

Il carico che traceroutepuò essere posto su una rete potrebbe influire negativamente sulle sue prestazioni. A meno che non ti trovi in ​​una situazione di tipo fix-it-now, potresti volerlo utilizzare al di fuori del normale orario lavorativo.