Możesz skorzystać z komendy traceroute w systemie Linux, aby zidentyfikować wolny etap podróży pakietu w sieci oraz rozwiązać problemy z powolnymi połączeniami. Pokażemy Ci, jak to zrobić!
Zasada działania traceroute
Rozumiejąc działanie traceroute, znacznie łatwiej jest interpretować wyniki jego działania. Im bardziej skomplikowana trasa, którą pokonuje pakiet sieciowy, tym trudniej zlokalizować miejsca, w których mogą występować opóźnienia.
W przypadku małej organizacji sieci lokalnej (LAN) sytuacja jest stosunkowo prosta. Zazwyczaj w takiej sieci znajduje się przynajmniej jeden serwer oraz jeden lub dwa routery. Złożoność wzrasta w przypadku sieci rozległej (WAN), która łączy różne lokalizacje lub korzysta z Internetu. W tym przypadku pakiet napotyka wiele urządzeń, takich jak routery i bramy, przez które jest trasowany i przekazywany.
Nagłówki metadanych w pakietach danych zawierają informacje o ich długości, źródle, celu, używanym protokole i innych szczegółach. Specyfikacja protokołu określa układ nagłówka. Znając protokół, można określić początek i koniec każdego pola w nagłówku oraz odczytać metadane.
Traceroute wykorzystuje protokół TCP/IP i wysyła pakiety Protokół Datagramów Użytkownika. Nagłówek zawiera czas życia (TTL), który jest ośmiobitową liczbą całkowitą. Choć nazwa może sugerować inaczej, liczba ta reprezentuje liczbę skoków, a nie czas.
Pakiet jest przesyłany od źródła do celu za pośrednictwem routerów. Każdorazowo, gdy pakiet dociera do routera, wartość TTL jest zmniejszana. Jeśli TTL osiągnie wartość jeden, router, który odbiera pakiet, zmniejsza tę wartość do zera, co skutkuje odrzuceniem pakietu, ponieważ „upłynął czas życia”.
Router następnie wysyła wiadomość Protokół Kontroli Wiadomości Internetowych (ICMP) z informacją o przekroczeniu czasu do źródła pakietu, aby poinformować je o upłynięciu limitu. Wiadomość ta zawiera oryginalny nagłówek oraz pierwsze 64 bity danych z pierwotnego pakietu, zgodnie z definicją zawartą w RFC 792.
Zatem, jeżeli traceroute wyśle pakiet z TTL ustawionym na jeden, dotrze on jedynie do pierwszego routera, gdzie zostanie odrzucony. Otrzyma komunikat ICMP o przekroczeniu czasu, co pozwoli zarejestrować czas potrzebny na podróż pakietu w obie strony.
Proces ten powtarza się, zwiększając TTL o jeden przy każdym kolejnym teście, aż do osiągnięcia celu lub przekroczenia maksymalnej liczby przeskoków (domyślnie 30).
Problemy z niektórymi routerami
Niektóre routery mogą nie działać poprawnie. Może się zdarzyć, że próbują przekazywać pakiety z TTL równym zero, zamiast je odrzucać i wysyłać komunikat ICMP o przekroczeniu czasu.
Jak podaje Cisco, niektórzy dostawcy usług internetowych (ISP) mogą ograniczać liczbę komunikatów ICMP, które ich routery przekazują.
Niektóre urządzenia są skonfigurowane w taki sposób, aby nigdy nie wysyłać pakietów ICMP, co często ma na celu zabezpieczenie przed niezamierzonym uczestnictwem w atakach typu DDoS, takich jak atak Smurf.
Domyślny czas oczekiwania na odpowiedź w traceroute wynosi pięć sekund. Jeżeli odpowiedź nie nadejdzie w tym czasie, próba jest przerywana, co skutkuje ignorowaniem odpowiedzi z bardzo wolnych routerów.
Instalacja traceroute
Traceroute jest już zainstalowane w systemie Fedora 31, ale w Manjaro 18.1 i Ubuntu 18.04 musi być zainstalowane ręcznie. Aby zainstalować traceroute na Manjaro, użyj następującego polecenia:
sudo pacman -Sy traceroute
Aby zainstalować traceroute w systemie Ubuntu, użyj następującego polecenia:
sudo apt-get install traceroute
Jak korzystać z traceroute
Jak już wspomniano, celem traceroute jest uzyskanie odpowiedzi z routera na każdym przeskoku z komputera do docelowego miejsca. Niektóre routery mogą nie udzielać odpowiedzi, podczas gdy inne mogą być bardziej otwarte na komunikację.
Przykładowo, uruchomimy traceroute do strony internetowej Blarney Castle w Irlandii, gdzie znajduje się słynny Kamień Blarney. Legenda głosi, że pocałunek Kamienia Blarney obdarza „darem gadki”. Miejmy nadzieję, że routery, które napotkamy po drodze, będą skore do dialogu.
Wpisujemy następujące polecenie:
traceroute www.blarneycastle.ie
Pierwsza linia wyjścia zawiera następujące informacje:
- Miejsce docelowe oraz jego adres IP.
- Liczba przeskoków, które traceroute będzie próbować, zanim zakończy działanie.
- Rozmiar wysyłanych pakietów UDP.
Format każdej linii przeskoku jest następujący:
- Nazwa urządzenia lub, jeśli urządzenie nie identyfikuje się, jego adres IP.
- Adres IP.
- Czas potrzebny na podróż w obie strony dla każdego z trzech testów. Jeśli znajduje się tu gwiazdka, oznacza to, że nie otrzymano odpowiedzi na ten test. Jeżeli urządzenie nie odpowiada w ogóle, zobaczymy trzy gwiazdki oraz brak nazwy urządzenia lub adresu IP.
Przyjrzyjmy się, co udało się uzyskać:
- Przeskok 1: Pierwszym urządzeniem jest router DrayTek Vigor w sieci lokalnej, co oznacza, że nasze pakiety UDP opuszczają sieć lokalną i wkrótce trafiają do Internetu.
- Przeskok 2: To urządzenie nie odpowiedziało. Może zostało skonfigurowane, aby nie wysyłać pakietów ICMP. Istnieje też możliwość, że zareagowało, ale zbyt wolno, przez co traceroute nie otrzymał odpowiedzi.
- Przeskok 3: Urządzenie odpowiedziało, ale nie uzyskaliśmy jego nazwy, tylko adres IP. W tym przypadku pojawia się gwiazdka, co sugeruje, że nie otrzymaliśmy odpowiedzi na wszystkie trzy zapytania, co może wskazywać na utratę pakietów.
- Przeskoki 4 i 5: Kolejne anonimowe przeskoki.
- Przeskok 6: Tutaj otrzymujemy więcej informacji, ponieważ inne zdalne urządzenie odpowiedziało na każde z naszych zapytań UDP, podając (dość długie) nazwy i adresy IP dla wszystkich urządzeń. Może to się zdarzyć, gdy napotykamy na gęsto zaludnioną sieć z dużą ilością sprzętu obsługującego ruch. Ten przeskok dotyczy jednego z największych dostawców usług internetowych w Wielkiej Brytanii. Byłoby zaskoczeniem, gdyby to samo zdalne urządzenie obsłużyło nasze trzy zapytania.
- Przeskok 7: Ten przeskok reprezentuje nasze pakiety UDP, gdy opuszczają sieć dostawcy usług internetowych.
- Przeskok 8: Ponownie otrzymujemy adres IP, ale nie nazwę urządzenia. Wszystkie trzy testy zakończyły się sukcesem.
- Przeskoki 9 i 10: Dwa kolejne anonimowe przeskoki.
- Przeskok 11: Dotarliśmy na stronę internetową zamku Blarney. Zamek znajduje się w Cork w Irlandii, ale według geolokalizacji adresu IP, witryna znajduje się w Londynie.
Widzimy więc, że wyniki są mieszane. Niektóre urządzenia udzieliły odpowiedzi, inne podały jedynie adresy IP, a niektóre pozostały całkowicie anonimowe.
Jednak udało nam się dotrzeć do celu, co oznacza, że mamy 11 przeskoków, a czas podróży w obie strony wyniósł 13,773 i 14,715 milisekund.
Ukrywanie nazw urządzeń
Jak zauważyliśmy, czasami podawanie nazw urządzeń prowadzi do zagraconego wyświetlania wyników. Aby ułatwić przeglądanie danych, można użyć opcji -n (bez mapowania nazw).
Aby to zrobić w naszym przypadku, wpisujemy:
traceroute -n blarneycastle.ie
Ułatwia to zauważenie dużych wartości czasów w obie strony, co może wskazywać na wąskie gardło.
W przypadku przeskoku 3 widzimy, że odpowiedź przyszła tylko raz, co może budzić pewne wątpliwości. W takim przypadku warto bliżej przyjrzeć się temu węzłowi, zwłaszcza jeśli analizujemy swoją sieć firmową.
Ustawianie limitu czasu w traceroute
Możliwe, że wydłużenie domyślnego limitu czasu (pięć sekund) pozwoli na uzyskanie większej liczby odpowiedzi. Aby to zrobić, użyjemy opcji -w (czas oczekiwania) i ustawimy ją na siedem sekund (można użyć wartości zmiennoprzecinkowej).
Wpisujemy następujące polecenie:
traceroute -w 7.0 blarneycastle.ie
Nie miało to większego wpływu, więc odpowiedzi prawdopodobnie wygasają. Prawdopodobnie anonimowe przeskoki są celowo ukrywane.
Dostosowywanie liczby testów
Domyślnie traceroute wysyła trzy pakiety UDP do każdego przeskoku. Możemy dostosować tę liczbę za pomocą opcji -q (liczba zapytań), aby zwiększyć lub zmniejszyć ilość pakietów.
Aby przyspieszyć test traceroute, możemy zmniejszyć liczbę wysyłanych pakietów UDP do jednego, wpisując:
traceroute -q 1 blarneycastle.ie
To spowoduje wysłanie pojedynczej sondy do każdego przeskoku.
Ustawianie początkowej wartości TTL
Możemy ustawić początkową wartość TTL na inną niż jeden, co pozwoli nam pominąć niektóre przeskoki. Zwykle wartości TTL są ustawiane na jeden dla pierwszego zestawu testów, dwa dla następnego i tak dalej. Ustawiając ją na pięć, pierwszy test spróbuje przeskoczyć pięć razy, pomijając przeskoki od jednego do czterech.
Znając, że strona internetowa Blarney Castle wymaga 11 przeskoków, możemy wpisać polecenie, aby rozpocząć od przeskoku 11:
traceroute -f 11 blarneycastle.ie
To umożliwi nam uzyskanie zwięzłego raportu o stanie połączenia z celem.
Zachowaj ostrożność
Traceroute to doskonałe narzędzie do analizy routingu sieciowego, sprawdzania szybkości połączeń czy identyfikowania wąskich gardeł. W systemie Windows istnieje podobna komenda o nazwie tracert.
Należy jednak pamiętać, aby nie bombardować nieznanych urządzeń dużą ilością pakietów UDP oraz zachować ostrożność przy włączaniu traceroute w skryptach lub zadaniach automatycznych.
Obciążenie, które może generować traceroute, może negatywnie wpłynąć na wydajność sieci. Jeśli nie jest to sytuacja kryzysowa, warto używać tego narzędzia poza godzinami szczytu.
newsblog.pl