Analiza sieci w Linuksie z traceroute

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Linuksowa aplikacja traceroute oferuje liczne sposoby na poznanie trasy pakietów do wybranego hosta przez sieć, internet. Ten artykuł dostarcza informacji o sposobie funkcjonowania traceroute. Poza tym pokazuje interesujące parametry opcji tej aplikacji. W uzupełnieniu do traceroute jest również interesujący mtr, który łączy funkcjonalność aplikacji traceroute i ping.

Sposób funkcjonowania

Traceroute śledzi trasę pakietów do określonego hosta. Traceroute zmienia time-to-live (TTL) protokołu IP, za pośrednictwem TTL traceroute próbuje otrzymać odpowiedz ICMP TIME_EXCEEDED od poszczególnych ruterów. Jedynym koniecznym parametrem aplikacji traceroute jest host, do którego ma zostać zapisana trasa.

Traceroute wykrywa poszczególne rutery (hop) na trasie pomiędzy komputerem nadawcy a wybranym hostem w następujący sposób:

  1. Najpierw wysyłany jest jeden pakiet IP z TTL=1. W ten sposób już pierwszy router (default gateway) traci pakiet i odsyła odpowiedz ICMP TIME_EXCEEDED.
  2. Następnie traceroute wysyła kolejne pakiety i zwiększa przy tym sukcesywnie TTL o 1. Drugi pakiet (TTL=2) zostaje dostarczony do drugiego rutera na drodze do hosta, za default gateway. Default gateway podczas przekazywania dalej pakietu zmniejsza TTL o 1, pakiet w momencie dotarcia do rutera 2 ma TTL o wartości 1. Ruter traci pakiet i odsyła odpowiedz ICMP TIME_EXCEEDED do nadającego komputera. Analogicznie przeprowadzane jest z TTL=3 i trzecim ruterem, TTL=4 i czwartym ruterem itd.
  3. Dotrze pakiet z wystarczająco wysokim TTL do hosta to odpowiada on powiadomieniem ICMP "port unreachable".

Typy pakietów testowych

Do przesyłki pakietów testowych mogą zostać wykorzystane rożne protokoły. Dzięki temu pakiety mogą zostać również przesłane przy restrykcyjnych konfiguracjach firewalla. Poza tym w ten sposób można prześledzić trasę, która zostaje wykorzystana przez określony protokół (w przypadku, gdy w zależności od protokołu pakiet jest w inny sposób kierowany).

UDP (default)

W standardowej konfiguracji są wykorzystane datagramy UDP jako testowe pakiety IP. Wykorzystywany jest przy tym "mało prawdopodobny" port. Począwszy od portu 33434 i następnie zwiększany o 1 przy każdym kolejnym pakiecie testowym.

Ta metoda może zostać wykorzystana przez dowolnego użytkownika i nie wymaga uprawnień użytkownika root.

Przykład (adresy IP / nazwy pierwszych trzech ruterów nie zostały podane w celu zachowania ich anonimowości):

[root@tpw ~]# traceroute www.google.com
traceroute to www.google.com (209.85.129.147), 30 hops max, 60 byte packets
 1  XXX (XXX)  1.929 ms  1.982 ms  2.141 ms
 2  XXX (XXX)  3.795 ms  3.769 ms  3.751 ms
 3  XXX (XXX)  5.673 ms  5.650 ms  5.634 ms
 4  iix12-aux11.highway.telekom.at (195.3.70.206)  21.027 ms 195.3.118.50 (195.3.118.50)  21.025 ms  21.328 ms
 5  72.14.198.241 (72.14.198.241)  21.436 ms  21.406 ms  21.401 ms
 6  209.85.255.176 (209.85.255.176)  21.497 ms 209.85.255.178 (209.85.255.178)  23.380 ms  23.300 ms
 7  72.14.232.165 (72.14.232.165)  23.301 ms  21.613 ms 72.14.232.201 (72.14.232.201)  21.661 ms
 8  72.14.239.170 (72.14.239.170)  21.678 ms 72.14.233.210 (72.14.233.210)  34.381 ms  34.365 ms
 9  fk-in-f147.1e100.net (209.85.129.147)  19.659 ms  19.280 ms  19.291 ms
[root@tpw ~]# 

ICMP (-I)

Ta metoda wykorzystuje ICMP echo requests ('Ping') do testów.

Ta metoda wymaga uprawnień superużytkownika.

Przykład (adresy IP / nazwy pierwszych trzech ruterów nie zostały podane w celu zachowania ich anonimowości):

[root@tpw ~]# traceroute -I www.google.com
traceroute to www.google.com (209.85.129.147), 30 hops max, 60 byte packets
 1  XXX (XXX)  1.948 ms  2.022 ms  2.202 ms
 2  XXX (XXX)  3.915 ms  3.918 ms  3.929 ms
 3  XXX (XXX)  5.870 ms  5.876 ms  5.889 ms
 4  iix12-aux11.highway.telekom.at (195.3.70.206)  17.967 ms  19.781 ms  19.784 ms
 5  72.14.198.241 (72.14.198.241)  19.869 ms  19.867 ms  19.915 ms
 6  209.85.255.178 (209.85.255.178)  20.044 ms  19.502 ms  19.470 ms
 7  72.14.232.201 (72.14.232.201)  19.529 ms  19.523 ms 72.14.232.203 (72.14.232.203)  19.532 ms
 8  72.14.233.210 (72.14.233.210)  27.065 ms  34.198 ms  34.165 ms
 9  fk-in-f147.1e100.net (209.85.129.147)  18.249 ms  19.352 ms  17.936 ms
[root@tpw ~]# 

TCP (-T)

Ta metoda wykorzystuje stały port TCP (port 80 jest domyślnym). Z opcją -p może zostać wybrany inny port docelowy (np. -p 25, w celu kontroli trasy do serwera mailowego). W ten sposób pakiety przedostaną się również przez firewalle, które nie przepuszczają datagramy UDP lub wiadomości ICMP.

Ta metoda wykorzystuje "half-open technique". W ten sposób aplikacje docelowe (np. serwer webowy, gdy pakiety testowe wysyłane są na porcie 80) nie widzą pakietów testowych. Zazwyczaj jest wysyłany pakiet TCP SYN. Jeżeli na hoście docelowym na tym porcie nie nasłuchuję jakaś aplikacja to po prostu wraca TCP RESET. Jeżeli jednak na hoście docelowym jakaś aplikacja nasłuchuje to host odsyła TCP SYN+ACK. Traceroute odpowiada wtedy poprzez TCP RESET (zamiast zaakceptować połączenie poprzez TCP ACK). W ten sposób sesja TCP zostaje odrzucona bez jej zauważenia przez aplikację na docelowym hoście.

Ta metoda wymaga uprawnień superużytkownika.

Przykład (adresy IP / nazwy pierwszych trzech ruterów nie zostały podane w celu zachowania ich anonimowości):

[root@tpw ~]# traceroute -T -p 80 www.google.com
traceroute to www.google.com (209.85.129.147), 30 hops max, 60 byte packets
 1  XXX (XXX)  3.187 ms  3.165 ms  3.142 ms
 2  XXX (XXX)  4.502 ms  4.486 ms  4.478 ms
 3  XXX (XXX)  6.409 ms  6.394 ms  6.365 ms
 4  195.3.118.50 (195.3.118.50)  22.834 ms  22.828 ms iix12-aux11.highway.telekom.at (195.3.70.206)  22.822 ms
 5  72.14.198.241 (72.14.198.241)  22.848 ms  22.827 ms  22.803 ms
 6  209.85.255.178 (209.85.255.178)  22.822 ms 209.85.255.176 (209.85.255.176)  20.884 ms 209.85.255.178 (209.85.255.178)  20.880 ms
 7  72.14.232.165 (72.14.232.165)  20.916 ms  19.753 ms 72.14.232.203 (72.14.232.203)  19.744 ms
 8  72.14.233.210 (72.14.233.210)  33.508 ms 72.14.233.206 (72.14.233.206)  21.713 ms  21.655 ms
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  fk-in-f147.1e100.net (209.85.129.147)  19.678 ms  19.715 ms  19.728 ms
[root@tpw ~]#

UDP (-U)

Ta metoda wykorzystuje stały port UDP (port 53 jest domyślnym). Jest również stosowana w celu obejścia firewallu.

W przeciwieństwie do metody TCP, jeżeli aplikacja na hoście docelowym nasłuchuje na danym porcie to odbiera ona datagram UDP. To może zmylić daną aplikację. W większości przypadków aplikacja nie wysyła odpowiedzi (w ten sposób traceroute nie widzi ostatecznego rutera na trasie).

Ta metoda może zostać wykorzystana przez dowolnego użytkownika i nie wymaga uprawnień użytkownika root.

Dalsze informacje

  • Traceroute manpage

Autor: Werner Fischer

Powiązane artykuły

Analiza ruchu sieciowego w Linuksie z mtr
Pomiar wydajności TCP i UDP w sieci za pomocą Iperf