Hur man använder traceroute-kommandot på Linux

By rik

Med Linux-kommandot traceroute kan du spåra var ett nätverkspaket saktar ner och felsöka tröga nätverksanslutningar. Här förklarar vi hur det fungerar!

Så här fungerar traceroute

När du förstår grunderna för hur traceroute arbetar, blir resultaten lättare att tolka. Ju mer komplicerad en nätverkspakets väg till sin destination är, desto svårare är det att identifiera var potentiella flaskhalsar kan uppstå.

Ett mindre lokalt nätverk (LAN) kan vara relativt okomplicerat, med kanske en eller två servrar och en eller två routrar. Komplexiteten ökar i ett vidsträckt nätverk (WAN) som kopplar samman olika platser eller kommunicerar via internet. I dessa fall passerar ditt nätverkspaket genom många olika hårdvaruenheter, som routrar och gateways.

Metadata i ett datapakets rubrik beskriver dess storlek, källa, destination och vilket protokoll det använder. Protokollspecifikationen definierar själva rubriken. Om du känner till protokollet kan du avgöra var varje fält i rubriken börjar och slutar, och på så sätt läsa metadata.

traceroute använder TCP/IP-protokollstacken och skickar UDP-paket (User Datagram Protocol). Rubriken innehåller ett fält som kallas TTL (Time To Live), vilket är ett 8-bitars heltal. Trots namnet är detta en räknare, inte en tidsperiod.

Ett paket färdas från sin källa till sin destination genom routrar. Varje gång paketet anländer till en router minskar TTL-räknaren. Om TTL-värdet når ett, minskar routern värdet till noll och paketet kasseras. Det skickas inte vidare eftersom dess ”livslängd” har gått ut.

Routern skickar ett ICMP (Internet Control Message Protocol) ”Tidsgräns överskriden”-meddelande tillbaka till paketets källa. Meddelandet innehåller det ursprungliga huvudets metadata och de första 64 bitarna av originalpaketets data, som beskrivs i RFC 792.

Om traceroute skickar ett paket med TTL inställt på ett, når det bara den första routern. Routern kommer att svara med ett ICMP ”Tidsgräns överskriden”-meddelande, och traceroute kan registrera tiden det tog fram och tillbaka.

Därefter upprepas processen med TTL inställt på två, vilket kommer att misslyckas efter två hopp. traceroute ökar TTL till tre och försöker igen. Denna process upprepas tills målet nås eller det maximala antalet hopp (standard är 30) är testat.

Vissa routrar beter sig inte som förväntat

Vissa routrar har buggar och försöker vidarebefordra paket med TTL noll i stället för att kassera dem och skicka ett ICMP ”Tidsgräns överskriden”-meddelande.

Enligt Cisco begränsar vissa internetleverantörer (ISP) antalet ICMP-meddelanden som deras routrar vidarebefordrar.

Vissa enheter är konfigurerade att aldrig skicka ICMP-paket för att undvika att omedvetet delta i en distribuerad denial of service, som en smurfattack.

traceroute har en standardtimeout på fem sekunder för svar. Om inget svar tas emot inom fem sekunder avbryts testet. Svar från mycket långsamma routrar ignoreras därför.

Installera traceroute

traceroute var förinstallerat på Fedora 31, men behövde installeras på Manjaro 18.1 och Ubuntu 18.04. Använd följande kommando för att installera traceroute på Manjaro:

sudo pacman -Sy traceroute

För att installera traceroute på Ubuntu, använd detta kommando:

sudo apt-get install traceroute

Använda traceroute

Som nämnts är traceroutes syfte att få svar från routern vid varje hopp från din dator till målet. Vissa kanske inte avslöjar något, medan andra ger ifrån sig information.

Som exempel ska vi köra en traceroute till Blarney Castle i Irland, känt för den berömda Blarney-stenen. Enligt legenden blir den som kysser Blarney-stenen välsignad med ”gåvan att prata”. Vi får hoppas att routrarna vi möter på vägen är lika meddelsamma.

Vi skriver följande kommando:

traceroute www.blarneycastle.ie

Den första raden ger oss följande information:

Målet och dess IP-adress.
Antal hopp traceroute kommer att försöka innan den ger upp.
Storleken på UDP-paketen som skickas.

De övriga raderna ger information om varje hopp. Vi kan se att det finns 11 hopp mellan vår dator och Blarney Castles webbplats, och hopp 11 är målet.

Formatet för varje hopplinje är som följer:

Enhetens namn eller IP-adress om enheten inte identifierar sig.
IP-adressen.
Tiden det tog fram och tillbaka för varje av de tre testerna. En asterisk betyder inget svar för det testet. Om enheten inte svarar alls visas tre asterisker och inget enhetsnamn eller IP-adress.

Låt oss granska resultaten:

Hopp 1: Den första routern är en DrayTek Vigor Router i det lokala nätverket, vilket betyder att våra UDP-paket lämnar det lokala nätverket och går ut på internet.
Hopp 2: Denna enhet svarade inte. Kanske var den konfigurerad att aldrig skicka ICMP-paket, eller så var den för långsam.
Hopp 3: En enhet svarade, men inte med sitt namn, bara IP-adressen. Vi fick inte svar på alla tre förfrågningar. Detta kan indikera paketförlust.
Hopp 4 och 5: Fler anonyma hopp.
Hopp 6: Här finns mer text eftersom en annan fjärrenhet hanterade var och en av våra tre UDP-förfrågningar. De (långa) namnen och IP-adresserna för varje enhet skrevs ut. Detta kan hända när man stöter på ett ”tätt befolkat” nätverk med mycket hårdvara för att hantera stora trafikvolymer. Detta hopp befinner sig inom en av de största internetleverantörerna i Storbritannien. Det är därför inte konstigt att samma fjärrmaskinvara hanterade våra tre anslutningsförfrågningar.
Hopp 7: Här lämnade våra UDP-paket internetleverantörens nätverk.
Hopp 8: Vi får en IP-adress men inte enhetens namn. Alla tre tester lyckades.
Hopp 9 och 10: Ytterligare två anonyma hopp.
Hopp 11: Vi har nått Blarney Castles webbplats. Slottet ligger i Cork, Irland, men enligt IP-adressgeolokalisering ligger webbplatsen i London.

Vissa enheter var samarbetsvilliga, andra svarade utan att ge sitt namn och andra var helt anonyma.

Men vi nådde destinationen, vi vet att det är 11 hopp bort och resan tog mellan 13,773 och 14,715 millisekunder.

Dölja enhetsnamn

Som vi sett kan enhetsnamnen göra skärmen rörig. För att göra det lättare att se data kan du använda alternativet -n (ingen mappning).

Med vårt exempel skriver vi följande:

traceroute -n blarneycastle.ie

Detta gör det enklare att se stora tider för tur och retur som kan indikera en flaskhals.

Hopp 3 börjar se lite misstänkt ut. Förra gången svarade den bara två gånger, och denna gång bara en gång. I detta fall ligger problemet utanför vår kontroll.

Men om du undersökte ditt företagsnätverk kan det vara värt att undersöka den noden närmare.

Ställa in timeout-värde

Om vi ökar timeout-perioden (fem sekunder) kan vi få fler svar. Vi använder alternativet -w (väntetid) för att ändra den till sju sekunder. (Observera att detta är ett flyttal.)

Vi skriver följande kommando:

traceroute -w 7.0 blarneycastle.ie

Det gjorde ingen stor skillnad, så svaren tar troligen timeout. Det är troligt att de anonyma hoppen är medvetet hemliga.

Ställa in antalet tester

Som standard skickar traceroute tre UDP-paket till varje hopp. Vi kan justera detta upp eller ner med alternativet -q (antal frågor).

För att påskynda traceroute-testet minskar vi antalet UDP-sondpaket till ett:

traceroute -q 1 blarneycastle.ie

Detta skickar en enda sond till varje hopp.

Ställa in initialt TTL-värde

Vi kan ställa in det initiala TTL-värdet till något annat än ett och hoppa över några hopp. Vanligtvis sätts TTL-värdena till ett för de första testerna, två för nästa och så vidare. Om vi ​​ställer in det på fem kommer det första testet att försöka nå hopp fem och hoppa över hopp ett till fyra.

Eftersom vi vet att Blarney Castles webbplats är 11 hopp bort, skriver vi följande för att gå direkt till hopp 11:

traceroute -f 11 blarneycastle.ie

Det ger oss en sammanfattande rapport om anslutningen till destinationen.

Använd med försiktighet

traceroute är ett utmärkt verktyg för att undersöka nätverksvägar, kontrollera anslutningshastigheter och identifiera flaskhalsar. Windows har också kommandot tracert som fungerar på liknande sätt.

Undvik dock att bombardera okända enheter med UDP-paket och var försiktig med att inkludera traceroute i skript eller automatiserade jobb.

Belastningen som traceroute kan orsaka i ett nätverk kan påverka prestandan negativt. Såvida det inte handlar om ett brådskande ärende kan det vara lämpligt att använda verktyget utanför normal arbetstid.