Polecenie tracepath: sprawdzanie przeskoków i MTU ścieżki zamiast traceroute

Środowisko testoweRodzina RHELAlmaLinux 9.8iputils 20210202konto rootDebian 12 · traceroute 2.1.2 zwykłe konto
Polecenia sieciowetracepathLokalizacja/usr/bin/tracepath

Na serwerze Linux polecenie tracepath pozwala bez uprawnień root sprawdzić trasę (przeskoki), którą pakiety pokonują do celu, oraz MTU ścieżki. Na serwerze AlmaLinux 9 bez zainstalowanego traceroute ograniczyliśmy liczbę przeskoków do 10 i sprawdziliśmy trasę do example.com: do czwartego przeskoku widać było czasy odpowiedzi i MTU ścieżki 1500, a sześć kolejnych przeskoków nie odpowiedziało.

Poniższe wyniki pochodzą z serwera AlmaLinux 9.8 (konto root), a wersję traceroute i stan pakietu sprawdzono na serwerze Debian 12 (zwykłe konto). Adresy IPv6 pierwszego przeskoku i routerów pośrednich zastąpiono przykładowymi adresami do dokumentacji, a czasy odpowiedzi i wartości pmtu pozostawiono bez zmian.

1️⃣ Jak używać polecenia tracepath

  • ↪️ Sprawdzanie przeskoków i MTU ścieżki do celu

tracepath przyjmuje jedną nazwę lub adres IP celu, wysyła pakiety UDP i wypisuje przeskoki, które odpowiedziały, po jednym wierszu w kolejności TTL. Domyślna maksymalna liczba przeskoków to 30 i można ją zmienić opcją -m.

Dla example.com dodaliśmy -m 10, aby sprawdzić trasę tylko do dziesiątego przeskoku.

tracepath -n -m 10 example.com
 1?: [LOCALHOST]                        0.006ms pmtu 9001
 1:  fe80::1%eth0                                          0.077ms pmtu 1500
 1:  2001:db8:a::5b                                        2.627ms asymm  8 
 2:  2001:db8:a::52                                        1.473ms asymm 12 
 3:  2001:db8:b::1e                                       19.653ms asymm  9 
 4:  2001:db8:c::                                          3.642ms asymm 11 
 5:  no reply
 6:  no reply
 7:  no reply
 8:  no reply
 9:  no reply
10:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500 

Ten serwer wysłał pakiety na adres IPv6 example.com i do czwartego przeskoku pojawiały się czasy odpowiedzi. Od piątego przeskoku powtarzało się no reply, więc nie pojawił się wiersz reached oznaczający dotarcie do celu w dziesięciu przeskokach, a całość trwała około 18 sekund.

Uruchomione dla tego samego celu bez -m polecenie nie zakończyło się w ciągu 30 sekund. Na trasach z wieloma nieodpowiadającymi przeskokami zmniejsza się opcją -m liczbę sprawdzanych przeskoków.

Wersję zainstalowanego tracepath sprawdza się opcją -V; na tym serwerze tracepath to iputils 20210202.

tracepath -V
tracepath from iputils 20210202

2️⃣ Jak czytać wyniki tracepath

  • ↪️ Numer przeskoku, pmtu, asymm, reached

Każdy wiersz wyniku pokazuje kolejno numer przeskoku, adres, który odpowiedział, i czas w obie strony. Tam, gdzie zmienia się MTU ścieżki, pojawia się pmtu, a gdy trasa tam i z powrotem ma różną liczbę przeskoków, pojawia się asymm. Oto co sprawdzać w każdym wierszu.

WynikZnaczenie
1?:Pole numeru przeskoku — ? pojawia się przy numerze szacowanym, gdy z odpowiedzi nie udało się uzyskać TTL
[LOCALHOST]Wiersz samego serwera, zanim pakiet wyjdzie do sieci
0.077msCzas w obie strony do tego przeskoku
pmtu 1500MTU ścieżki (bajty) zmienione w tym miejscu — pojawia się tylko przy zmianie
asymm 8Różnica liczby przeskoków między trasą tam i z powrotem — oficjalny podręcznik podaje, że to wartość niewiarygodna
no replyPrzeskok, który nie odpowiedział na pakiet wysłany z tym TTL
reachedWiersz, w którym osiągnięto cel
Too many hopsZatrzymuje się po sprawdzeniu liczby przeskoków ustawionej opcją -m
Resume: pmtu … hops … back …MTU całej ścieżki, liczba przeskoków do celu i szacowana liczba przeskoków powrotnych

W wynikach dla example.com pmtu w pierwszym wierszu [LOCALHOST] wynosiło 9001 i zmieniło się na 1500 na pierwszym przeskoku. Wiersz TTL 1 pojawiający się dwa razy z innym tylko adresem to również układ z przykładu w oficjalnym podręczniku. Podręcznik wyjaśnia, że jeśli pierwszy pakiet zostanie odrzucony na pierwszym przeskoku z powodu MTU ścieżki, ten sam wiersz TTL pojawi się jeszcze raz.

Po dotarciu do celu na końcu wiersza pojawia się reached, a ostatni wiersz Resume pokazuje liczbę przeskoków do celu. Przy wysyłaniu na 127.0.0.1 reached pojawiło się po jednym przeskoku, a wiersz Resume miał postać [pmtu 65535 hops 1 back 1].

tracepath -n 127.0.0.1
 1:  127.0.0.1                                             0.047ms reached
     Resume: pmtu 65535 hops 1 back 1 

Trasa, która kończy się komunikatem Too many hops bez reached, nie otrzymała odpowiedzi od celu w ramach przeskoków ustawionych opcją -m. Trasa do example.com również nie miała reached do dziesięciu przeskoków, więc w wierszu Resume zostało tylko pmtu, bez liczby przeskoków.

3️⃣ Opcje tracepath

  • ↪️ -n, -b, -m i długość pakietu -l

tracepath ma tylko osiem opcji: -4, -6, -n, -b, -l, -m, -p i -V, a uruchomiony bez celu wypisuje tę listę jako sposób użycia. Bez opcji zamienia adresy, które odpowiedziały, na nazwy; przy wysyłaniu na localhost w polu przeskoku pojawiło się localhost.

tracepath localhost
 1?: [LOCALHOST]                        0.003ms pmtu 65536
 1:  localhost                                             0.048ms reached
 1:  localhost                                             0.030ms reached
     Resume: pmtu 65536 hops 1 back 1 

[tracepath -n] wypisuje tylko adresy IP, bez zamiany na nazwy. Po dodaniu -n dla tego samego localhost pole przeskoku zmieniło się na adres IPv6 ::1, a trasa do example.com uruchomiona z -n również pokazała w tym polu tylko adresy.

tracepath -n localhost
 1?: [LOCALHOST]                        0.005ms pmtu 65536
 1:  ::1                                                   0.039ms reached
 1:  ::1                                                   0.010ms reached
     Resume: pmtu 65536 hops 1 back 1 

-b wypisuje nazwę i adres razem. Po dodaniu -b dla 127.0.0.1 adres pojawił się w nawiasie za nazwą: [localhost (127.0.0.1)].

tracepath -b 127.0.0.1
 1:  localhost (127.0.0.1)                                 0.050ms reached
     Resume: pmtu 65535 hops 1 back 1 

-m to opcja ustawiająca maksymalną liczbę sprawdzanych przeskoków; przyjmowała wartości od 0 do 255. Po dodaniu -m 0 od razu pojawiły się tylko wiersze Too many hops i Resume, bez wierszy przeskoków, a wartość 256 została odrzucona komunikatem [out of range].

tracepath -m 0 127.0.0.1
     Too many hops: pmtu 65535
     Resume: pmtu 65535 

-l to długość pierwszego wysyłanego pakietu; domyślnie 65535 bajtów dla IPv4 i 128000 bajtów dla IPv6. Po dodaniu -l 1500 dla 127.0.0.1 pmtu w wierszu Resume zmieniło się z 65535 na 1500.

tracepath -l 1500 -n 127.0.0.1
 1:  127.0.0.1                                             0.028ms reached
     Resume: pmtu 1500 hops 1 back 1 

-p to opcja ustawiająca pierwszy docelowy port UDP. Wynik z -p 33434 dla 127.0.0.1 był taki sam jak bez tej opcji.

OpcjaKopiujOpis
-nWypisuje tylko adresy IP, bez zamiany na nazwy
-bWypisuje nazwę i adres razem
-mprzeskokiUstawia maksymalną liczbę sprawdzanych przeskoków, domyślnie 30
-ldługośćUstawia długość pierwszego pakietu, domyślnie IPv4 65535, IPv6 128000
-VWypisuje wersję i kończy działanie
OpcjaKopiujOpis
-4Wysyła tylko na adresy IPv4
-6Wysyła tylko na adresy IPv6
-pPortUstawia pierwszy docelowy port UDP

4️⃣ Różnice między tracepath a traceroute

  • ↪️ Instalacja, uprawnienia, wysyłane pakiety

Na serwerach, na których nie da się zainstalować traceroute, trasę sprawdza się poleceniem tracepath zamiast traceroute. Na sprawdzanym serwerze AlmaLinux 9.8 nie było pakietu traceroute, natomiast tracepath jest częścią pakietu iputils, więc działało bez osobnej instalacji.

rpm -q traceroute
package traceroute is not installed

Na serwerze Debian 12 było odwrotnie: traceroute 2.1.2 był zainstalowany, a pakiet iputils-tracepath zawierający tracepath nie był.

traceroute --version
Modern traceroute for Linux, version 2.1.2
Copyright (c) 2016  Dmitry Butskoy,   License: GPL v2 or any later
apt-cache policy iputils-tracepath
iputils-tracepath:
  Installed: (none)
  Candidate: 3:20221126-1+deb12u1

Jak pokazują te dwa serwery, dostępne polecenia zależą od dystrybucji, dlatego najpierw sprawdź, które z nich jest na serwerze, z którym masz połączenie. tracepath nie wymaga uprawnień root i działa na każdym koncie, które może wysyłać pakiety UDP. Plik wykonywalny tracepath na serwerze AlmaLinux 9.8 również miał uprawnienia rwxr-xr-x, bez dodatkowych uprawnień (capability).

Pozycjatracepathtraceroute
Serwer AlmaLinux 9.8W pakiecie iputils, działa od razuNiezainstalowany
Serwer Debian 12Pakiet iputils-tracepath niezainstalowanytraceroute 2.1.2 zainstalowany
Wysyłane pakietyUDPDomyślnie UDP, -I dla ICMP, -T dla TCP
Wynik na przeskokJeden wierszDomyślnie trzy wysyłki, trzy czasy (zmiana opcją -q)
Liczba opcjiOsiem: -4 -6 -n -b -l -m -p -VPonad 20 na samym pierwszym ekranie --help

Jeśli trzeba sprawdzić trasę przez ICMP lub TCP albo wysyłać kilka razy na przeskok, aby porównać czasy, trzeba zainstalować i używać polecenia traceroute. Na serwerach, gdzie instalacja jest trudna lub gdzie trzeba zobaczyć także MTU ścieżki, lepiej sprawdzi się tracepath.

🔲 Symulator polecenia tracepath

W symulatorze poniżej można ponownie obejrzeć trasę do example.com, zmieniając tylko liczbę przeskoków, albo samodzielnie wpisać -n, -b, -m i -l dla localhost i 127.0.0.1, aby porównać różnice.

Symulator polecenia tracepathiputils 20210202
[root@server work]#
Działa tylko w twojej przeglądarce i nie wysyła prawdziwych pakietów. Klawiszami ↑↓ przywołasz wcześniejsze polecenia.

🔢 FAQ & polecane treści

Nie, kod wyjścia tego nie pokazuje. Nawet gdy uruchomienie dla example.com z -m 10 zakończyło się komunikatem Too many hops bez reached, kod wyjścia wynosił 0. Błąd rozwiązywania nazwy i nieprawidłowy argument dały 1, a uruchomienie bez celu dało 255. Kod wyjścia rozróżnia tylko błędy wykonania, więc to, czy osiągnięto cel, sprawdza się w wierszu reached w wynikach.

localhost został wysłany na adres IPv6 ::1, więc pierwszy wiersz [LOCALHOST] pokazał MTU interfejsu pętli zwrotnej, 65536, a dla 127.0.0.1, czyli IPv4, pojawiła się bez zmian domyślna długość pakietu IPv4, 65535. MTU interfejsu lo sprawdzone poleceniem ip link również wynosiło 65536.

Z opcją -4 pakiety są wysyłane tylko na adresy IPv4. Po dodaniu -4 dla localhost reached pojawiło się po jednym przeskoku przez IPv4, bez wiersza [LOCALHOST]; odwrotnie, -6 dla 127.0.0.1 zakończyło się komunikatem [Address family for hostname not supported].

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 2   +   5   =